From 5c3e29c75028e1059fe2b4c8203751014080618e Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 9 Oct 2016 12:56:42 +0200 Subject: [PATCH] Graphics/ForwardRenderTechnique: Fix sending uniforms when shadows are disabled Former-commit-id: a1c74d1c8e90fb0c9fd00342cd9688b7987c8229 [formerly 30588634d7283d3afa190d45672955631cd275be] [formerly 5f006c4db2f43bf5a167e2c2f02559d5d7c01275 [formerly 43b03cfc6e1255d5ebd86d0af8e49d19087e7ce0]] Former-commit-id: 1717577f8523b12489ad79b4f525a3059d11915d [formerly d0b9210e3c6acf35885b4d22717ce660756ef181] Former-commit-id: f175b9ca43fe11cc11050d7c13f2e8df35e4888a --- .../Graphics/ForwardRenderTechnique.inl | 55 +++++++++++++------ 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/include/Nazara/Graphics/ForwardRenderTechnique.inl b/include/Nazara/Graphics/ForwardRenderTechnique.inl index 6490513f8..5f7ba181f 100644 --- a/include/Nazara/Graphics/ForwardRenderTechnique.inl +++ b/include/Nazara/Graphics/ForwardRenderTechnique.inl @@ -38,19 +38,25 @@ namespace Nz shader->SendVector(uniforms.locations.factors + uniformOffset, Vector2f(light.ambientFactor, light.diffuseFactor)); shader->SendVector(uniforms.locations.parameters1 + uniformOffset, Vector4f(light.direction)); - shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (uniforms.locations.shadowMapping != -1) + shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (light.shadowMap) { Renderer::SetTexture(availableTextureUnit, light.shadowMap); Renderer::SetTextureSampler(availableTextureUnit, s_shadowSampler); - shader->SendMatrix(uniforms.locations.lightViewProjMatrix + index, light.transformMatrix); - shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, availableTextureUnit); + if (uniforms.locations.lightViewProjMatrix != -1) + shader->SendMatrix(uniforms.locations.lightViewProjMatrix + index, light.transformMatrix); + + if (uniforms.locations.directionalSpotLightShadowMap != -1) + shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, availableTextureUnit); } - else + else if (uniforms.locations.directionalSpotLightShadowMap != -1) shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); - shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); + if (uniforms.locations.directionalSpotLightShadowMap != -1) + shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); break; } @@ -63,18 +69,22 @@ namespace Nz shader->SendVector(uniforms.locations.parameters1 + uniformOffset, Vector4f(light.position, light.attenuation)); shader->SendVector(uniforms.locations.parameters2 + uniformOffset, Vector4f(0.f, 0.f, 0.f, light.invRadius)); - shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (uniforms.locations.shadowMapping != -1) + shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (light.shadowMap) { Renderer::SetTexture(availableTextureUnit, light.shadowMap); Renderer::SetTextureSampler(availableTextureUnit, s_shadowSampler); - shader->SendInteger(uniforms.locations.pointLightShadowMap + index, availableTextureUnit); + if (uniforms.locations.pointLightShadowMap != -1) + shader->SendInteger(uniforms.locations.pointLightShadowMap + index, availableTextureUnit); } - else + else if (uniforms.locations.pointLightShadowMap != -1) shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); - shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); + if (uniforms.locations.directionalSpotLightShadowMap != -1) + shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); break; } @@ -88,19 +98,25 @@ namespace Nz shader->SendVector(uniforms.locations.parameters2 + uniformOffset, Vector4f(light.direction, light.invRadius)); shader->SendVector(uniforms.locations.parameters3 + uniformOffset, Vector2f(light.innerAngleCosine, light.outerAngleCosine)); - shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (uniforms.locations.shadowMapping != -1) + shader->SendBoolean(uniforms.locations.shadowMapping + uniformOffset, light.shadowMap != nullptr); + if (light.shadowMap) { Renderer::SetTexture(availableTextureUnit, light.shadowMap); Renderer::SetTextureSampler(availableTextureUnit, s_shadowSampler); - shader->SendMatrix(uniforms.locations.lightViewProjMatrix + index, light.transformMatrix); - shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, availableTextureUnit); + if (uniforms.locations.lightViewProjMatrix != -1) + shader->SendMatrix(uniforms.locations.lightViewProjMatrix + index, light.transformMatrix); + + if (uniforms.locations.directionalSpotLightShadowMap != -1) + shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, availableTextureUnit); } - else + else if (uniforms.locations.directionalSpotLightShadowMap != -1) shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); - shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); + if (uniforms.locations.pointLightShadowMap != -1) + shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); break; } @@ -108,9 +124,14 @@ namespace Nz } else { - shader->SendInteger(uniforms.locations.type + uniformOffset, -1); //< Disable the light in the shader - shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); - shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); + if (uniforms.locations.type != -1) + shader->SendInteger(uniforms.locations.type + uniformOffset, -1); //< Disable the light in the shader + + if (uniforms.locations.directionalSpotLightShadowMap != -1) + shader->SendInteger(uniforms.locations.directionalSpotLightShadowMap + index, dummyTexture); + + if (uniforms.locations.pointLightShadowMap != -1) + shader->SendInteger(uniforms.locations.pointLightShadowMap + index, dummyCubemap); } }