forked from enlightenment/efl
evas 3d: Fix shaders compilation (parallax and normal)
My nvidia EGL driver coultn't compile some shaders because of the error: error C1059: non constant expression in initialization The proposed patch at D4068 is not acceptable since it just brings the original problem back. Instead, make sure all vec3 variables are initialized in main() or another function, not in the global scope. I tested all examples in evas
This commit is contained in:
parent
8a27315878
commit
41e17f7e73
|
@ -185,7 +185,8 @@ static const char diffuse_frag_glsl[] =
|
|||
" vec4 color;\n"
|
||||
" \n"
|
||||
"#ifdef DIFFUSE_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
|
||||
" vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
|
||||
" texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
|
||||
" color *= uMaterialDiffuse;\n"
|
||||
|
@ -471,7 +472,8 @@ static const char flat_frag_glsl[] =
|
|||
"#ifdef DIFFUSE\n"
|
||||
" \n"
|
||||
"#ifdef DIFFUSE_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
|
||||
" vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
|
||||
" texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
|
||||
" color *= uMaterialDiffuse;\n"
|
||||
|
@ -490,7 +492,8 @@ static const char flat_frag_glsl[] =
|
|||
"#ifdef SPECULAR\n"
|
||||
" \n"
|
||||
"#ifdef SPECULAR_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
|
||||
" vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
|
||||
" texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
|
||||
" color *= uMaterialSpecular;\n"
|
||||
|
@ -510,7 +513,8 @@ static const char flat_frag_glsl[] =
|
|||
"#ifdef AMBIENT\n"
|
||||
" \n"
|
||||
"#ifdef AMBIENT_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
|
||||
" vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
|
||||
" texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
|
||||
" color *= uMaterialAmbient;\n"
|
||||
|
@ -527,7 +531,8 @@ static const char flat_frag_glsl[] =
|
|||
"#ifdef EMISSION\n"
|
||||
" \n"
|
||||
"#ifdef EMISSION_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
|
||||
" vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
|
||||
" texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
|
||||
" color *= uMaterialEmission;\n"
|
||||
|
@ -814,7 +819,8 @@ static const char phong_frag_glsl[] =
|
|||
"#ifdef DIFFUSE\n"
|
||||
" \n"
|
||||
"#ifdef DIFFUSE_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
|
||||
" vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
|
||||
" texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
|
||||
" color *= uMaterialDiffuse;\n"
|
||||
|
@ -838,7 +844,8 @@ static const char phong_frag_glsl[] =
|
|||
" factor = pow(factor, uMaterialShininess);\n"
|
||||
" \n"
|
||||
"#ifdef SPECULAR_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
|
||||
" vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
|
||||
" texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
|
||||
" color *= uMaterialSpecular;\n"
|
||||
|
@ -862,7 +869,8 @@ static const char phong_frag_glsl[] =
|
|||
"#ifdef AMBIENT\n"
|
||||
" \n"
|
||||
"#ifdef AMBIENT_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
|
||||
" vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
|
||||
" texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
|
||||
" color *= uMaterialAmbient;\n"
|
||||
|
@ -884,7 +892,8 @@ static const char phong_frag_glsl[] =
|
|||
"#ifdef EMISSION\n"
|
||||
" \n"
|
||||
"#ifdef EMISSION_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
|
||||
" vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
|
||||
" texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
|
||||
" color *= uMaterialEmission;\n"
|
||||
|
@ -1247,7 +1256,9 @@ static const char normal_map_frag_glsl[] =
|
|||
" vec3 normal;\n"
|
||||
" vec4 color;\n"
|
||||
" vec4 fragcolor;\n"
|
||||
" vec3 Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
|
||||
"#ifdef NORMAL_TEXTURE_BLEND\n"
|
||||
" vec3 Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
|
||||
" normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;\n"
|
||||
" normal += texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).rgb / texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a *\n"
|
||||
" (1.0 - uTextureNormalWeight);\n"
|
||||
|
@ -1273,7 +1284,8 @@ static const char normal_map_frag_glsl[] =
|
|||
"#ifdef DIFFUSE\n"
|
||||
" \n"
|
||||
"#ifdef DIFFUSE_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" vec3 Tex0CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
|
||||
" vec3 Tex1CoordDiffuse = vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
|
||||
" color = mix(texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)),\n"
|
||||
" texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)), uTextureDiffuseWeight);\n"
|
||||
" color *= uMaterialDiffuse;\n"
|
||||
|
@ -1296,7 +1308,8 @@ static const char normal_map_frag_glsl[] =
|
|||
" factor = pow(factor, uMaterialShininess);\n"
|
||||
" \n"
|
||||
"#ifdef SPECULAR_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" vec3 Tex0CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
|
||||
" vec3 Tex1CoordSpecular = vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
|
||||
" color = mix(texture2D(uTextureSpecular1, vec2(Tex1CoordSpecular)),\n"
|
||||
" texture2D(uTextureSpecular0, vec2(Tex0CoordSpecular)), uTextureSpecularWeight);\n"
|
||||
" color *= uMaterialSpecular;\n"
|
||||
|
@ -1320,7 +1333,8 @@ static const char normal_map_frag_glsl[] =
|
|||
"#ifdef AMBIENT\n"
|
||||
" \n"
|
||||
"#ifdef AMBIENT_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" vec3 Tex0CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
|
||||
" vec3 Tex1CoordAmbient = vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
|
||||
" color = mix(texture2D(uTextureAmbient1, vec2(Tex1CoordAmbient)),\n"
|
||||
" texture2D(uTextureAmbient0, vec2(Tex0CoordAmbient)), uTextureAmbientWeight);\n"
|
||||
" color *= uMaterialAmbient;\n"
|
||||
|
@ -1340,7 +1354,8 @@ static const char normal_map_frag_glsl[] =
|
|||
"#ifdef EMISSION\n"
|
||||
" \n"
|
||||
"#ifdef EMISSION_TEXTURE_BLEND\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" vec3 Tex0CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
|
||||
" vec3 Tex1CoordEmission = vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
|
||||
" color = mix(texture2D(uTextureEmission1, vec2(Tex1CoordEmission)),\n"
|
||||
" texture2D(uTextureEmission0, vec2(Tex0CoordEmission)), uTextureEmissionWeight);\n"
|
||||
" color *= uMaterialEmission;\n"
|
||||
|
@ -1767,15 +1782,13 @@ static const char parallax_occlusion_frag_glsl[] =
|
|||
"uniform mat3 uTextureMatrixTransformNormal0;\n"
|
||||
"#ifdef NEED_TEX_COORD\n"
|
||||
"varying vec2 vTexCoord;\n"
|
||||
"vec3 Tex0CoordNormal =\n"
|
||||
" vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
|
||||
"vec3 Tex0CoordNormal;\n"
|
||||
"#endif //TEX_COORD\n"
|
||||
"#ifdef NORMAL_TEXTURE_BLEND\n"
|
||||
"uniform sampler2D uTextureNormal1;\n"
|
||||
"uniform float uTextureNormalWeight;\n"
|
||||
"uniform mat3 uTextureMatrixTransformNormal1;\n"
|
||||
"vec3 Tex1CoordNormal =\n"
|
||||
" vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
|
||||
"vec3 Tex1CoordNormal;\n"
|
||||
"#endif //NORMAL_TEXTURE_BLEND\n"
|
||||
"#ifdef FOG_ENABLED\n"
|
||||
"uniform float uFogFactor;\n"
|
||||
|
@ -2011,6 +2024,12 @@ static const char parallax_occlusion_frag_glsl[] =
|
|||
"}\n"
|
||||
"void main() {\n"
|
||||
" vec4 color;\n"
|
||||
"#ifdef NEED_TEX_COORD\n"
|
||||
" Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
|
||||
"#endif // NEED_TEX_COORD\n"
|
||||
"#ifdef NORMAL_TEXTURE_BLEND\n"
|
||||
" Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
|
||||
"#endif //NORMAL_TEXTURE_BLEND\n"
|
||||
"#ifdef SHADOWED\n"
|
||||
" shadow = pcf(vLightPosition);\n"
|
||||
"#endif //SHADOWED\n"
|
||||
|
|
|
@ -75,7 +75,8 @@ varying float vLightDist;
|
|||
|
||||
define(`FRAGMENT_SHADER_TEXTURE_BLEND', `
|
||||
#ifdef $1_TEXTURE_BLEND
|
||||
vec3 Tex0Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`1';
|
||||
vec3 Tex0Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`0';
|
||||
vec3 Tex1Coord$2 = vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`1';
|
||||
color = mix(texture2D(uTexture$2`1', vec2(Tex1Coord$2)),
|
||||
texture2D(uTexture$2`0', vec2(Tex0Coord$2)), uTexture$2Weight);
|
||||
color *= uMaterial$2;
|
||||
|
|
|
@ -47,7 +47,10 @@ vec4 fragmentNormalMap()
|
|||
vec3 normal;
|
||||
vec4 color;
|
||||
vec4 fragcolor;
|
||||
|
||||
vec3 Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
|
||||
#ifdef NORMAL_TEXTURE_BLEND
|
||||
vec3 Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
|
||||
normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb * uTextureNormalWeight / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;
|
||||
normal += texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).rgb / texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a *
|
||||
(1.0 - uTextureNormalWeight);
|
||||
|
|
|
@ -6,16 +6,14 @@ uniform mat3 uTextureMatrixTransformNormal0;
|
|||
|
||||
#ifdef NEED_TEX_COORD
|
||||
varying vec2 vTexCoord;
|
||||
vec3 Tex0CoordNormal =
|
||||
vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
|
||||
vec3 Tex0CoordNormal;
|
||||
#endif //TEX_COORD
|
||||
|
||||
#ifdef NORMAL_TEXTURE_BLEND
|
||||
uniform sampler2D uTextureNormal1;
|
||||
uniform float uTextureNormalWeight;
|
||||
uniform mat3 uTextureMatrixTransformNormal1;
|
||||
vec3 Tex1CoordNormal =
|
||||
vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
|
||||
vec3 Tex1CoordNormal;
|
||||
#endif //NORMAL_TEXTURE_BLEND
|
||||
|
||||
FRAGMENT_SHADER_USE_FOG
|
||||
|
@ -215,6 +213,15 @@ vec4 fragmentParallaxMap()
|
|||
|
||||
void main() {
|
||||
vec4 color;
|
||||
|
||||
#ifdef NEED_TEX_COORD
|
||||
Tex0CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
|
||||
#endif // NEED_TEX_COORD
|
||||
|
||||
#ifdef NORMAL_TEXTURE_BLEND
|
||||
Tex1CoordNormal = vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
|
||||
#endif //NORMAL_TEXTURE_BLEND
|
||||
|
||||
#ifdef SHADOWED
|
||||
shadow = pcf(vLightPosition);
|
||||
#endif //SHADOWED
|
||||
|
|
Loading…
Reference in New Issue