@@ -97,6 +97,8 @@ void GBufferPass::Update(const float fDeltaTime)
9797 ResourceMgr->GetTexture (LinearFullDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
9898 ResourceMgr->GetTexture (LinearQuarterDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
9999 ResourceMgr->GetTexture (HyperbolicQuarterDepthBuffer.GetRenderTarget ()->GetColorBuffer ())->SetFilter (SF_MIN_MAG_POINT_MIP_NONE);
100+
101+ DIFFUSE_ANISOTROPY = Math::clamp (DIFFUSE_ANISOTROPY, 1 , (int )MAX_ANISOTROPY);
100102}
101103
102104void GBufferPass::Draw ()
@@ -151,27 +153,33 @@ void GBufferPass::Draw()
151153 {
152154 PUSH_PROFILE_MARKER (SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->szName .c_str ());
153155
154- DIFFUSE_ANISOTROPY = Math::clamp (DIFFUSE_ANISOTROPY, 1 , (int )MAX_ANISOTROPY);
155- RenderContext->GetResourceManager ()->GetTexture (
156- SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx )
157- )->SetAnisotropy ((unsigned int )DIFFUSE_ANISOTROPY);
156+ const unsigned int diffuseTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
157+ const unsigned int normalTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_HEIGHT, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
158+ const unsigned int specTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_SPECULAR, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
159+ const unsigned int matTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_AMBIENT, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
160+ const unsigned int roughnessTexIdx = SponzaScene.GetTexture (Synesthesia3D::Model::TextureDesc::TT_SHININESS, SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx );
161+
162+ if (diffuseTexIdx != ~0u && ((texMatType != ~0u && texRoughness != ~0u ) || nBRDFModel == BLINN_PHONG))
163+ {
164+ RenderContext->GetResourceManager ()->GetTexture (diffuseTexIdx)->SetAnisotropy ((unsigned int )DIFFUSE_ANISOTROPY);
158165
159- texDiffuse = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_DIFFUSE, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx ) ;
160- texNormal = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_HEIGHT, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx ) ;
161- bHasNormalMap = (texNormal != -1 ) && GBUFFER_USE_NORMAL_MAPS;
166+ texDiffuse = diffuseTexIdx ;
167+ texNormal = normalTexIdx ;
168+ bHasNormalMap = (texNormal != -1 ) && GBUFFER_USE_NORMAL_MAPS;
162169
163- // For Blinn-Phong BRDF
164- texSpec = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_SPECULAR, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
165- bHasSpecMap = (texSpec != -1 );
166- fSpecIntensity = SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->fShininessStrength ;
170+ // For Blinn-Phong BRDF
171+ texSpec = (nBRDFModel == BLINN_PHONG ? specTexIdx : ~ 0u );
172+ bHasSpecMap = (texSpec != -1 );
173+ fSpecIntensity = SponzaScene.GetModel ()->arrMaterial [SponzaScene.GetModel ()->arrMesh [mesh]->nMaterialIdx ]->fShininessStrength ;
167174
168- // For Cook-Torrance BRDF
169- texMatType = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_AMBIENT, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
170- texRoughness = SponzaScene. GetTexture (Synesthesia3D::Model::TextureDesc::TT_SHININESS, SponzaScene. GetModel ()-> arrMesh [mesh]-> nMaterialIdx );
175+ // For Cook-Torrance BRDF
176+ texMatType = (nBRDFModel == COOK_TORRANCE_GGX || nBRDFModel == COOK_TORRANCE_BECKMANN ? matTexIdx : ~ 0u );
177+ texRoughness = (nBRDFModel == COOK_TORRANCE_GGX || nBRDFModel == COOK_TORRANCE_BECKMANN ? roughnessTexIdx : ~ 0u );
171178
172- GBufferGenerationShader.Enable ();
173- RenderContext->DrawVertexBuffer (SponzaScene.GetModel ()->arrMesh [mesh]->pVertexBuffer );
174- GBufferGenerationShader.Disable ();
179+ GBufferGenerationShader.Enable ();
180+ RenderContext->DrawVertexBuffer (SponzaScene.GetModel ()->arrMesh [mesh]->pVertexBuffer );
181+ GBufferGenerationShader.Disable ();
182+ }
175183
176184 POP_PROFILE_MARKER ();
177185 }
0 commit comments