raster pushed a commit to branch master.

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

commit ce7a6e710643069c895aed1d2dd9a1417389a742
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu May 21 17:03:24 2015 +0900

    update shaders
---
 .../gl_common/shader_3d/evas_gl_3d_shaders.x       | 585 ++++++++++++++++++---
 1 file changed, 498 insertions(+), 87 deletions(-)

diff --git a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x 
b/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x
index 7685aa8..4185c44 100644
--- a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x
+++ b/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x
@@ -54,9 +54,56 @@ static const char vertex_color_frag_glsl[] =
    "uniform float uFogFactor;\n"
    "uniform vec4  uFogColor;\n"
    "#endif //FOG_ENABLED\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "void main()\n"
    "{\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(vColor.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = vColor;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
    "   gl_FragColor = vColor;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = vColor;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "   \n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"
@@ -129,17 +176,21 @@ static const char diffuse_frag_glsl[] =
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
-   "vec3 Tex0CoordDiffuse = \n"
+   "vec3 Tex0CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureDiffuse1;\n"
    "uniform float      uTextureDiffuseWeight;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
-   "vec3 Tex1CoordDiffuse = \n"
+   "vec3 Tex1CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
    "#endif //DIFFUSE\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "void main() {\n"
    "   vec4  color;\n"
    "   \n"
@@ -154,7 +205,50 @@ static const char diffuse_frag_glsl[] =
    "   color = uMaterialDiffuse;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
    "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "   \n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"
@@ -309,6 +403,7 @@ static const char flat_frag_glsl[] =
    "float shadow;\n"
    "float pcf(vec4 lpos, float size)\n"
    "  {\n"
+   "#ifndef GL_ES\n"
    "     vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
    "     float i, j, randx, randy, shadow;\n"
    "     shadow = 0.0;\n"
@@ -316,6 +411,10 @@ static const char flat_frag_glsl[] =
    "       for (j = -4.0; j < 4.0; j++)\n"
    "         shadow += float(smcoord.z <= texture2D(uShadowMap, smcoord.xy + 
vec2(i / 8.0, j / 8.0) * size).x);\n"
    "     return shadow / 64.0;\n"
+   "#else\n"
+   "   /*TODO Add algorithm generate shadow*/\n"
+   "   return 1.0;\n"
+   "#endif //GL_ES\n"
    "}\n"
    "#endif //SHADOWED\n"
    "#ifdef DIFFUSE\n"
@@ -324,14 +423,14 @@ static const char flat_frag_glsl[] =
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
-   "vec3 Tex0CoordDiffuse = \n"
+   "vec3 Tex0CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureDiffuse1;\n"
    "uniform float      uTextureDiffuseWeight;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
-   "vec3 Tex1CoordDiffuse = \n"
+   "vec3 Tex1CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
    "#endif //DIFFUSE\n"
@@ -342,14 +441,14 @@ static const char flat_frag_glsl[] =
    "#ifdef SPECULAR_TEXTURE\n"
    "uniform sampler2D  uTextureSpecular0;\n"
    "uniform mat3 uTextureMatrixTransformSpecular0;\n"
-   "vec3 Tex0CoordSpecular = \n"
+   "vec3 Tex0CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#ifdef SPECULAR_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureSpecular1;\n"
    "uniform float      uTextureSpecularWeight;\n"
    "uniform mat3 uTextureMatrixTransformSpecular1;\n"
-   "vec3 Tex1CoordSpecular = \n"
+   "vec3 Tex1CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
    "#endif //SPECULAR\n"
@@ -359,14 +458,14 @@ static const char flat_frag_glsl[] =
    "#ifdef AMBIENT_TEXTURE\n"
    "uniform sampler2D  uTextureAmbient0;\n"
    "uniform mat3 uTextureMatrixTransformAmbient0;\n"
-   "vec3 Tex0CoordAmbient = \n"
+   "vec3 Tex0CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#ifdef AMBIENT_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureAmbient1;\n"
    "uniform float      uTextureAmbientWeight;\n"
    "uniform mat3 uTextureMatrixTransformAmbient1;\n"
-   "vec3 Tex1CoordAmbient = \n"
+   "vec3 Tex1CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
    "#endif //AMBIENT\n"
@@ -375,20 +474,25 @@ static const char flat_frag_glsl[] =
    "#ifdef EMISSION_TEXTURE\n"
    "uniform sampler2D  uTextureEmission0;\n"
    "uniform mat3 uTextureMatrixTransformEmission0;\n"
-   "vec3 Tex0CoordEmission = \n"
+   "vec3 Tex0CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#ifdef EMISSION_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureEmission1;\n"
    "uniform float      uTextureEmissionWeight;\n"
    "uniform mat3 uTextureMatrixTransformEmission1;\n"
-   "vec3 Tex1CoordEmission = \n"
+   "vec3 Tex1CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
    "#endif //EMISSION\n"
-   "void fragmentFlat()\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
+   "vec4 fragmentFlat()\n"
    "{\n"
    "   vec4 color;\n"
+   "   vec4 fragcolor;\n"
    "#ifdef DIFFUSE\n"
    "   \n"
    "#ifdef  DIFFUSE_TEXTURE_BLEND\n"
@@ -402,9 +506,9 @@ static const char flat_frag_glsl[] =
    "   color = uMaterialDiffuse;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
-   "   gl_FragColor = uLightDiffuse * color * vFactor.x;\n"
+   "   fragcolor = uLightDiffuse * color * vFactor.x;\n"
    "#else\n"
-   "   gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "   fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#endif //DIFFUSE\n"
    "#ifdef SPECULAR\n"
    "   \n"
@@ -419,10 +523,10 @@ static const char flat_frag_glsl[] =
    "   color = uMaterialSpecular;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
-   "   gl_FragColor += uLightSpecular * color * vFactor.y;\n"
+   "   fragcolor += uLightSpecular * color * vFactor.y;\n"
    "#endif //SPECULAR\n"
    "#ifdef SHADOWED\n"
-   "   gl_FragColor *= shadow;\n"
+   "   fragcolor *= shadow;\n"
    "#endif //SHADOWED\n"
    "#ifdef AMBIENT\n"
    "   \n"
@@ -437,7 +541,7 @@ static const char flat_frag_glsl[] =
    "   color = uMaterialAmbient;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
-   "   gl_FragColor += uLightAmbient * color;\n"
+   "   fragcolor += uLightAmbient * color;\n"
    "#endif //AMBIENT\n"
    "#ifdef  EMISSION\n"
    "   \n"
@@ -452,14 +556,60 @@ static const char flat_frag_glsl[] =
    "   color = uMaterialEmission;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
-   "   gl_FragColor += color;\n"
+   "   fragcolor += color;\n"
    "#endif //EMISSION\n"
+   "   return fragcolor;\n"
    "}\n"
    "void main() {\n"
+   "   vec4 color;\n"
    "#ifdef SHADOWED\n"
    "   shadow = pcf(vLightPosition, 1.0 / 200.0);\n"
    "#endif //SHADOWED\n"
-   "   fragmentFlat();\n"
+   "   color = fragmentFlat();\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "   \n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"
@@ -584,6 +734,7 @@ static const char phong_frag_glsl[] =
    "float shadow;\n"
    "float pcf(vec4 lpos, float size)\n"
    "  {\n"
+   "#ifndef GL_ES\n"
    "     vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
    "     float i, j, randx, randy, shadow;\n"
    "     shadow = 0.0;\n"
@@ -591,6 +742,10 @@ static const char phong_frag_glsl[] =
    "       for (j = -4.0; j < 4.0; j++)\n"
    "         shadow += float(smcoord.z <= texture2D(uShadowMap, smcoord.xy + 
vec2(i / 8.0, j / 8.0) * size).x);\n"
    "     return shadow / 64.0;\n"
+   "#else\n"
+   "   /*TODO Add algorithm generate shadow*/\n"
+   "   return 1.0;\n"
+   "#endif //GL_ES\n"
    "}\n"
    "#endif //SHADOWED\n"
    "#ifdef DIFFUSE\n"
@@ -599,14 +754,14 @@ static const char phong_frag_glsl[] =
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
-   "vec3 Tex0CoordDiffuse = \n"
+   "vec3 Tex0CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureDiffuse1;\n"
    "uniform float      uTextureDiffuseWeight;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
-   "vec3 Tex1CoordDiffuse = \n"
+   "vec3 Tex1CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
    "#endif //DIFFUSE\n"
@@ -617,14 +772,14 @@ static const char phong_frag_glsl[] =
    "#ifdef SPECULAR_TEXTURE\n"
    "uniform sampler2D  uTextureSpecular0;\n"
    "uniform mat3 uTextureMatrixTransformSpecular0;\n"
-   "vec3 Tex0CoordSpecular = \n"
+   "vec3 Tex0CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#ifdef SPECULAR_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureSpecular1;\n"
    "uniform float      uTextureSpecularWeight;\n"
    "uniform mat3 uTextureMatrixTransformSpecular1;\n"
-   "vec3 Tex1CoordSpecular = \n"
+   "vec3 Tex1CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
    "#endif //SPECULAR\n"
@@ -634,14 +789,14 @@ static const char phong_frag_glsl[] =
    "#ifdef AMBIENT_TEXTURE\n"
    "uniform sampler2D  uTextureAmbient0;\n"
    "uniform mat3 uTextureMatrixTransformAmbient0;\n"
-   "vec3 Tex0CoordAmbient = \n"
+   "vec3 Tex0CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#ifdef AMBIENT_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureAmbient1;\n"
    "uniform float      uTextureAmbientWeight;\n"
    "uniform mat3 uTextureMatrixTransformAmbient1;\n"
-   "vec3 Tex1CoordAmbient = \n"
+   "vec3 Tex1CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
    "#endif //AMBIENT\n"
@@ -650,14 +805,14 @@ static const char phong_frag_glsl[] =
    "#ifdef EMISSION_TEXTURE\n"
    "uniform sampler2D  uTextureEmission0;\n"
    "uniform mat3 uTextureMatrixTransformEmission0;\n"
-   "vec3 Tex0CoordEmission = \n"
+   "vec3 Tex0CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#ifdef EMISSION_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureEmission1;\n"
    "uniform float      uTextureEmissionWeight;\n"
    "uniform mat3 uTextureMatrixTransformEmission1;\n"
-   "vec3 Tex1CoordEmission = \n"
+   "vec3 Tex1CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
    "#endif //EMISSION\n"
@@ -669,12 +824,17 @@ static const char phong_frag_glsl[] =
    "#ifdef LIGHT_ATTENUATION\n"
    "varying   float    vLightDist;\n"
    "#endif //LIGHT_ATTENUATION\n"
-   "void fragmentPhong()\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
+   "vec4 fragmentPhong()\n"
    "{\n"
    "   vec3  normal = normalize(vNormal);\n"
    "   vec3  lv = normalize(vLightVector);\n"
    "   float factor = dot(lv, normal);\n"
    "   vec4  color;\n"
+   "   vec4 fragcolor;\n"
    "#ifdef  LIGHT_SPOT\n"
    "   float f = dot(-lv, normalize(uLightSpotDir));\n"
    "   if (f > uLightSpotCutoffCos)\n"
@@ -698,9 +858,9 @@ static const char phong_frag_glsl[] =
    "   color = uMaterialDiffuse;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
-   "        gl_FragColor = uLightDiffuse * color * factor;\n"
+   "        fragcolor = uLightDiffuse * color * factor;\n"
    "#else\n"
-   "        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#endif //DIFFUSE\n"
    "   /* Specular term. */\n"
    "#ifdef SPECULAR\n"
@@ -720,14 +880,14 @@ static const char phong_frag_glsl[] =
    "   color = uMaterialSpecular;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
-   "             gl_FragColor += uLightSpecular * color * factor;\n"
+   "             fragcolor += uLightSpecular * color * factor;\n"
    "          }\n"
    "#endif\n"
    "     }\n"
    "   else\n"
-   "     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#ifdef  SHADOWED\n"
-   "   gl_FragColor *= shadow;\n"
+   "   fragcolor *= shadow;\n"
    "#endif //SHADOWED\n"
    "#ifdef AMBIENT\n"
    "   \n"
@@ -742,11 +902,11 @@ static const char phong_frag_glsl[] =
    "   color = uMaterialAmbient;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
-   "   gl_FragColor += uLightAmbient * color;\n"
+   "   fragcolor += uLightAmbient * color;\n"
    "#endif\n"
    "   /* Light attenuation. */\n"
    "#ifdef  LIGHT_ATTENUATION\n"
-   "   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
+   "   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
    "#endif\n"
    "   /* Emission term. */\n"
    "#ifdef  EMISSION\n"
@@ -762,15 +922,61 @@ static const char phong_frag_glsl[] =
    "   color = uMaterialEmission;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
-   "   gl_FragColor += color;\n"
+   "   fragcolor += color;\n"
    "#endif\n"
+   "   return fragcolor;\n"
    "}\n"
    "void main()\n"
    "{\n"
+   "   vec4 color;\n"
    "#ifdef SHADOWED\n"
    "   shadow = pcf(vLightPosition, 1.0 / 300.0);\n"
    "#endif //SHADOWED\n"
-   "   fragmentPhong();\n"
+   "   color = fragmentPhong();\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "   \n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"
@@ -952,6 +1158,7 @@ static const char normal_map_frag_glsl[] =
    "float shadow;\n"
    "float pcf(vec4 lpos, float size)\n"
    "  {\n"
+   "#ifndef GL_ES\n"
    "     vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
    "     float i, j, randx, randy, shadow;\n"
    "     shadow = 0.0;\n"
@@ -959,21 +1166,29 @@ static const char normal_map_frag_glsl[] =
    "       for (j = -4.0; j < 4.0; j++)\n"
    "         shadow += float(smcoord.z <= texture2D(uShadowMap, smcoord.xy + 
vec2(i / 8.0, j / 8.0) * size).x);\n"
    "     return shadow / 64.0;\n"
+   "#else\n"
+   "   /*TODO Add algorithm generate shadow*/\n"
+   "   return 1.0;\n"
+   "#endif //GL_ES\n"
    "}\n"
    "#endif //SHADOWED\n"
    "#ifdef NORMAL_TEXTURE\n"
    "uniform sampler2D  uTextureNormal0;\n"
    "uniform mat3 uTextureMatrixTransformNormal0;\n"
-   "vec3 Tex0CoordNormal = \n"
+   "vec3 Tex0CoordNormal =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\n"
    "#endif //NORMAL_TEXTURE\n"
    "#ifdef NORMAL_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureNormal1;\n"
    "uniform float      uTextureNormalWeight;\n"
    "uniform mat3 uTextureMatrixTransformNormal1;\n"
-   "vec3 Tex1CoordNormal = \n"
+   "vec3 Tex1CoordNormal =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal1;\n"
    "#endif //NORMAL_TEXTURE_BLEND\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "#ifndef VERTEX_TANGENT\n"
    "varying  vec3        vNormal;\n"
    "#endif //VERTEX_TANGENT\n"
@@ -983,14 +1198,14 @@ static const char normal_map_frag_glsl[] =
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
-   "vec3 Tex0CoordDiffuse = \n"
+   "vec3 Tex0CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureDiffuse1;\n"
    "uniform float      uTextureDiffuseWeight;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
-   "vec3 Tex1CoordDiffuse = \n"
+   "vec3 Tex1CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
    "#endif //DIFFUSE\n"
@@ -1001,14 +1216,14 @@ static const char normal_map_frag_glsl[] =
    "#ifdef SPECULAR_TEXTURE\n"
    "uniform sampler2D  uTextureSpecular0;\n"
    "uniform mat3 uTextureMatrixTransformSpecular0;\n"
-   "vec3 Tex0CoordSpecular = \n"
+   "vec3 Tex0CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#ifdef SPECULAR_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureSpecular1;\n"
    "uniform float      uTextureSpecularWeight;\n"
    "uniform mat3 uTextureMatrixTransformSpecular1;\n"
-   "vec3 Tex1CoordSpecular = \n"
+   "vec3 Tex1CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
    "#endif //SPECULAR\n"
@@ -1018,14 +1233,14 @@ static const char normal_map_frag_glsl[] =
    "#ifdef AMBIENT_TEXTURE\n"
    "uniform sampler2D  uTextureAmbient0;\n"
    "uniform mat3 uTextureMatrixTransformAmbient0;\n"
-   "vec3 Tex0CoordAmbient = \n"
+   "vec3 Tex0CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#ifdef AMBIENT_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureAmbient1;\n"
    "uniform float      uTextureAmbientWeight;\n"
    "uniform mat3 uTextureMatrixTransformAmbient1;\n"
-   "vec3 Tex1CoordAmbient = \n"
+   "vec3 Tex1CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
    "#endif //AMBIENT\n"
@@ -1034,14 +1249,14 @@ static const char normal_map_frag_glsl[] =
    "#ifdef EMISSION_TEXTURE\n"
    "uniform sampler2D  uTextureEmission0;\n"
    "uniform mat3 uTextureMatrixTransformEmission0;\n"
-   "vec3 Tex0CoordEmission = \n"
+   "vec3 Tex0CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#ifdef EMISSION_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureEmission1;\n"
    "uniform float      uTextureEmissionWeight;\n"
    "uniform mat3 uTextureMatrixTransformEmission1;\n"
-   "vec3 Tex1CoordEmission = \n"
+   "vec3 Tex1CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
    "#endif //EMISSION\n"
@@ -1073,11 +1288,12 @@ static const char normal_map_frag_glsl[] =
    "   return normalize(tbn * normal);\n"
    "}\n"
    "#endif //VERTEX_TANGENT\n"
-   "void fragmentNormalMap()\n"
+   "vec4 fragmentNormalMap()\n"
    "{\n"
    "   float factor;\n"
    "   vec3  normal;\n"
    "   vec4  color;\n"
+   "   vec4 fragcolor;\n"
    "#ifdef NORMAL_TEXTURE_BLEND\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"
@@ -1114,9 +1330,9 @@ static const char normal_map_frag_glsl[] =
    "   color = uMaterialDiffuse;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
-   "        gl_FragColor = uLightDiffuse * color * factor;\n"
+   "        fragcolor = uLightDiffuse * color * factor;\n"
    "#else\n"
-   "        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#endif //DIFFUSE\n"
    "#ifdef SPECULAR\n"
    "        factor = dot(normalize(vLightHalfVector), normal);\n"
@@ -1135,15 +1351,15 @@ static const char normal_map_frag_glsl[] =
    "   color = uMaterialSpecular;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
-   "             gl_FragColor += uLightSpecular * color * factor;\n"
+   "             fragcolor += uLightSpecular * color * factor;\n"
    "          }\n"
    "#endif //SPECULAR\n"
    "#ifdef SHADOWED\n"
-   "        gl_FragColor *= shadow;\n"
+   "        fragcolor *= shadow;\n"
    "#endif //SHADOWED\n"
    "     }\n"
    "   else\n"
-   "     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#ifdef AMBIENT\n"
    "     \n"
    "#ifdef  AMBIENT_TEXTURE_BLEND\n"
@@ -1157,10 +1373,10 @@ static const char normal_map_frag_glsl[] =
    "   color = uMaterialAmbient;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
-   "     gl_FragColor += uLightAmbient * color;\n"
+   "     fragcolor += uLightAmbient * color;\n"
    "#endif //AMBIENT\n"
    "#ifdef LIGHT_ATTENUATION\n"
-   "   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
+   "   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
    "#endif //LIGHT_ATTENUATION\n"
    "#ifdef EMISSION\n"
    "   \n"
@@ -1175,14 +1391,60 @@ static const char normal_map_frag_glsl[] =
    "   color = uMaterialEmission;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
-   "   gl_FragColor += color;\n"
+   "   fragcolor += color;\n"
    "#endif //EMISSION\n"
+   "   return fragcolor;\n"
    "}\n"
    "void main() {\n"
+   "   vec4 color;\n"
    "#ifdef SHADOWED\n"
    "   shadow = pcf(vLightPosition, 1.0 / 200.0);\n"
    "#endif //SHADOWED\n"
-   "   fragmentNormalMap();\n"
+   "   color = fragmentNormalMap();\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"
    "   float fogFactor = exp2(-uFogFactor * uFogFactor * z * z * 1.44);\n"
@@ -1249,6 +1511,10 @@ static const char shadow_map_frag_glsl[] =
    "#ifdef NEED_TEX_COORD\n"
    "varying vec2   vTexCoord;\n"
    "#endif //TEX_COORD\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "#ifdef DIFFUSE\n"
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
@@ -1266,21 +1532,62 @@ static const char shadow_map_frag_glsl[] =
    "#endif //DIFFUSE\n"
    "#endif //ALPHA_TEST_ENABLED\n"
    "void main() {\n"
+   "   vec4 color;\n"
    "#ifndef NEED_TEX_COORD\n"
    "   gl_FragColor = vec4(1);\n"
    "#endif\n"
    "#ifdef ALPHA_TEST_ENABLED\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
-   "   gl_FragColor = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *\n"
+   "   color = (texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) *\n"
    "   uTextureDiffuseWeight + texture2D(uTextureDiffuse1, 
vec2(Tex1CoordDiffuse)) *\n"
    "   (1.0 - uTextureDiffuseWeight));\n"
    "#else\n"
    "#ifdef DIFFUSE_TEXTURE\n"
-   "   gl_FragColor = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) ;\n"
+   "   color = texture2D(uTextureDiffuse0, vec2(Tex0CoordDiffuse)) ;\n"
    "#else\n"
-   "   gl_FragColor = vec4(1);\n"
+   "   color = vec4(1);\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
    "#endif //ALPHA_TEST_ENABLED\n"
    "   gl_FragColor.r = gl_FragCoord.z;\n"
    "}\n";
@@ -1319,9 +1626,57 @@ static const char color_pick_frag_glsl[] =
    "precision lowp sampler2D;\n"
    "#endif\n"
    "uniform float uColorPick;\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "void main()\n"
    "{\n"
-   "   gl_FragColor = vec4(uColorPick);\n"
+   "   vec4 color = vec4(uColorPick);\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "}\n";
 
 static const char parallax_occlusion_vert_glsl[] =
@@ -1454,12 +1809,19 @@ static const char parallax_occlusion_frag_glsl[] =
    "varying  vec3        vLightHalfVector;\n"
    "varying  vec3        vEyeVector;\n"
    "uniform  sampler2D   uTextureNormal0;\n"
-   "uniform  mat3 uTextureMatrixTransformNormal0;\n"
+   "uniform  mat3        uTextureMatrixTransformNormal0;\n"
    "#ifdef NEED_TEX_COORD\n"
    "varying vec2   vTexCoord;\n"
-   "vec3 Tex0CoordNormal = \n"
+   "vec3 Tex0CoordNormal =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformNormal0;\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"
+   "#endif //NORMAL_TEXTURE_BLEND\n"
    "#ifdef FOG_ENABLED\n"
    "uniform float uFogFactor;\n"
    "uniform vec4  uFogColor;\n"
@@ -1470,6 +1832,7 @@ static const char parallax_occlusion_frag_glsl[] =
    "float shadow;\n"
    "float pcf(vec4 lpos, float size)\n"
    "  {\n"
+   "#ifndef GL_ES\n"
    "     vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;\n"
    "     float i, j, randx, randy, shadow;\n"
    "     shadow = 0.0;\n"
@@ -1477,29 +1840,26 @@ static const char parallax_occlusion_frag_glsl[] =
    "       for (j = -4.0; j < 4.0; j++)\n"
    "         shadow += float(smcoord.z <= texture2D(uShadowMap, smcoord.xy + 
vec2(i / 8.0, j / 8.0) * size).x);\n"
    "     return shadow / 64.0;\n"
+   "#else\n"
+   "   /*TODO Add algorithm generate shadow*/\n"
+   "   return 1.0;\n"
+   "#endif //GL_ES\n"
    "}\n"
    "#endif //SHADOWED\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"
-   "#endif //NORMAL_TEXTURE_BLEND\n"
    "#ifdef DIFFUSE\n"
    "uniform   vec4        uMaterialDiffuse;\n"
    "uniform   vec4        uLightDiffuse;\n"
    "#ifdef DIFFUSE_TEXTURE\n"
    "uniform sampler2D  uTextureDiffuse0;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse0;\n"
-   "vec3 Tex0CoordDiffuse = \n"
+   "vec3 Tex0CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse0;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#ifdef DIFFUSE_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureDiffuse1;\n"
    "uniform float      uTextureDiffuseWeight;\n"
    "uniform mat3 uTextureMatrixTransformDiffuse1;\n"
-   "vec3 Tex1CoordDiffuse = \n"
+   "vec3 Tex1CoordDiffuse =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformDiffuse1;\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
    "#endif //DIFFUSE\n"
@@ -1510,14 +1870,14 @@ static const char parallax_occlusion_frag_glsl[] =
    "#ifdef SPECULAR_TEXTURE\n"
    "uniform sampler2D  uTextureSpecular0;\n"
    "uniform mat3 uTextureMatrixTransformSpecular0;\n"
-   "vec3 Tex0CoordSpecular = \n"
+   "vec3 Tex0CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular0;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#ifdef SPECULAR_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureSpecular1;\n"
    "uniform float      uTextureSpecularWeight;\n"
    "uniform mat3 uTextureMatrixTransformSpecular1;\n"
-   "vec3 Tex1CoordSpecular = \n"
+   "vec3 Tex1CoordSpecular =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformSpecular1;\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
    "#endif //SPECULAR\n"
@@ -1527,14 +1887,14 @@ static const char parallax_occlusion_frag_glsl[] =
    "#ifdef AMBIENT_TEXTURE\n"
    "uniform sampler2D  uTextureAmbient0;\n"
    "uniform mat3 uTextureMatrixTransformAmbient0;\n"
-   "vec3 Tex0CoordAmbient = \n"
+   "vec3 Tex0CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient0;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#ifdef AMBIENT_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureAmbient1;\n"
    "uniform float      uTextureAmbientWeight;\n"
    "uniform mat3 uTextureMatrixTransformAmbient1;\n"
-   "vec3 Tex1CoordAmbient = \n"
+   "vec3 Tex1CoordAmbient =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformAmbient1;\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
    "#endif //AMBIENT\n"
@@ -1543,14 +1903,14 @@ static const char parallax_occlusion_frag_glsl[] =
    "#ifdef EMISSION_TEXTURE\n"
    "uniform sampler2D  uTextureEmission0;\n"
    "uniform mat3 uTextureMatrixTransformEmission0;\n"
-   "vec3 Tex0CoordEmission = \n"
+   "vec3 Tex0CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission0;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#ifdef EMISSION_TEXTURE_BLEND\n"
    "uniform sampler2D  uTextureEmission1;\n"
    "uniform float      uTextureEmissionWeight;\n"
    "uniform mat3 uTextureMatrixTransformEmission1;\n"
-   "vec3 Tex1CoordEmission = \n"
+   "vec3 Tex1CoordEmission =\n"
    "   vec3(vTexCoord, 1.0) * uTextureMatrixTransformEmission1;\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
    "#endif //EMISSION\n"
@@ -1562,6 +1922,10 @@ static const char parallax_occlusion_frag_glsl[] =
    "#ifdef LIGHT_ATTENUATION\n"
    "varying   float    vLightDist;\n"
    "#endif //LIGHT_ATTENUATION\n"
+   "#ifdef GL_ES\n"
+   "uniform int   uAlphaTestComparison;\n"
+   "uniform float uAlphaTestRefValue;\n"
+   "#endif //GL_ES\n"
    "const float parallaxScale = 0.2;\n"
    "vec2 parallaxMapping(in vec3 view, in vec2 tex, out float 
parallaxHeight)\n"
    "{\n"
@@ -1606,11 +1970,12 @@ static const char parallax_occlusion_frag_glsl[] =
    "   parallaxHeight = curLayerHeight + prevH * weight + nextH * (1.0 - 
weight);\n"
    "   return finalTexCoords;\n"
    "}\n"
-   "void fragmentParallaxMap()\n"
+   "vec4 fragmentParallaxMap()\n"
    "{\n"
    "   float factor;\n"
    "   vec3  normal;\n"
    "   vec4  color;\n"
+   "   vec4 fragcolor;\n"
    "   float parallaxHeight;\n"
    "   vec2 tex = parallaxMapping(vEyeVector, vec2(Tex0CoordNormal), 
parallaxHeight);\n"
    "   vec3  lv = normalize(vLightVector);\n"
@@ -1644,9 +2009,9 @@ static const char parallax_occlusion_frag_glsl[] =
    "        color = uMaterialDiffuse;\n"
    "#endif //DIFFUSE_TEXTURE\n"
    "#endif //DIFFUSE_TEXTURE_BLEND\n"
-   "        gl_FragColor = uLightDiffuse * color * factor;\n"
+   "        fragcolor = uLightDiffuse * color * factor;\n"
    "#else\n"
-   "        gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "        fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#endif //DIFFUSE\n"
    "#ifdef SPECULAR\n"
    "        factor = dot(normalize(vLightHalfVector), normal);\n"
@@ -1663,15 +2028,15 @@ static const char parallax_occlusion_frag_glsl[] =
    "             color = uMaterialSpecular;\n"
    "#endif //SPECULAR_TEXTURE\n"
    "#endif //SPECULAR_TEXTURE_BLEND\n"
-   "             gl_FragColor += uLightSpecular * color * factor;\n"
+   "             fragcolor += uLightSpecular * color * factor;\n"
    "          }\n"
    "#endif //SPECULAR\n"
    "#ifdef SHADOWED\n"
-   "        gl_FragColor *= shadow;\n"
+   "        fragcolor *= shadow;\n"
    "#endif //SHADOWED\n"
    "     }\n"
    "   else\n"
-   "     gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
+   "     fragcolor = vec4(0.0, 0.0, 0.0, 0.0);\n"
    "#ifdef AMBIENT\n"
    "#ifdef AMBIENT_TEXTURE_BLEND\n"
    "   color = texture2D(uTextureAmbient0, tex) * uTextureAmbientWeight +\n"
@@ -1683,10 +2048,10 @@ static const char parallax_occlusion_frag_glsl[] =
    "   color = uMaterialAmbient;\n"
    "#endif //AMBIENT_TEXTURE\n"
    "#endif //AMBIENT_TEXTURE_BLEND\n"
-   "   gl_FragColor += uLightAmbient * color;\n"
+   "   fragcolor += uLightAmbient * color;\n"
    "#endif //AMBIENT\n"
    "#ifdef LIGHT_ATTENUATION\n"
-   "   gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
+   "   fragcolor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * 
vLightDist));\n"
    "#endif //LIGHT_ATTENUATION\n"
    "#ifdef EMISSION\n"
    "#ifdef EMISSION_TEXTURE_BLEND\n"
@@ -1699,14 +2064,60 @@ static const char parallax_occlusion_frag_glsl[] =
    "   color = uMaterialEmission;\n"
    "#endif //EMISSION_TEXTURE\n"
    "#endif //EMISSION_TEXTURE_BLEND\n"
-   "   gl_FragColor += color;\n"
+   "   fragcolor += color;\n"
    "#endif //EMISSION\n"
+   "   return fragcolor;\n"
    "}\n"
    "void main() {\n"
+   "   vec4 color;\n"
    "#ifdef SHADOWED\n"
    "   shadow = pcf(vLightPosition, 1.0 / 200.0);\n"
    "#endif //SHADOWED\n"
-   "   fragmentParallaxMap();\n"
+   "   color = fragmentParallaxMap();\n"
+   "#ifdef ALPHA_TEST_ENABLED\n"
+   "   #ifdef GL_ES\n"
+   "/*uAlphaTestComparison is value of the Evas_3D_Comparison type*/\n"
+   "   const float p = 1000000.0;\n"
+   "   float acolor = floor(color.a * p);\n"
+   "   float refvalue = floor(uAlphaTestRefValue * p);\n"
+   "   if (uAlphaTestComparison == 0) discard;\n"
+   "   else if (uAlphaTestComparison == 1)\n"
+   "     {\n"
+   "        if (acolor < refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 2)\n"
+   "     {\n"
+   "        if (acolor == refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 3)\n"
+   "     {\n"
+   "        if (acolor <= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 4)\n"
+   "     {\n"
+   "        if (acolor > refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 5)\n"
+   "     {\n"
+   "        if (acolor != refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 6)\n"
+   "     {\n"
+   "        if (acolor >= refvalue) gl_FragColor = color;\n"
+   "        else discard;\n"
+   "     }\n"
+   "   else if (uAlphaTestComparison == 7) ;\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //GL_ES\n"
+   "#else\n"
+   "   gl_FragColor = color;\n"
+   "#endif //ALPHA_TEST_ENABLED\n"
    "   \n"
    "#ifdef FOG_ENABLED\n"
    "   float z = gl_FragCoord.z / gl_FragCoord.w;\n"

-- 


Reply via email to