Browse Source

Minor refactoring

Panagiotis Christopoulos Charitos 10 years ago
parent
commit
9690c8966e
4 changed files with 33 additions and 47 deletions
  1. 4 17
      include/anki/renderer/Ir.h
  2. 2 2
      shaders/Refl.frag.glsl
  3. 14 2
      src/renderer/Ir.cpp
  4. 13 26
      src/renderer/Refl.cpp

+ 4 - 17
include/anki/renderer/Ir.h

@@ -36,16 +36,6 @@ anki_internal:
 
 	ANKI_USE_RESULT Error run(CommandBufferPtr cmdb);
 
-	TexturePtr getEnvironmentCubemapArray() const
-	{
-		return m_envCubemapArr;
-	}
-
-	TexturePtr getIrradianceCubemapArray() const
-	{
-		return m_irradianceCubemapArr;
-	}
-
 	DynamicBufferToken getProbesToken() const
 	{
 		return m_probesToken;
@@ -71,14 +61,9 @@ anki_internal:
 		return m_clusterer;
 	}
 
-	TexturePtr getIntegrationLut() const
+	ResourceGroupPtr getResourceGroup() const
 	{
-		return m_integrationLut->getGrTexture();
-	}
-
-	SamplerPtr getIntegrationLutSampler() const
-	{
-		return m_integrationLutSampler;
+		return m_rcGroup;
 	}
 
 private:
@@ -115,6 +100,8 @@ private:
 	DynamicBufferToken m_clustersToken;
 	DynamicBufferToken m_indicesToken;
 
+	ResourceGroupPtr m_rcGroup;
+
 	ANKI_USE_RESULT Error initIrradiance();
 
 	/// Bin probes in clusters.

+ 2 - 2
shaders/Refl.frag.glsl

@@ -25,9 +25,9 @@ layout(TEX_BINDING(0, 4)) uniform sampler2D u_isRt;
 
 // IR
 #if IR_ENABLED
-#define IMAGE_REFLECTIONS_SET 0
+#define IMAGE_REFLECTIONS_SET 1
 #define IMAGE_REFLECTIONS_FIRST_SS_BINDING 0
-#define IMAGE_REFLECTIONS_TEX_BINDING 5
+#define IMAGE_REFLECTIONS_TEX_BINDING 0
 #include "shaders/ImageReflections.glsl"
 #undef IMAGE_REFLECTIONS_SET
 #undef IMAGE_REFLECTIONS_FIRST_SS_BINDING

+ 14 - 2
src/renderer/Ir.cpp

@@ -243,8 +243,6 @@ Error Ir::init(const ConfigSet& config)
 	sinit.m_repeat = false;
 	m_integrationLutSampler = getGrManager().newInstance<Sampler>(sinit);
 
-	getGrManager().finish();
-
 	// Init the clusterer
 	U width = m_r->getWidth() / 2;
 	U height = m_r->getHeight() / 2;
@@ -257,6 +255,20 @@ Error Ir::init(const ConfigSet& config)
 
 	m_clusterer.init(getAllocator(), tileCountX, tileCountY, clusterCountZ);
 
+	// Init the resource group
+	ResourceGroupInitializer rcInit;
+	rcInit.m_textures[0].m_texture = m_envCubemapArr;
+	rcInit.m_textures[1].m_texture = m_irradianceCubemapArr;
+
+	rcInit.m_textures[2].m_texture = m_integrationLut->getGrTexture();
+	rcInit.m_textures[2].m_sampler = m_integrationLutSampler;
+
+	rcInit.m_storageBuffers[0].m_dynamic = true;
+	rcInit.m_storageBuffers[1].m_dynamic = true;
+	rcInit.m_storageBuffers[2].m_dynamic = true;
+
+	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
+
 	return ErrorCode::NONE;
 }
 

+ 13 - 26
src/renderer/Refl.cpp

@@ -135,28 +135,8 @@ Error Refl::initInternal(const ConfigSet& config)
 		rcInit.m_textures[4].m_texture = m_r->getIs().getRt();
 	}
 
-	if(m_r->getIrEnabled())
-	{
-		rcInit.m_textures[5].m_texture =
-			m_r->getIr().getEnvironmentCubemapArray();
-
-		rcInit.m_textures[6].m_texture =
-			m_r->getIr().getIrradianceCubemapArray();
-
-		rcInit.m_textures[7].m_texture = m_r->getIr().getIntegrationLut();
-		rcInit.m_textures[7].m_sampler =
-			m_r->getIr().getIntegrationLutSampler();
-	}
-
 	rcInit.m_uniformBuffers[0].m_dynamic = true;
 
-	if(m_r->getIrEnabled())
-	{
-		rcInit.m_storageBuffers[0].m_dynamic = true;
-		rcInit.m_storageBuffers[1].m_dynamic = true;
-		rcInit.m_storageBuffers[2].m_dynamic = true;
-	}
-
 	m_rcGroup = getGrManager().newInstance<ResourceGroup>(rcInit);
 
 	// Create RTs
@@ -193,13 +173,8 @@ void Refl::run(CommandBufferPtr cmdb)
 	cmdb->setViewport(0, 0, m_width, m_height);
 	cmdb->bindPipeline(m_ppline);
 
+	// Bind first resource group
 	DynamicBufferInfo dyn;
-	if(m_r->getIrEnabled())
-	{
-		dyn.m_storageBuffers[0] = m_r->getIr().getProbesToken();
-		dyn.m_storageBuffers[1] = m_r->getIr().getProbeIndicesToken();
-		dyn.m_storageBuffers[2] = m_r->getIr().getClustersToken();
-	};
 
 	const FrustumComponent& frc = m_r->getActiveFrustumComponent();
 	ReflUniforms* blk = static_cast<ReflUniforms*>(
@@ -211,6 +186,18 @@ void Refl::run(CommandBufferPtr cmdb)
 
 	cmdb->bindResourceGroup(m_rcGroup, 0, &dyn);
 
+	// Bind second resource group
+	if(m_r->getIrEnabled())
+	{
+		DynamicBufferInfo dyn;
+
+		dyn.m_storageBuffers[0] = m_r->getIr().getProbesToken();
+		dyn.m_storageBuffers[1] = m_r->getIr().getProbeIndicesToken();
+		dyn.m_storageBuffers[2] = m_r->getIr().getClustersToken();
+
+		cmdb->bindResourceGroup(m_r->getIr().getResourceGroup(), 1, &dyn);
+	};
+
 	m_r->drawQuad(cmdb);
 }