From 400e472fabd2604974b2496f80916bca51ff9e59 Mon Sep 17 00:00:00 2001 From: sshutina Date: Wed, 12 Nov 2025 13:59:30 +0000 Subject: [PATCH] Fix per-vertex rendering per-vertex lighting ignored back/front material colors --- src/OpenGl/OpenGl_ShaderManager.cxx | 36 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/OpenGl/OpenGl_ShaderManager.cxx b/src/OpenGl/OpenGl_ShaderManager.cxx index 3c8f75f89b..72f1ee5c04 100644 --- a/src/OpenGl/OpenGl_ShaderManager.cxx +++ b/src/OpenGl/OpenGl_ShaderManager.cxx @@ -2346,19 +2346,14 @@ TCollection_AsciiString OpenGl_ShaderManager::stdComputeLighting (Standard_Integ TCollection_AsciiString aGetMatAmbient = "theIsFront ? occFrontMaterial_Ambient() : occBackMaterial_Ambient();"; TCollection_AsciiString aGetMatDiffuse = "theIsFront ? occFrontMaterial_Diffuse() : occBackMaterial_Diffuse();"; - if (theHasVertColor) - { - aGetMatAmbient = "getVertColor();"; - aGetMatDiffuse = "getVertColor();"; - } if (!theIsPBR) { return TCollection_AsciiString() - + THE_FUNC_lightDef - + Shaders_PointLightAttenuation_glsl - + aLightsFunc - + EOL + + THE_FUNC_lightDef + + Shaders_PointLightAttenuation_glsl + + aLightsFunc + + EOL EOL"vec4 computeLighting (in vec3 theNormal," EOL" in vec3 theView," EOL" in vec4 thePoint," @@ -2368,16 +2363,19 @@ TCollection_AsciiString OpenGl_ShaderManager::stdComputeLighting (Standard_Integ EOL" Diffuse = vec3 (0.0);" EOL" Specular = vec3 (0.0);" EOL" vec3 aPoint = thePoint.xyz / thePoint.w;" - + aLightsLoop - + EOL" vec4 aMatAmbient = " + aGetMatAmbient - + EOL" vec4 aMatDiffuse = " + aGetMatDiffuse - + EOL" vec4 aMatSpecular = theIsFront ? occFrontMaterial_Specular() : occBackMaterial_Specular();" - EOL" vec3 aColor = Ambient * aMatAmbient.rgb + Diffuse * aMatDiffuse.rgb + Specular * aMatSpecular.rgb;" - EOL" occTextureOcclusion(aColor, TexCoord.st);" - + (theHasEmissive - ? EOL" vec4 aMatEmission = theIsFront ? occFrontMaterial_Emission() : occBackMaterial_Emission();" - EOL" aColor += aMatEmission.rgb;" : "") - + EOL" return vec4 (aColor, aMatDiffuse.a);" + + aLightsLoop + + EOL" vec4 aMatAmbient = " + aGetMatAmbient + + EOL" vec4 aMatDiffuse = " + aGetMatDiffuse + + EOL" vec4 aMatSpecular = theIsFront ? occFrontMaterial_Specular() : occBackMaterial_Specular();" + + EOL" vec3 aVertColor = " + (theHasVertColor ? "getVertColor().rgb;" : "vec3(1.0);") + + EOL" vec3 aColor = Ambient * aMatAmbient.rgb * aVertColor" + + EOL" + Diffuse * aMatDiffuse.rgb * aVertColor" + + EOL" + Specular * aMatSpecular.rgb;" + + EOL" occTextureOcclusion(aColor, TexCoord.st);" + + (theHasEmissive + ? EOL" vec4 aMatEmission = theIsFront ? occFrontMaterial_Emission() : occBackMaterial_Emission();" + EOL" aColor += aMatEmission.rgb;" : "") + + EOL" return vec4 (aColor, aMatDiffuse.a);" EOL"}"; } else -- 2.39.5