cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=fb2e000028eec857558844d4cde18c3dcc14f377

commit fb2e000028eec857558844d4cde18c3dcc14f377
Author: Oleksandr Shcherbina <o.shcherb...@samsung.com>
Date:   Tue May 19 12:38:27 2015 +0200

    evas: fix compatibility with GLES. Alpha test
    
    Summary:
    Add alpha test in shader code instead of function glAlphaFunc that doesn't 
supported
    in GLES2.0
    Add gag and TODO in shader function that generate shadow. Without it all 
scene is
    shadowed, because shadow effect doesn't work yet.
    
    Reviewers: cedric, Hermet
    
    Subscribers: cedric
    
    Differential Revision: https://phab.enlightenment.org/D2529
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 .../evas/engines/gl_common/evas_gl_3d_shader.c     | 13 ++++-
 .../gl_common/shader_3d/color_pick_frag.shd        |  9 +++-
 .../engines/gl_common/shader_3d/diffuse_frag.shd   |  5 ++
 .../evas/engines/gl_common/shader_3d/flat_frag.shd | 29 +++++++----
 .../evas/engines/gl_common/shader_3d/include.shd   | 58 +++++++++++++++++++++-
 .../gl_common/shader_3d/normal_map_frag.shd        | 32 +++++++-----
 .../shader_3d/parallax_occlusion_frag.shd          | 44 +++++++++-------
 .../engines/gl_common/shader_3d/phong_frag.shd     | 32 +++++++-----
 .../gl_common/shader_3d/shadow_map_frag.shd        | 13 +++--
 .../gl_common/shader_3d/vertex_color_frag.shd      |  7 +++
 10 files changed, 179 insertions(+), 63 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c 
b/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c
index 59d68a0..7c9b2fc 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_3d_shader.c
@@ -63,6 +63,8 @@ typedef enum _E3D_Uniform
    E3D_UNIFORM_FOG_FACTOR,
    E3D_UNIFORM_FOG_COLOR,
    E3D_UNIFORM_COLOR_PICK,
+   E3D_UNIFORM_ALPHATEST_COMPARISON,
+   E3D_UNIFORM_ALPHATEST_REFVALUE,
 
    E3D_UNIFORM_COUNT,
 } E3D_Uniform;
@@ -350,7 +352,9 @@ static const char *uniform_names[] =
    "uMaterialShininess",
    "uFogFactor",
    "uFogColor",
-   "uColorPick"
+   "uColorPick",
+   "uAlphaTestComparison",
+   "uAlphaTestRefValue",
 };
 
 static inline void
@@ -579,6 +583,13 @@ _uniform_upload(E3D_Uniform u, GLint loc, const 
E3D_Draw_Data *data)
       case E3D_UNIFORM_COLOR_PICK:
          glUniform1f(loc, data->color_pick_key);
          break;
+      case E3D_UNIFORM_ALPHATEST_COMPARISON:
+         glUniform1i(loc,
+                    (data->alpha_comparison ? data->alpha_comparison : 
EVAS_3D_COMPARISON_GREATER));
+         break;
+      case E3D_UNIFORM_ALPHATEST_REFVALUE:
+         glUniform1f(loc, (data->alpha_ref_value ? data->alpha_ref_value : 
0.0));
+         break;
       default:
          ERR("Invalid uniform ID.");
          break;
diff --git a/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd
index 5e0fc6c..071f60e 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd
@@ -1,7 +1,14 @@
 uniform float uColorPick;
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 void main()
 {
-   gl_FragColor = vec4(uColorPick);
+   vec4 color = vec4(uColorPick);
+
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
+   gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
 }
 
diff --git a/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd
index b08bf40..9faa357 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd
@@ -1,11 +1,16 @@
 FRAGMENT_SHADER_USE_TEX_COORD
 FRAGMENT_SHADER_USE_FOG
 FRAGMENT_SHADER_USE_DIFFUSE_TERM
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 void main() {
    vec4  color;
    FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
    gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
    FRAGMENT_SHADER_FOG_APPLY
 }
 
diff --git a/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd
index 38d9790..7814f9a 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd
@@ -7,51 +7,58 @@ FRAGMENT_SHADER_USE_DIFFUSE_TERM
 FRAGMENT_SHADER_USE_SPECULAR_TERM
 FRAGMENT_SHADER_USE_AMBIENT_TERM
 FRAGMENT_SHADER_USE_EMISSION_TERM
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
-void fragmentFlat()
+vec4 fragmentFlat()
 {
    vec4 color;
-
+   vec4 fragcolor;
 #ifdef DIFFUSE
 
    FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
-   gl_FragColor = uLightDiffuse * color * vFactor.x;
+   fragcolor = uLightDiffuse * color * vFactor.x;
 #else
-   gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+   fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 #endif //DIFFUSE
 
 #ifdef SPECULAR
 
    FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
-   gl_FragColor += uLightSpecular * color * vFactor.y;
+   fragcolor += uLightSpecular * color * vFactor.y;
 
 #endif //SPECULAR
 
 #ifdef SHADOWED
-   gl_FragColor *= shadow;
+   fragcolor *= shadow;
 #endif //SHADOWED
 
 #ifdef AMBIENT
 
    FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
-   gl_FragColor += uLightAmbient * color;
+   fragcolor += uLightAmbient * color;
 #endif //AMBIENT
 
 #ifdef  EMISSION
 
    FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
-   gl_FragColor += color;
+   fragcolor += color;
 #endif //EMISSION
-
+   return fragcolor;
 }
 
 void main() {
-
+   vec4 color;
 #ifdef SHADOWED
    shadow = pcf(vLightPosition, 1.0 / 200.0);
 #endif //SHADOWED
 
-   fragmentFlat();
+   color = fragmentFlat();
+
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
+   gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
 
    FRAGMENT_SHADER_FOG_APPLY
 }
diff --git a/src/modules/evas/engines/gl_common/shader_3d/include.shd 
b/src/modules/evas/engines/gl_common/shader_3d/include.shd
index 1d67172..706def9 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/include.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/include.shd
@@ -13,14 +13,14 @@ define(`FRAGMENT_SHADER_USE_TEXTURE', `
 #ifdef $1_TEXTURE
 uniform sampler2D  uTexture$2`0';
 uniform mat3 uTextureMatrixTransform$2`0';
-vec3 Tex0Coord$2 = 
+vec3 Tex0Coord$2 =
    vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`0';
 #endif //$1_TEXTURE
 #ifdef $1_TEXTURE_BLEND
 uniform sampler2D  uTexture$2`1';
 uniform float      uTexture$2Weight;
 uniform mat3 uTextureMatrixTransform$2`1';
-vec3 Tex1Coord$2 = 
+vec3 Tex1Coord$2 =
    vec3(vTexCoord, 1.0) * uTextureMatrixTransform$2`1';
 #endif //$1_TEXTURE_BLEND')
 
@@ -30,6 +30,12 @@ uniform float uFogFactor;
 uniform vec4  uFogColor;
 #endif //FOG_ENABLED')
 
+define(`FRAGMENT_SHADER_USE_ALPHA_TEST_GLES', `
+#ifdef GL_ES
+uniform int   uAlphaTestComparison;
+uniform float uAlphaTestRefValue;
+#endif //GL_ES')
+
 define(`FRAGMENT_SHADER_USE_SHADOWS', `
 #ifdef  SHADOWED
 varying vec4 vLightPosition;
@@ -37,6 +43,7 @@ uniform sampler2D uShadowMap;
 float shadow;
 float pcf(vec4 lpos, float size)
   {
+`#ifndef GL_ES'
      vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;
      float i, j, randx, randy, shadow;
      shadow = 0.0;
@@ -44,6 +51,10 @@ float pcf(vec4 lpos, float size)
        for (j = -4.0; j < 4.0; j++)
          shadow += float(smcoord.z <= texture2D(uShadowMap, smcoord.xy + 
vec2(i / 8.0, j / 8.0) * size).x);
      return shadow / 64.0;
+`#else'
+   /*TODO Add algorithm generate shadow*/
+   return 1.0;
+`#endif //GL_ES'
 }
 #endif //SHADOWED')
 
@@ -106,6 +117,49 @@ uniform   vec4        uLightDiffuse;
 FRAGMENT_SHADER_USE_TEXTURE(DIFFUSE, Diffuse)
 `#endif //DIFFUSE')
 
+define(`FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY',
+`#ifdef GL_ES'
+/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/
+   const float p = 1000000.0;
+   float acolor = floor($1.a * p);
+   float refvalue = floor(uAlphaTestRefValue * p);
+   if (uAlphaTestComparison == 0) discard;
+   else if (uAlphaTestComparison == 1)
+     {
+        if (acolor < refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 2)
+     {
+        if (acolor == refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 3)
+     {
+        if (acolor <= refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 4)
+     {
+        if (acolor > refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 5)
+     {
+        if (acolor != refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 6)
+     {
+        if (acolor >= refvalue) gl_FragColor = $1;
+        else discard;
+     }
+   else if (uAlphaTestComparison == 7) ;
+`#else'
+   gl_FragColor = $1;
+`#endif //GL_ES')
+
+
 define(`VERTEX_SHADER_NEED_TEX_COORD',
 `#ifdef NEED_TEX_COORD'
 varying vec2 vTexCoord;
diff --git a/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd
index 533518b..06d4948 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd
@@ -6,6 +6,7 @@ FRAGMENT_SHADER_USE_TEX_COORD
 FRAGMENT_SHADER_USE_FOG
 FRAGMENT_SHADER_USE_SHADOWS
 FRAGMENT_SHADER_USE_TEXTURE(NORMAL, Normal)
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 #ifndef VERTEX_TANGENT
 varying  vec3        vNormal;
@@ -40,12 +41,12 @@ vec3 perturb_normal(vec3 normal)
 }
 #endif //VERTEX_TANGENT
 
-void fragmentNormalMap()
+vec4 fragmentNormalMap()
 {
    float factor;
    vec3  normal;
    vec4  color;
-
+   vec4 fragcolor;
 #ifdef NORMAL_TEXTURE_BLEND
    normal = texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).rgb * 
uTextureNormalWeight / texture2D(uTextureNormal0, vec2(Tex0CoordNormal)).a;
    normal += texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).rgb / 
texture2D(uTextureNormal1, vec2(Tex1CoordNormal)).a *
@@ -80,10 +81,10 @@ void fragmentNormalMap()
 #ifdef DIFFUSE
 
         FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
-        gl_FragColor = uLightDiffuse * color * factor;
+        fragcolor = uLightDiffuse * color * factor;
 
 #else
-        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 #endif //DIFFUSE
 
 #ifdef SPECULAR
@@ -93,44 +94,49 @@ void fragmentNormalMap()
           {
              factor = pow(factor, uMaterialShininess);
              FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
-             gl_FragColor += uLightSpecular * color * factor;
+             fragcolor += uLightSpecular * color * factor;
           }
 
 #endif //SPECULAR
 
 #ifdef SHADOWED
-        gl_FragColor *= shadow;
+        fragcolor *= shadow;
 #endif //SHADOWED
 
      }
    else
-     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 
 #ifdef AMBIENT
      FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
-     gl_FragColor += uLightAmbient * color;
+     fragcolor += uLightAmbient * color;
 #endif //AMBIENT
 
 #ifdef LIGHT_ATTENUATION
-   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
+   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
 #endif //LIGHT_ATTENUATION
 
 #ifdef EMISSION
 
    FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
-   gl_FragColor += color;
+   fragcolor += color;
 
 #endif //EMISSION
-
+   return fragcolor;
 }
 
 void main() {
-
+   vec4 color;
 #ifdef SHADOWED
    shadow = pcf(vLightPosition, 1.0 / 200.0);
 #endif //SHADOWED
 
-   fragmentNormalMap();
+   color = fragmentNormalMap();
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
+   gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
 
 FRAGMENT_SHADER_FOG_APPLY
 
diff --git 
a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd
index 6faab21..be550ac 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/parallax_occlusion_frag.shd
@@ -2,30 +2,30 @@ varying  vec3        vLightVector;
 varying  vec3        vLightHalfVector;
 varying  vec3        vEyeVector;
 uniform  sampler2D   uTextureNormal0;
-uniform  mat3 uTextureMatrixTransformNormal0;
+uniform  mat3        uTextureMatrixTransformNormal0;
 
 #ifdef NEED_TEX_COORD
 varying vec2   vTexCoord;
-vec3 Tex0CoordNormal = 
+vec3 Tex0CoordNormal =
    vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;
 #endif //TEX_COORD
 
-FRAGMENT_SHADER_USE_FOG
-FRAGMENT_SHADER_USE_SHADOWS
-
 #ifdef NORMAL_TEXTURE_BLEND
 uniform  sampler2D  uTextureNormal1;
 uniform  float      uTextureNormalWeight;
 uniform mat3 uTextureMatrixTransformNormal1;
-vec3 Tex1CoordNormal = 
+vec3 Tex1CoordNormal =
    vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;
 #endif //NORMAL_TEXTURE_BLEND
 
+FRAGMENT_SHADER_USE_FOG
+FRAGMENT_SHADER_USE_SHADOWS
 FRAGMENT_SHADER_USE_DIFFUSE_TERM
 FRAGMENT_SHADER_USE_SPECULAR_TERM
 FRAGMENT_SHADER_USE_AMBIENT_TERM
 FRAGMENT_SHADER_USE_EMISSION_TERM
 FRAGMENT_SHADER_USE_LIGHT
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 const float parallaxScale = 0.2;
 
@@ -82,12 +82,12 @@ vec2 parallaxMapping(in vec3 view, in vec2 tex, out float 
parallaxHeight)
    return finalTexCoords;
 }
 
-void fragmentParallaxMap()
+vec4 fragmentParallaxMap()
 {
    float factor;
    vec3  normal;
    vec4  color;
-
+   vec4 fragcolor;
    float parallaxHeight;
    vec2 tex = parallaxMapping(vEyeVector, vec2(Tex0CoordNormal), 
parallaxHeight);
 
@@ -134,10 +134,10 @@ void fragmentParallaxMap()
 
 #endif //DIFFUSE_TEXTURE_BLEND
 
-        gl_FragColor = uLightDiffuse * color * factor;
+        fragcolor = uLightDiffuse * color * factor;
 
 #else
-        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 #endif //DIFFUSE
 
 #ifdef SPECULAR
@@ -159,18 +159,18 @@ void fragmentParallaxMap()
 
 #endif //SPECULAR_TEXTURE_BLEND
 
-             gl_FragColor += uLightSpecular * color * factor;
+             fragcolor += uLightSpecular * color * factor;
           }
 
 #endif //SPECULAR
 
 #ifdef SHADOWED
-        gl_FragColor *= shadow;
+        fragcolor *= shadow;
 #endif //SHADOWED
 
      }
    else
-     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 
 #ifdef AMBIENT
 #ifdef AMBIENT_TEXTURE_BLEND
@@ -186,11 +186,11 @@ void fragmentParallaxMap()
 
 #endif //AMBIENT_TEXTURE_BLEND
 
-   gl_FragColor += uLightAmbient * color;
+   fragcolor += uLightAmbient * color;
 #endif //AMBIENT
 
 #ifdef LIGHT_ATTENUATION
-   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
+   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
 #endif //LIGHT_ATTENUATION
 
 #ifdef EMISSION
@@ -208,18 +208,24 @@ void fragmentParallaxMap()
 
 #endif //EMISSION_TEXTURE_BLEND
 
-   gl_FragColor += color;
+   fragcolor += color;
 #endif //EMISSION
-
+   return fragcolor;
 }
 
 void main() {
-
+   vec4 color;
 #ifdef SHADOWED
    shadow = pcf(vLightPosition, 1.0 / 200.0);
 #endif //SHADOWED
 
-   fragmentParallaxMap();
+   color = fragmentParallaxMap();
+
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
+   gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
 
    FRAGMENT_SHADER_FOG_APPLY
 
diff --git a/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd
index d77f3c7..ef914e9 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd
@@ -10,13 +10,15 @@ FRAGMENT_SHADER_USE_SPECULAR_TERM
 FRAGMENT_SHADER_USE_AMBIENT_TERM
 FRAGMENT_SHADER_USE_EMISSION_TERM
 FRAGMENT_SHADER_USE_LIGHT
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
-void fragmentPhong()
+vec4 fragmentPhong()
 {
    vec3  normal = normalize(vNormal);
    vec3  lv = normalize(vLightVector);
    float factor = dot(lv, normal);
    vec4  color;
+   vec4 fragcolor;
 
 #ifdef  LIGHT_SPOT
    float f = dot(-lv, normalize(uLightSpotDir));
@@ -35,9 +37,9 @@ void fragmentPhong()
 
         FRAGMENT_SHADER_TEXTURE_BLEND(DIFFUSE, Diffuse)
 
-        gl_FragColor = uLightDiffuse * color * factor;
+        fragcolor = uLightDiffuse * color * factor;
 #else
-        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 #endif //DIFFUSE
 
    /* Specular term. */
@@ -49,46 +51,52 @@ void fragmentPhong()
 
              FRAGMENT_SHADER_TEXTURE_BLEND(SPECULAR, Specular)
 
-             gl_FragColor += uLightSpecular * color * factor;
+             fragcolor += uLightSpecular * color * factor;
           }
 #endif
 
      }
    else
-     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);
+     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);
 
 #ifdef  SHADOWED
-   gl_FragColor *= shadow;
+   fragcolor *= shadow;
 #endif //SHADOWED
 
 #ifdef AMBIENT
    FRAGMENT_SHADER_TEXTURE_BLEND(AMBIENT, Ambient)
 
-   gl_FragColor += uLightAmbient * color;
+   fragcolor += uLightAmbient * color;
 #endif
 
    /* Light attenuation. */
 #ifdef  LIGHT_ATTENUATION
-   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
+   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));
 #endif
 
    /* Emission term. */
 #ifdef  EMISSION
 
    FRAGMENT_SHADER_TEXTURE_BLEND(EMISSION, Emission)
-   gl_FragColor += color;
+   fragcolor += color;
 #endif
-
+   return fragcolor;
 }
 
 void main()
 {
-
+   vec4 color;
 #ifdef SHADOWED
    shadow = pcf(vLightPosition, 1.0 / 300.0);
 #endif //SHADOWED
 
-   fragmentPhong();
+   color = fragmentPhong();
+
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
+#else
+   gl_FragColor = color;
+#endif //ALPHA_TEST_ENABLED
 
    FRAGMENT_SHADER_FOG_APPLY
 }
diff --git a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd
index 23c339e..cfdd298 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd
@@ -1,5 +1,6 @@
 #ifdef ALPHA_TEST_ENABLED
 FRAGMENT_SHADER_USE_TEX_COORD
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 #ifdef DIFFUSE
 
@@ -23,26 +24,30 @@ vec3 Tex1CoordDiffuse =
 #endif //ALPHA_TEST_ENABLED
 
 void main() {
+
+   vec4 color;
 #ifndef NEED_TEX_COORD
    gl_FragColor = vec4(1);
 #endif
+
 #ifdef ALPHA_TEST_ENABLED
 
 #ifdef DIFFUSE_TEXTURE_BLEND
-   gl_FragColor = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *
+   color = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *
    uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vec2(Tex1CoordDiffuse)) 
*
    (1.0 - uTextureDiffuseWeight));
 #else
 
 #ifdef DIFFUSE_TEXTURE
-   gl_FragColor = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) ;
+   color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) ;
 #else
-   gl_FragColor = vec4(1);
+   color = vec4(1);
 #endif //DIFFUSE_TEXTURE
 
 #endif //DIFFUSE_TEXTURE_BLEND
 
-#endif //ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(color)
 
+#endif //ALPHA_TEST_ENABLED
    gl_FragColor.r = gl_FragCoord.z;
 }
diff --git a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd 
b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd
index 24fb237..1b85057 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd
+++ b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd
@@ -1,10 +1,17 @@
 varying  vec4        vColor;
 
 FRAGMENT_SHADER_USE_FOG
+FRAGMENT_SHADER_USE_ALPHA_TEST_GLES
 
 void main()
 {
+
+#ifdef ALPHA_TEST_ENABLED
+   FRAGMENT_SHADER_ALPHA_TEST_GLES_APPLY(vColor)
+#else
    gl_FragColor = vColor;
+#endif //ALPHA_TEST_ENABLED
+
    FRAGMENT_SHADER_FOG_APPLY
 }
 

-- 


Reply via email to