Hello, On Thu, Feb 19, 2015 at 11:40:00AM +0000, Oleksandr Shcherbina wrote: > > it is strange because, I did git pull and make efl an hour before. It is > all right. > > Do you turn additional confugure keys?
"make all" works. The problem is while running "make distcheck". > > > ------- Original Message ------- > > Sender : marcel-hollerb...@t-online.de<marcel-hollerb...@t-online.de> > > Date : Feb 19, 2015 14:20 (GMT+03:00) > > Title : Re: [E-devel] [EGIT] [core/efl] master 01/07: evas: Evas_3D - > refactor shader system. > > > Hello, > I am getting the same error. > On Thu, Feb 19, 2015 at 10:28:01AM +0200, Daniel Hirt wrote: > > Hello, > > > > A small FYI from out-of-tree builder, this broke distcheck: > > > > make[3]: *** No rule to make target > > 'modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd', needed > > by 'modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x'. > Stop. > > > > Maybe something went wrong with Makefile_Evas.am changes... > > > > On 02/18/2015 11:43 PM, Dmytro Dadyka wrote: > > > cedric pushed a commit to branch master. > > > > > > > > http://git.enlightenment.org/core/efl.git/commit/?id=b9b5ced501f4642f03d8bcc > 8441fd3f7b55a7f52 > > > > > > commit b9b5ced501f4642f03d8bcc8441fd3f7b55a7f52 > > > Author: Dmytro Dadyka > > > Date: Wed Feb 18 21:19:28 2015 +0100 > > > > > > evas: Evas_3D - refactor shader system. > > > > > > Reviewers: Hermet, raster, jpeg, cedric > > > > > > Subscribers: artem.popov, cedric > > > > > > Differential Revision: https://phab.enlightenment.org/D1947 > > > > > > Signed-off-by: Cedric BAIL > > > --- > > > .gitignore | 1 + > > > src/Makefile_Evas.am | 30 + > > > src/modules/evas/engines/gl_common/evas_gl_3d.c | 7 +- > > > .../evas/engines/gl_common/evas_gl_3d_private.h | 27 +- > > > .../evas/engines/gl_common/evas_gl_3d_shader.c | 1097 > +------------------- > > > .../gl_common/shader_3d/color_pick_frag.shd | 7 + > > > .../gl_common/shader_3d/color_pick_vert.shd | 28 + > > > .../engines/gl_common/shader_3d/diffuse_frag.shd | 47 + > > > .../engines/gl_common/shader_3d/diffuse_vert.shd | 52 + > > > .../evas/engines/gl_common/shader_3d/flat_frag.shd | 195 ++++ > > > .../evas/engines/gl_common/shader_3d/flat_vert.shd | 154 +++ > > > .../engines/gl_common/shader_3d/gen_shaders_3d.sh | 45 + > > > .../gl_common/shader_3d/normal_map_frag.shd | 283 +++++ > > > .../gl_common/shader_3d/normal_map_vert.shd | 189 ++++ > > > .../engines/gl_common/shader_3d/phong_frag.shd | 235 +++++ > > > .../engines/gl_common/shader_3d/phong_vert.shd | 116 +++ > > > .../gl_common/shader_3d/shadow_map_frag.shd | 4 + > > > .../gl_common/shader_3d/shadow_map_vert.shd | 28 + > > > .../gl_common/shader_3d/vertex_color_frag.shd | 20 + > > > .../gl_common/shader_3d/vertex_color_vert.shd | 50 + > > > 20 files changed, 1553 insertions(+), 1062 deletions(-) > > > > > > diff --git a/.gitignore b/.gitignore > > > index 4f04840..96345bf 100644 > > > --- a/.gitignore > > > +++ b/.gitignore > > > @@ -67,4 +67,5 @@ tags > > > /config.rpath > > > /coverage > > > /src/lib/ecore_x/ecore_x_vsync > > > +/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x > > > Session.vim > > > diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am > > > index 0651d7f..3cfbced 100644 > > > --- a/src/Makefile_Evas.am > > > +++ b/src/Makefile_Evas.am > > > @@ -586,6 +586,7 @@ modules/evas/engines/gl_common/evas_gl_api.c \ > > > modules/evas/engines/gl_common/evas_gl_api_gles1.c \ > > > modules/evas/engines/gl_common/evas_gl_api_ext.c \ > > > modules/evas/engines/gl_common/shader/evas_gl_shaders.x \ > > > +modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x \ > > > modules/evas/engines/gl_common/shader/evas_gl_enum.x > > > > > > # 3D > > > @@ -729,6 +730,35 @@ > modules/evas/engines/gl_common/shader/evas_gl_shaders.x: > modules/evas/engines/gl > > > > > > modules/evas/engines/gl_common/shader/evas_gl_enum.x: > modules/evas/engines/gl_common/shader/evas_gl_shaders.x > > > > > > +# NOTE: order here should be equal with modes in file Evas_Eo.h > > > +GL_SHADERS_3D_GEN = \ > > > +modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/flat_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/flat_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/phong_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/phong_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd \ > > > +modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd \ > > > +modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd \ > > > +$(NULL) > > > + > > > +EXTRA_DIST += \ > > > +modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > > > + > > > +BUILT_SOURCES += \ > > > +modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x > > > + > > > +modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x: > modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > $(GL_SHADERS_3D_GEN) > > > + @echo " SHADERS_3D $@" > > > + @modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > $(GL_SHADERS_3D_GEN) > > > + > > > + > > > GL_GENERIC_SOURCES = \ > > > modules/evas/engines/gl_generic/evas_engine.c \ > > > modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h > > > diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d.c > b/src/modules/evas/engines/gl_common/evas_gl_3d.c > > > index b1b277d..403aea6 100644 > > > --- a/src/modules/evas/engines/gl_common/evas_gl_3d.c > > > +++ b/src/modules/evas/engines/gl_common/evas_gl_3d.c > > > @@ -1144,13 +1144,10 @@ _mesh_draw_data_build(E3D_Draw_Data *data, > > > } > > > > > > if (pdmesh->shadowed) > > > - data->flags |= E3D_SHADER_FLAG_SHADOWED; > > > + data->flags |= E3D_SHADER_FLAG_SHADOWED; > > > > > > if (pdmesh->color_pick_enabled) > > > - { > > > - data->flags |= E3D_SHADER_FLAG_COLOR_PICK_ENABLED; > > > - data->color_pick_key = pdmesh->color_pick_key; > > > - } > > > + data->color_pick_key = pdmesh->color_pick_key; > > > > > > data->blending = pdmesh->blending; > > > data->blend_sfactor = pdmesh->blend_sfactor; > > > diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_private.h > b/src/modules/evas/engines/gl_common/evas_gl_3d_private.h > > > index 6d956f5..78ddc42 100644 > > > --- a/src/modules/evas/engines/gl_common/evas_gl_3d_private.h > > > +++ b/src/modules/evas/engines/gl_common/evas_gl_3d_private.h > > > @@ -7,6 +7,7 @@ typedef struct _E3D_Program E3D_Program; > > > typedef struct _E3D_Draw_Data E3D_Draw_Data; > > > typedef unsigned long E3D_Shader_Flag; > > > > > > +// NOTE: order here should be equal with flag names in file > evas_gl_3d_shader.c > > > #define E3D_SHADER_FLAG_NORMALIZE_NORMALS (1 << 0) > > > #define E3D_SHADER_FLAG_VERTEX_POSITION (1 << 1) > > > #define E3D_SHADER_FLAG_VERTEX_POSITION_BLEND (1 << 2) > > > @@ -25,19 +26,19 @@ typedef unsigned long E3D_Shader_Flag; > > > #define E3D_SHADER_FLAG_DIFFUSE (1 << 15) > > > #define E3D_SHADER_FLAG_SPECULAR (1 << 16) > > > #define E3D_SHADER_FLAG_EMISSION (1 << 17) > > > -#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE (1 << 19) > > > -#define E3D_SHADER_FLAG_AMBIENT_TEXTURE (1 << 20) > > > -#define E3D_SHADER_FLAG_SPECULAR_TEXTURE (1 << 21) > > > -#define E3D_SHADER_FLAG_EMISSION_TEXTURE (1 << 22) > > > -#define E3D_SHADER_FLAG_NORMAL_TEXTURE (1 << 23) > > > -#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND (1 << 24) > > > -#define E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND (1 << 25) > > > -#define E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND (1 << 26) > > > -#define E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND (1 << 27) > > > -#define E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND (1 << 28) > > > -#define E3D_SHADER_FLAG_FOG_ENABLED (1 << 29) > > > -#define E3D_SHADER_FLAG_SHADOWED (1 << 30) > > > -#define E3D_SHADER_FLAG_COLOR_PICK_ENABLED (1 << 31) > > > +#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE (1 << 18) > > > +#define E3D_SHADER_FLAG_AMBIENT_TEXTURE (1 << 19) > > > +#define E3D_SHADER_FLAG_SPECULAR_TEXTURE (1 << 20) > > > +#define E3D_SHADER_FLAG_EMISSION_TEXTURE (1 << 21) > > > +#define E3D_SHADER_FLAG_NORMAL_TEXTURE (1 << 22) > > > +#define E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND (1 << 23) > > > +#define E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND (1 << 24) > > > +#define E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND (1 << 25) > > > +#define E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND (1 << 26) > > > +#define E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND (1 << 27) > > > +#define E3D_SHADER_FLAG_FOG_ENABLED (1 << 28) > > > +#define E3D_SHADER_FLAG_SHADOWED (1 << 29) > > > +#define E3D_SHADER_FLAG_COUNT 30 > > > > > > static inline Eina_Bool > > > _flags_need_tex_coord(E3D_Shader_Flag flags) > > > 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 757b265..4f8fced 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 > > > @@ -1,4 +1,5 @@ > > > #include "evas_gl_3d_private.h" > > > +#include "shader_3d/evas_gl_3d_shaders.x" > > > > > > typedef enum _E3D_Uniform > > > { > > > @@ -54,6 +55,40 @@ typedef enum _E3D_Uniform > > > E3D_UNIFORM_COUNT, > > > } E3D_Uniform; > > > > > > +static const char *shader_flag_names[] = > > > +{ > > > + "NORMALIZE_NORMALS", > > > + "VERTEX_POSITION", > > > + "VERTEX_POSITION_BLEND", > > > + "VERTEX_NORMAL", > > > + "VERTEX_NORMAL_BLEND", > > > + "VERTEX_TANGENT", > > > + "VERTEX_TANGENT_BLEND", > > > + "VERTEX_COLOR", > > > + "VERTEX_COLOR_BLEND", > > > + "VERTEX_TEXCOORD", > > > + "VERTEX_TEXCOORD_BLEND", > > > + "LIGHT_DIRECTIONAL", > > > + "LIGHT_SPOT", > > > + "LIGHT_ATTENUATION", > > > + "AMBIENT", > > > + "DIFFUSE", > > > + "SPECULAR", > > > + "EMISSION", > > > + "DIFFUSE_TEXTURE", > > > + "AMBIENT_TEXTURE", > > > + "SPECULAR_TEXTURE", > > > + "EMISSION_TEXTURE", > > > + "NORMAL_TEXTURE", > > > + "DIFFUSE_TEXTURE_BLEND", > > > + "AMBIENT_TEXTURE_BLEND", > > > + "SPECULAR_TEXTURE_BLEND", > > > + "EMISSION_TEXTURE_BLEND", > > > + "NORMAL_TEXTURE_BLEND", > > > + "FOG_ENABLED", > > > + "SHADOWED" > > > +}; > > > + > > > typedef struct _E3D_Shader_String > > > { > > > char *str; > > > @@ -117,1050 +152,21 @@ void _shader_string_add(E3D_Shader_String > *shader, const char *str) > > > shader->count += len; > > > } > > > > > > -#define ADD_LINE(str) _shader_string_add(shader, str"\n") > > > - > > > -static void > > > -_vertex_shader_string_variable_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode, > E3D_Shader_Flag flags) > > > -{ > > > - ADD_LINE("uniform mat4 uMatrixMvp;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("uniform mat4 uMatrixLight;"); > > > - ADD_LINE("varying vec4 lpos;"); > > > - } > > > - > > > - /* Vertex attributes. */ > > > - if (flags & E3D_SHADER_FLAG_VERTEX_POSITION) > > > - ADD_LINE("attribute vec4 aPosition0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_POSITION_BLEND) > > > - { > > > - ADD_LINE("attribute vec4 aPosition1;"); > > > - ADD_LINE("uniform float uPositionWeight;"); > > > - } > > > - > > > - else if (mode == EVAS_3D_SHADE_MODE_SHADOW_MAP_RENDER) return; > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_NORMAL) > > > - ADD_LINE("attribute vec4 aNormal0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_NORMAL_BLEND) > > > - { > > > - ADD_LINE("attribute vec4 aNormal1;"); > > > - ADD_LINE("uniform float uNormalWeight;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TANGENT) > > > - ADD_LINE("attribute vec4 aTangent0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TANGENT_BLEND) > > > - { > > > - ADD_LINE("attribute vec4 aTangent1;"); > > > - ADD_LINE("uniform float uTangentWeight;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_COLOR) > > > - ADD_LINE("attribute vec4 aColor0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_COLOR_BLEND) > > > - { > > > - ADD_LINE("attribute vec4 aColor1;"); > > > - ADD_LINE("uniform float uColorWeight;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD) > > > - ADD_LINE("attribute vec4 aTexCoord0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD_BLEND) > > > - { > > > - ADD_LINE("attribute vec4 aTexCoord1;"); > > > - ADD_LINE("uniform float uTexCoordWeight;"); > > > - } > > > - > > > - /* Texture coordinate. */ > > > - if (_flags_need_tex_coord(flags)) > > > - ADD_LINE("varying vec2 vTexCoord;"); > > > - > > > - /* Variables for each shade modes. */ > > > - if (mode == EVAS_3D_SHADE_MODE_VERTEX_COLOR) > > > - { > > > - ADD_LINE("varying vec4 vColor;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_DIFFUSE) > > > - { > > > - /* Nothing to declare. */ > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - { > > > - ADD_LINE("uniform mat3 uMatrixNormal;"); > > > - ADD_LINE("uniform mat4 uMatrixModelview;"); > > > - ADD_LINE("uniform vec4 uLightPosition;"); > > > - > > > - ADD_LINE("varying vec2 vFactor;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_SPOT) > > > - { > > > - ADD_LINE("uniform vec3 uLightSpotDir;"); > > > - ADD_LINE("uniform float uLightSpotExp;"); > > > - ADD_LINE("uniform float uLightSpotCutoffCos;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - ADD_LINE("uniform float uMaterialShininess;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("uniform vec3 uLightAtten;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG || mode == > EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - { > > > - ADD_LINE("uniform mat3 uMatrixNormal;"); > > > - ADD_LINE("uniform mat4 uMatrixModelview;"); > > > - ADD_LINE("uniform vec4 uLightPosition;"); > > > - ADD_LINE("varying vec3 vLightVector;"); > > > - ADD_LINE("varying vec3 vLightHalfVector;"); > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - ADD_LINE("varying vec3 vEyeVector;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("varying float vLightDist;"); > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_PHONG || (flags & > E3D_SHADER_FLAG_VERTEX_TANGENT) == 0) > > > - ADD_LINE("varying vec3 vNormal;"); > > > - } > > > -} > > > - > > > -static void > > > -_vertex_shader_string_func_flat_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, E3D_Shader_Flag flags) > > > -{ > > > - ADD_LINE("void vertexFlat(vec4 position, vec3 normal) {"); > > > - > > > - ADD_LINE("vec3 lv;"); > > > - ADD_LINE("float factor;"); > > > - > > > - ADD_LINE("normal = uMatrixNormal * normal;"); > > > - ADD_LINE("position = uMatrixModelview * position;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_NORMALIZE_NORMALS) > > > - ADD_LINE("normal = normalize(normal);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_DIRECTIONAL) > > > - { > > > - ADD_LINE("lv = uLightPosition.xyz;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("lv = uLightPosition.xyz - position.xyz;"); > > > - ADD_LINE("lv = normalize(lv);"); > > > - } > > > - > > > - ADD_LINE("factor = max(dot(lv, normal), 0.0);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_SPOT) > > > - { > > > - ADD_LINE("float f = dot(-lv, uLightSpotDir);"); > > > - ADD_LINE("if (f > uLightSpotCutoffCos)"); > > > - ADD_LINE("factor *= pow(f, uLightSpotExp);"); > > > - ADD_LINE("else"); > > > - ADD_LINE("factor = 0.0;"); > > > - } > > > - > > > - ADD_LINE("if (factor > 0.0) {"); > > > - > > > - /* Diffuse term. */ > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - ADD_LINE("vFactor.x = factor;"); > > > - else > > > - ADD_LINE("vFactor.x = 0.0;"); > > > - > > > - /* Specular term. */ > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - { > > > - ADD_LINE("vec3 hv = normalize(normalize(-position.xyz) + > lv);"); > > > - ADD_LINE("factor = pow(max(dot(hv, normal), 0.0), > uMaterialShininess);"); > > > - ADD_LINE("vFactor.y = factor;"); > > > - } > > > - > > > - ADD_LINE("} else {"); > > > - ADD_LINE("vFactor = vec2(0.0, 0.0);"); > > > - ADD_LINE("}"); > > > - > > > - /* Light attenuation. */ > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - { > > > - ADD_LINE("float dist = length(lv);"); > > > - ADD_LINE("vFactor /= dot(uLightAtten, vec3(1.0, dist, dist * > dist));"); > > > - } > > > - > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_vertex_shader_string_func_phong_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, E3D_Shader_Flag flags) > > > -{ > > > - ADD_LINE("void vertexPhong(vec4 position, vec3 normal) {"); > > > - > > > - ADD_LINE("normal = uMatrixNormal * normal;"); > > > - ADD_LINE("position = uMatrixModelview * position;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_NORMALIZE_NORMALS) > > > - ADD_LINE("normal = normalize(normal);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_DIRECTIONAL) > > > - { > > > - ADD_LINE("vLightVector = uLightPosition.xyz;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("vLightVector = uLightPosition.xyz - position.xyz;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("vLightDist = length(vLightVector);"); > > > - > > > - ADD_LINE("vLightVector = normalize(vLightVector);"); > > > - } > > > - > > > - ADD_LINE("vLightHalfVector = normalize(normalize(-position.xyz) + > vLightVector);"); > > > - ADD_LINE("vNormal = normal;"); > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_vertex_shader_string_func_normal_map_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, > > > - E3D_Shader_Flag flags) > > > -{ > > > - if ((flags & E3D_SHADER_FLAG_VERTEX_TANGENT) == 0) > > > - { > > > - ADD_LINE("void vertexNormalMap(vec4 position, vec3 normal) > {"); > > > - > > > - ADD_LINE("normal = uMatrixNormal * normal;"); > > > - ADD_LINE("position = uMatrixModelview * position;"); > > > - ADD_LINE("vEyeVector = normalize(-position.xyz);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_NORMALIZE_NORMALS) > > > - ADD_LINE("normal = normalize(normal);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_DIRECTIONAL) > > > - { > > > - ADD_LINE("vLightVector = uLightPosition.xyz;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("vLightVector = uLightPosition.xyz - > position.xyz;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("vLightDist = length(vLightVector);"); > > > - > > > - ADD_LINE("vLightVector = normalize(vLightVector);"); > > > - } > > > - > > > - ADD_LINE("vLightHalfVector = normalize(vEyeVector + > vLightVector);"); > > > - ADD_LINE("vNormal = normal;"); > > > - ADD_LINE("}"); > > > - } > > > - else > > > - { > > > - ADD_LINE("void vertexNormalMap(vec4 position, vec3 normal, > vec3 > tangent) {"); > > > - > > > - ADD_LINE("vec3 n = normalize(uMatrixNormal * normal);"); > > > - ADD_LINE("vec3 t = normalize(uMatrixNormal * tangent);"); > > > - ADD_LINE("vec3 b = cross(n, t);"); > > > - ADD_LINE("vec3 tmp;"); > > > - > > > - ADD_LINE("position = uMatrixModelview * position;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_DIRECTIONAL) > > > - { > > > - ADD_LINE("vec3 lightDir = uLightPosition.xyz;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("vec3 lightDir = uLightPosition.xyz - > position.xyz;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("vLightDist = length(lightDir);"); > > > - > > > - ADD_LINE("lightDir = normalize(lightDir);"); > > > - } > > > - > > > - ADD_LINE("tmp.x = dot(lightDir, t);"); > > > - ADD_LINE("tmp.y = dot(lightDir, b);"); > > > - ADD_LINE("tmp.z = dot(lightDir, n);"); > > > - ADD_LINE("vLightVector = tmp;"); > > > - > > > - ADD_LINE("tmp.x = dot(position.xyz, t);"); > > > - ADD_LINE("tmp.y = dot(position.xyz, b);"); > > > - ADD_LINE("tmp.z = dot(position.xyz, n);"); > > > - ADD_LINE("vEyeVector = normalize(tmp);"); > > > - > > > - ADD_LINE("vec3 hv = normalize(normalize(-position.xyz) + > lightDir);"); > > > - ADD_LINE("tmp.x = dot(hv, t);"); > > > - ADD_LINE("tmp.y = dot(hv, b);"); > > > - ADD_LINE("tmp.z = dot(hv, n);"); > > > - ADD_LINE("vLightHalfVector = tmp;"); > > > - > > > - ADD_LINE("}"); > > > - } > > > -} > > > - > > > -static void > > > -_vertex_shader_string_get(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode, E3D_Shader_Flag > flags) > > > -{ > > > - /* Add variables - vertex attributes. */ > > > - _vertex_shader_string_variable_add(shader, mode, flags); > > > - > > > - /* Add functions. */ > > > - if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - _vertex_shader_string_func_flat_add(shader, mode, flags); > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG) > > > - _vertex_shader_string_func_phong_add(shader, mode, flags); > > > - else if (mode == EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - _vertex_shader_string_func_normal_map_add(shader, mode, flags); > > > - > > > - ADD_LINE("void main() {"); > > > - > > > - /* Process vertex attributes. */ > > > - if (flags & E3D_SHADER_FLAG_VERTEX_POSITION_BLEND) > > > - { > > > - ADD_LINE("vec4 position = aPosition0 * uPositionWeight + "); > > > - ADD_LINE("aPosition1 * (1.0 - uPositionWeight);"); > > > - ADD_LINE("position = vec4(position.xyz, 1.0);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_VERTEX_POSITION) > > > - { > > > - ADD_LINE("vec4 position = vec4(aPosition0.xyz, 1.0);"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_NORMAL_BLEND) > > > - { > > > - ADD_LINE("vec3 normal = aNormal0.xyz * uNormalWeight + "); > > > - ADD_LINE("aNormal1.xyz * (1.0 - uNormalWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_VERTEX_NORMAL) > > > - { > > > - ADD_LINE("vec3 normal = aNormal0.xyz;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TANGENT_BLEND) > > > - { > > > - ADD_LINE("vec3 tangent = aTangent0.xyz * uTangentWeight + "); > > > - ADD_LINE("aTangent1.xyz * (1.0 - uTangentWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_VERTEX_TANGENT) > > > - { > > > - ADD_LINE("vec3 tangent = aTangent0.xyz;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_COLOR_BLEND) > > > - { > > > - ADD_LINE("vec4 color = aColor0 * uColorWeight + aColor1 * (1.0 > - uColorWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_VERTEX_COLOR) > > > - { > > > - ADD_LINE("vec4 color = aColor0;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD_BLEND) > > > - { > > > - ADD_LINE("vTexCoord = aTexCoord0.st * uTexCoordWeight + "); > > > - ADD_LINE("aTexCoord1.st * (1.0 - uTexCoordWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_VERTEX_TEXCOORD) > > > - { > > > - ADD_LINE("vTexCoord = aTexCoord0.st;"); > > > - } > > > - > > > - /* Transform vertex position. */ > > > - ADD_LINE("gl_Position = uMatrixMvp * position;"); > > > - > > > - /* Process according to the shade mode. */ > > > - if (mode == EVAS_3D_SHADE_MODE_VERTEX_COLOR) > > > - { > > > - ADD_LINE("vColor = color;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - { > > > - ADD_LINE("vertexFlat(position, normal);"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG) > > > - { > > > - ADD_LINE("vertexPhong(position, normal);"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - { > > > - if (flags & E3D_SHADER_FLAG_VERTEX_TANGENT) > > > - ADD_LINE("vertexNormalMap(position, normal, tangent);"); > > > - else > > > - ADD_LINE("vertexNormalMap(position, normal);"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("lpos = uMatrixLight * position;"); > > > - } > > > - > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_fragment_shader_string_variable_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode, > E3D_Shader_Flag flags) > > > -{ > > > - /* Texture coordinate. */ > > > - if (_flags_need_tex_coord(flags)) > > > - ADD_LINE("varying vec2 vTexCoord;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_FOG_ENABLED) > > > - { > > > - ADD_LINE("uniform float uFogFactor;"); > > > - ADD_LINE("uniform vec4 uFogColor;"); > > > - } > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("varying vec4 lpos;"); > > > - ADD_LINE("uniform sampler2D uShadowMap;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_COLOR_PICK_ENABLED) > > > - ADD_LINE("uniform float uColorPick;"); > > > - > > > - /* Materials. */ > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - { > > > - ADD_LINE("uniform vec4 uMaterialDiffuse;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureDiffuse0;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureDiffuse1;"); > > > - ADD_LINE("uniform float uTextureDiffuseWeight;"); > > > - } > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - { > > > - ADD_LINE("uniform vec4 uMaterialSpecular;"); > > > - ADD_LINE("uniform float uMaterialShininess;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureSpecular0;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureSpecular1;"); > > > - ADD_LINE("uniform float uTextureSpecularWeight;"); > > > - } > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - { > > > - ADD_LINE("uniform vec4 uMaterialAmbient;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureAmbient0;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureAmbient1;"); > > > - ADD_LINE("uniform float uTextureAmbientWeight;"); > > > - } > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_EMISSION) > > > - { > > > - ADD_LINE("uniform vec4 uMaterialEmission;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureEmission0;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureEmission1;"); > > > - ADD_LINE("uniform float uTextureEmissionWeight;"); > > > - } > > > - } > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_VERTEX_COLOR) > > > - { > > > - ADD_LINE("varying vec4 vColor;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_DIFFUSE) > > > - { > > > - /* Nothing to declare. */ > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - { > > > - ADD_LINE("varying vec2 vFactor;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - ADD_LINE("uniform vec4 uLightDiffuse;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - ADD_LINE("uniform vec4 uLightSpecular;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - ADD_LINE("uniform vec4 uLightAmbient;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG || mode == > EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - { > > > - ADD_LINE("varying vec3 vLightVector;"); > > > - ADD_LINE("varying vec3 vLightHalfVector;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_SPOT) > > > - { > > > - ADD_LINE("uniform vec3 uLightSpotDir;"); > > > - ADD_LINE("uniform float uLightSpotExp;"); > > > - ADD_LINE("uniform float uLightSpotCutoffCos;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - ADD_LINE("uniform vec4 uLightDiffuse;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - ADD_LINE("uniform vec4 uLightSpecular;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - ADD_LINE("uniform vec4 uLightAmbient;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("varying float vLightDist;"); > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_PHONG) > > > - { > > > - ADD_LINE("varying vec3 vNormal;"); > > > - } > > > - else /* Normal map. */ > > > - { > > > - ADD_LINE("uniform sampler2D uTextureNormal0;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("uniform sampler2D uTextureNormal1;"); > > > > - ADD_LINE("uniform float uTextureNormalWeight;"); > > > - } > > > - > > > - ADD_LINE("varying vec3 vEyeVector;"); > > > - > > > - if ((flags & E3D_SHADER_FLAG_VERTEX_TANGENT) == 0) > > > - ADD_LINE("varying vec3 vNormal;"); > > > - } > > > - } > > > -} > > > - > > > -static void > > > -_fragment_shader_string_func_flat_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, E3D_Shader_Flag flags) > > > -{ > > > - ADD_LINE("void fragmentFlat() {"); > > > - ADD_LINE("vec4 color;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - { > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, vTexCoord) > * > uTextureDiffuseWeight +"); > > > - ADD_LINE("texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight);"); > > > - ADD_LINE("color *= uMaterialDiffuse;"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, vTexCoord) > * > uMaterialDiffuse;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialDiffuse;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor = uLightDiffuse * color * vFactor.x;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - { > > > - if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, vTexCoord) > * uTextureSpecularWeight +"); > > > - ADD_LINE("texture2D(uTextureSpecular1, vTexCoord) * (1.0 > - > uTextureSpecularWeight);"); > > > - ADD_LINE("color *= uMaterialSpecular;"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, vTexCoord) > * uMaterialSpecular;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialSpecular;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightSpecular * color * > vFactor.y;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("gl_FragColor *= shadow;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - { > > > - if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, vTexCoord) > * > uTextureAmbientWeight +"); > > > - ADD_LINE("texture2D(uTextureAmbient1, vTexCoord) * (1.0 - > uTextureAmbientWeight);"); > > > - ADD_LINE("color *= uMaterialAmbient;"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, vTexCoord) > * > uMaterialAmbient;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialAmbient;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightAmbient * color;"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_EMISSION) > > > - { > > > - if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, vTexCoord) > * uTextureEmissionWeight +"); > > > - ADD_LINE("texture2D(uTextureEmission1, vTexCoord) * (1.0 > - > uTextureEmissionWeight);"); > > > - ADD_LINE("color *= uMaterialEmission;"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, vTexCoord) > * uMaterialEmission;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialEmission;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += color;"); > > > - } > > > - > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_fragment_shader_string_func_phong_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, E3D_Shader_Flag flags) > > > -{ > > > - ADD_LINE("void fragmentPhong() {"); > > > - ADD_LINE("vec3 normal = normalize(vNormal);"); > > > - ADD_LINE("vec3 lv = normalize(vLightVector);"); > > > - ADD_LINE("float factor = dot(lv, normal);"); > > > - ADD_LINE("vec4 color;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_SPOT) > > > - { > > > - ADD_LINE("float f = dot(-lv, normalize(uLightSpotDir));"); > > > - > > > - ADD_LINE("if (f > uLightSpotCutoffCos)"); > > > - ADD_LINE("factor *= pow(f, uLightSpotExp);"); > > > - ADD_LINE("else"); > > > - ADD_LINE("factor = 0.0;"); > > > - } > > > - > > > - ADD_LINE("if (factor > 0.0) {"); > > > - > > > - /* Diffuse term. */ > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - { > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, vTexCoord) > * > uTextureDiffuseWeight +"); > > > - ADD_LINE("texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialDiffuse;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor = uLightDiffuse * color * factor;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);"); > > > - } > > > - > > > - /* Specular term. */ > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - { > > > - ADD_LINE("factor = dot(normalize(vLightHalfVector), > normal);"); > > > - ADD_LINE("if (factor > 0.0) {"); > > > - ADD_LINE("factor = pow(factor, uMaterialShininess);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, vTexCoord) > * uTextureSpecularWeight +"); > > > - ADD_LINE("texture2D(uTextureSpecular1, vTexCoord) * (1.0 > - > uTextureSpecularWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialSpecular;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightSpecular * color * factor;"); > > > - ADD_LINE("}"); > > > - } > > > - > > > - ADD_LINE("} else {"); > > > - ADD_LINE("gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);"); > > > - ADD_LINE("}"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("gl_FragColor *= shadow;"); > > > - } > > > - > > > - /* Ambient term. */ > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - { > > > - if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, vTexCoord) > * > uTextureAmbientWeight +"); > > > - ADD_LINE("texture2D(uTextureAmbient1 * vTexCoord) * (1.0 > - > uTextureAmbientWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialAmbient;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightAmbient * color;"); > > > - } > > > - > > > - /* Light attenuation. */ > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, > vLightDist * vLightDist));"); > > > - > > > - /* Emission term. */ > > > - if (flags & E3D_SHADER_FLAG_EMISSION) > > > - { > > > - if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, vTexCoord) > * uTextureEmissionWeight +"); > > > - ADD_LINE("texture2D(uTextureEmission1, vTexCoord) * (1.0 > - > uTextureEmissionWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialEmission;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += color;"); > > > - } > > > - > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_fragment_shader_string_func_normal_map_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, > > > - E3D_Shader_Flag flags) > > > +void _shader_flags_add(E3D_Shader_String *shader, E3D_Shader_Flag > flags) > > > { > > > - if ((flags & E3D_SHADER_FLAG_VERTEX_TANGENT) == 0) > > > - { > > > - ADD_LINE("mat3 cotangent_frame(vec3 n, vec3 p, vec2 uv) {"); > > > - ADD_LINE("vec3 dp1 = dFdx(p);"); > > > - ADD_LINE("vec3 dp2 = dFdy(p);"); > > > - ADD_LINE("vec2 duv1 = dFdx(uv);"); > > > - ADD_LINE("vec2 duv2 = dFdy(uv);"); > > > - ADD_LINE("vec3 dp2perp = cross(dp2, n);"); > > > - ADD_LINE("vec3 dp1perp = cross(n, dp1);"); > > > - ADD_LINE("vec3 t = dp2perp * duv1.x + dp1perp * duv2.x;"); > > > - ADD_LINE("vec3 b = dp2perp * duv1.y + dp1perp * duv2.y;"); > > > - ADD_LINE("float invmax = inversesqrt(max(dot(t, t), dot(b, > b)));"); > > > - ADD_LINE("return mat3(t * invmax, b * invmax, n);"); > > > - ADD_LINE("}"); > > > - > > > - ADD_LINE("vec3 perturb_normal(vec3 normal) {"); > > > - ADD_LINE("mat3 tbn = cotangent_frame(vNormal, -vEyeVector, > vTexCoord);"); > > > - ADD_LINE("return normalize(tbn * normal);"); > > > - ADD_LINE("}"); > > > - } > > > - > > > - ADD_LINE("void fragmentNormalMap() {"); > > > - ADD_LINE("float factor;"); > > > - ADD_LINE("vec3 normal;"); > > > - ADD_LINE("vec4 color;"); > > > - > > > - if (flags & E3D_SHADER_FLAG_NORMAL_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("normal = texture2D(uTextureNormal0, vTexCoord).rgb * > uTextureNormalWeight;"); > > > - ADD_LINE("normal += texture2D(uTextureNormal1, vTexCoord).rgb > * > "); > > > - ADD_LINE("(1.0 - uTextureNormalWeight);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("normal = texture2D(uTextureNormal0, > vTexCoord).rgb;"); > > > - } > > > - > > > - ADD_LINE("normal = 2.0 * normal - 1.0;"); > > > - > > > - if ((flags & E3D_SHADER_FLAG_VERTEX_TANGENT) == 0) > > > - { > > > - ADD_LINE("normal = perturb_normal(normal);"); > > > - } > > > - > > > - /* Can we skip this normalization?? */ > > > - ADD_LINE("vec3 lv = normalize(vLightVector);"); > > > - ADD_LINE("normal = normalize(normal);"); > > > - > > > - ADD_LINE("factor = dot(lv, normal);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_LIGHT_SPOT) > > > - { > > > - ADD_LINE("float f = dot(-lv, normalize(uLightSpotDir));"); > > > - > > > - ADD_LINE("if (f > uLightSpotCutoffCos)"); > > > - ADD_LINE("factor *= pow(f, uLightSpotExp);"); > > > - ADD_LINE("else"); > > > - ADD_LINE("factor = 0.0;"); > > > - } > > > - > > > - ADD_LINE("if (factor > 0.0) {"); > > > - > > > - /* Diffuse term. */ > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE) > > > - { > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, vTexCoord) > * > uTextureDiffuseWeight +"); > > > - ADD_LINE("texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureDiffuse0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialDiffuse;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor = uLightDiffuse * color * factor;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);"); > > > - } > > > - > > > - /* Specular term. */ > > > - if (flags & E3D_SHADER_FLAG_SPECULAR) > > > - { > > > - ADD_LINE("factor = dot(normalize(vLightHalfVector), > normal);"); > > > - ADD_LINE("if (factor > 0.0) {"); > > > - ADD_LINE("factor = pow(factor, uMaterialShininess);"); > > > - > > > - if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, vTexCoord) > * uTextureSpecularWeight +"); > > > - ADD_LINE("texture2D(uTextureSpecular1, vTexCoord) * (1.0 > - > uTextureSpecularWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_SPECULAR_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureSpecular0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialSpecular;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightSpecular * color * factor;"); > > > - ADD_LINE("}"); > > > - } > > > - > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("gl_FragColor *= shadow;"); > > > - } > > > - > > > - ADD_LINE("} else {"); > > > - ADD_LINE("gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);"); > > > - ADD_LINE("}"); > > > - > > > - /* Ambient term. */ > > > - if (flags & E3D_SHADER_FLAG_AMBIENT) > > > - { > > > - if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, vTexCoord) > * > uTextureAmbientWeight +"); > > > - ADD_LINE("texture2D(uTextureAmbient1, vTexCoord) * (1.0 - > uTextureAmbientWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_AMBIENT_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureAmbient0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialAmbient;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += uLightAmbient * color;"); > > > - } > > > - > > > - /* Light attenuation. */ > > > - if (flags & E3D_SHADER_FLAG_LIGHT_ATTENUATION) > > > - ADD_LINE("gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, > vLightDist * vLightDist));"); > > > - > > > - /* Emission term. */ > > > - if (flags & E3D_SHADER_FLAG_EMISSION) > > > - { > > > - if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, vTexCoord) > * uTextureEmissionWeight +"); > > > - ADD_LINE("texture2D(uTextureEmission1, vTexCoord) * (1.0 > - > uTextureEmissionWeight);"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_EMISSION_TEXTURE) > > > - { > > > - ADD_LINE("color = texture2D(uTextureEmission0, > vTexCoord);"); > > > - } > > > - else > > > - { > > > - ADD_LINE("color = uMaterialEmission;"); > > > - } > > > - > > > - ADD_LINE("gl_FragColor += color;"); > > > - } > > > - > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_fragment_shader_string_pcf_even_func_add(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode > EINA_UNUSED, > > > - E3D_Shader_Flag flags > EINA_UNUSED) > > > -{ > > > - ADD_LINE("float pcf(vec4 lpos, float size)"); > > > - ADD_LINE("{"); > > > - ADD_LINE("vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5;"); > > > - ADD_LINE("float i, j, randx, randy, shadow;"); > > > - ADD_LINE("shadow = 0.0;"); > > > - ADD_LINE("for (i = -4.0; i < 4.0; i++)"); > > > - ADD_LINE("for (j = -4.0; j < 4.0; j++)"); > > > - ADD_LINE("{"); > > > - ADD_LINE("shadow += float(smcoord.z <= texture2D(uShadowMap, > smcoord.xy +vec2(i / 8.0, j / 8.0)*size).x);"); > > > - ADD_LINE("}"); > > > - ADD_LINE("return shadow / 64.0;"); > > > - ADD_LINE("}"); > > > -} > > > - > > > -static void > > > -_fragment_shader_string_get(E3D_Shader_String *shader, > > > - Evas_3D_Shade_Mode mode, E3D_Shader_Flag > flags) > > > -{ > > > - /* Add variables - vertex attributes. */ > > > - _fragment_shader_string_variable_add(shader, mode, flags); > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("float shadow;"); > > > - } > > > - /* Add functions. */ > > > - if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - _fragment_shader_string_func_flat_add(shader, mode, flags); > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG) > > > - _fragment_shader_string_func_phong_add(shader, mode, flags); > > > - else if (mode == EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - _fragment_shader_string_func_normal_map_add(shader, mode, flags); > > > - > > > - // TODO Add flexible bluring algorithm of shadows boundaries. > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - _fragment_shader_string_pcf_even_func_add(shader, mode, flags); > > > - > > > - /* Add main function. */ > > > - ADD_LINE("void main() {"); > > > - if (flags & E3D_SHADER_FLAG_SHADOWED) > > > - { > > > - ADD_LINE("shadow = pcf(lpos, 1.0 / 200.0);"); > > > - } > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_VERTEX_COLOR) > > > - { > > > - ADD_LINE("gl_FragColor = vColor;"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_DIFFUSE) > > > - { > > > - if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE_BLEND) > > > - { > > > - ADD_LINE("gl_FragColor = (texture2D(uTextureDiffuse0, > vTexCoord) *"); > > > - ADD_LINE("uTextureDiffuseWeight + > texture2D(uTextureDiffuse1, vTexCoord) *"); > > > - ADD_LINE("(1.0 - uTextureDiffuseWeight)) * > uMaterialDiffuse;"); > > > - } > > > - else if (flags & E3D_SHADER_FLAG_DIFFUSE_TEXTURE) > > > - { > > > - ADD_LINE("gl_FragColor = texture2D(uTextureDiffuse0, > vTexCoord) * uMaterialDiffuse;"); > > > - } > > > - else > > > - { > > > - ADD_LINE("gl_FragColor = uMaterialDiffuse;"); > > > - } > > > - } > > > - else if(mode == EVAS_3D_SHADE_MODE_SHADOW_MAP_RENDER) > > > - { > > > - ADD_LINE("gl_FragColor = vec4(gl_FragCoord.z);"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_FLAT) > > > - { > > > - ADD_LINE("fragmentFlat();"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_PHONG) > > > - { > > > - ADD_LINE("fragmentPhong();"); > > > - } > > > - else if (mode == EVAS_3D_SHADE_MODE_NORMAL_MAP) > > > - { > > > - ADD_LINE("fragmentNormalMap();"); > > > - } > > > - > > > - if ((flags & E3D_SHADER_FLAG_FOG_ENABLED) && (mode != > EVAS_3D_SHADE_MODE_SHADOW_MAP_RENDER)) > > > - { > > > - ADD_LINE("float z = gl_FragCoord.z / gl_FragCoord.w;"); > > > - ADD_LINE("float fogFactor = exp2( -uFogFactor * uFogFactor * z > * z * 1.44 );"); > > > - ADD_LINE("fogFactor = clamp(fogFactor, 0.0, 1.0);"); > > > - ADD_LINE("gl_FragColor = mix(uFogColor, gl_FragColor, > fogFactor > );"); > > > - } > > > - > > > - if (mode == EVAS_3D_SHADE_MODE_COLOR_PICK) > > > - { > > > - ADD_LINE("gl_FragColor = vec4(uColorPick);"); > > > - } > > > + int i; > > > > > > - ADD_LINE("}"); > > > + for (i = 0; i < E3D_SHADER_FLAG_COUNT; i++) > > > + if (flags & (1 << i)) > > > + { > > > + int len = strlen("#define ") + strlen(shader_flag_names[i]) > + > 2; > > > + char str[len]; > > > + snprintf(str, len, "#define %s\n", shader_flag_names[i]); > > > + _shader_string_add(shader, str); > > > + } > > > + > > > + if(_flags_need_tex_coord(flags)) > > > + _shader_string_add(shader, "#define NEED_TEX_COORD\n"); > > > } > > > > > > static inline Eina_Bool > > > @@ -1543,8 +549,11 @@ e3d_program_new(Evas_3D_Shade_Mode mode, > E3D_Shader_Flag flags) > > > program->mode = mode; > > > program->flags = flags; > > > > > > - _vertex_shader_string_get(&vert, mode, flags); > > > - _fragment_shader_string_get(&frag, mode, flags); > > > + _shader_flags_add(&vert, flags); > > > + _shader_string_add(&frag, vert.str); > > > + > > > + _shader_string_add(&vert, vertex_shaders[mode]); > > > + _shader_string_add(&frag, fragment_shaders[mode]); > > > > > > if (! _program_build(program, vert.str, frag.str)) > > > goto error; > > > 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 > > > new file mode 100644 > > > index 0000000..5e0fc6c > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/color_pick_frag.shd > > > @@ -0,0 +1,7 @@ > > > +uniform float uColorPick; > > > + > > > +void main() > > > +{ > > > + gl_FragColor = vec4(uColorPick); > > > +} > > > + > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd > > > new file mode 100644 > > > index 0000000..472866f > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/color_pick_vert.shd > > > @@ -0,0 +1,28 @@ > > > +uniform mat4 uMatrixMvp; > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +void main() > > > +{ > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > +} > > > + > > > 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 > > > new file mode 100644 > > > index 0000000..7b6dc2b > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/diffuse_frag.shd > > > @@ -0,0 +1,47 @@ > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //TEX_COORD > > > + > > > +#ifdef FOG_ENABLED > > > +uniform float uFogFactor; > > > +uniform vec4 uFogColor; > > > +#endif //FOG_ENABLED > > > + > > > +#ifdef DIFFUSE > > > +uniform vec4 uMaterialDiffuse; > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > +uniform sampler2D uTextureDiffuse0; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > +uniform sampler2D uTextureDiffuse1; > > > +uniform float uTextureDiffuseWeight; > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > +#endif //DIFFUSE > > > + > > > +void main() { > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > + gl_FragColor = (texture2D(uTextureDiffuse0, vTexCoord) * > > > + uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vTexCoord) * > > > + (1.0 - uTextureDiffuseWeight)) * uMaterialDiffuse; > > > +#else > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > + gl_FragColor = texture2D(uTextureDiffuse0, vTexCoord) * > uMaterialDiffuse; > > > +#else > > > + gl_FragColor = uMaterialDiffuse; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > +#ifdef FOG_ENABLED > > > + float z = gl_FragCoord.z / gl_FragCoord.w; > > > + float fogFactor = exp2( -uFogFactor * uFogFactor * z * z * 1.44); > > > + fogFactor = clamp(fogFactor, 0.0, 1.0); > > > + gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor); > > > +#endif //FOG_ENABLED > > > + > > > +} > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd > > > new file mode 100644 > > > index 0000000..2b62b82 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/diffuse_vert.shd > > > @@ -0,0 +1,52 @@ > > > +uniform mat4 uMatrixMvp; > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD > > > +attribute vec4 aTexCoord0; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > +attribute vec4 aTexCoord1; > > > +uniform float uTexCoordWeight; > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //NEED_TEX_COORD > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > + vTexCoord = aTexCoord0.st * uTexCoordWeight + > > > + aTexCoord1.st * (1.0 - uTexCoordWeight); > > > +#else > > > + > > > +#ifdef VERTEX_TEXCOORD > > > + vTexCoord = aTexCoord0.st; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > +} > > > 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 > > > new file mode 100644 > > > index 0000000..824fb66 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/flat_frag.shd > > > @@ -0,0 +1,195 @@ > > > +varying vec2 vFactor; > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //TEX_COORD > > > + > > > +#ifdef FOG_ENABLED > > > +uniform float uFogFactor; > > > +uniform vec4 uFogColor; > > > +#endif //FOG_ENABLED > > > + > > > +#ifdef SHADOWED > > > +varying vec4 vLightPosition; > > > +uniform sampler2D uShadowMap; > > > +float shadow; > > > +#endif //SHADOWED > > > + > > > +#ifdef DIFFUSE > > > +uniform vec4 uMaterialDiffuse; > > > +uniform vec4 uLightDiffuse; > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > +uniform sampler2D uTextureDiffuse0; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > +uniform sampler2D uTextureDiffuse1; > > > +uniform float uTextureDiffuseWeight; > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > +uniform vec4 uLightSpecular; > > > +uniform float uMaterialShininess; > > > +uniform vec4 uMaterialSpecular; > > > + > > > +#ifdef SPECULAR_TEXTURE > > > +uniform sampler2D uTextureSpecular0; > > > +#endif //SPECULAR_TEXTURE > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > +uniform sampler2D uTextureSpecular1; > > > +uniform float uTextureSpecularWeight; > > > +#endif //SPECULAR_TEXTURE_BLEND > > > + > > > +#endif //SPECULAR > > > + > > > +#ifdef AMBIENT > > > +uniform vec4 uMaterialAmbient; > > > +uniform vec4 uLightAmbient; > > > + > > > +#ifdef AMBIENT_TEXTURE > > > +uniform sampler2D uTextureAmbient0; > > > +#endif //AMBIENT_TEXTURE > > > + > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > +uniform sampler2D uTextureAmbient1; > > > +uniform float uTextureAmbientWeight; > > > +#endif //AMBIENT_TEXTURE_BLEND > > > + > > > +#endif //AMBIENT > > > + > > > +#ifdef EMISSION > > > +uniform vec4 uMaterialEmission; > > > + > > > +#ifdef EMISSION_TEXTURE > > > +uniform sampler2D uTextureEmission0; > > > +#endif //EMISSION_TEXTURE > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > +uniform sampler2D uTextureEmission1; > > > +uniform float uTextureEmissionWeight; > > > +#endif //EMISSION_TEXTURE_BLEND > > > + > > > +#endif //EMISSION > > > + > > > +#ifdef SHADOWED > > > +float pcf(vec4 lpos, float size) > > > +{ > > > + vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5; > > > + float i, j, randx, randy, shadow; > > > + shadow = 0.0; > > > + for (i = -4.0; i < 4.0; i++) > > > + 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; > > > +} > > > +#endif //SHADOWED > > > + > > > +void fragmentFlat() > > > +{ > > > + vec4 color; > > > + > > > +#ifdef DIFFUSE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > + color = texture2D(uTextureDiffuse0, vTexCoord) * > uTextureDiffuseWeight + > > > + texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight); > > > + color *= uMaterialDiffuse; > > > +#else > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > + color = texture2D(uTextureDiffuse0, vTexCoord) * > uMaterialDiffuse; > > > +#else > > > + color = uMaterialDiffuse; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + gl_FragColor = uLightDiffuse * color * vFactor.x; > > > +#else > > > + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > + color = texture2D(uTextureSpecular0, vTexCoord) * > uTextureSpecularWeight + > > > + texture2D(uTextureSpecular1, vTexCoord) * (1.0 - > uTextureSpecularWeight); > > > + color *= uMaterialSpecular; > > > +#else > > > + > > > +#ifdef SPECULAR_TEXTURE > > > + color = texture2D(uTextureSpecular0, vTexCoord) * > uMaterialSpecular; > > > +#else > > > + color = uMaterialSpecular; > > > +#endif //SPECULAR_TEXTURE > > > + > > > +#endif //SPECULAR_TEXTURE_BLEND > > > + > > > + gl_FragColor += uLightSpecular * color * vFactor.y; > > > + > > > +#endif //SPECULAR > > > + > > > +#ifdef SHADOWED > > > + gl_FragColor *= shadow; > > > +#endif //SHADOWED > > > + > > > +#ifdef E3D_SHADER_FLAG_AMBIENT > > > + > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > + > > > + color = texture2D(uTextureAmbient0, vTexCoord) * > uTextureAmbientWeight + > > > + texture2D(uTextureAmbient1, vTexCoord) * (1.0 - > uTextureAmbientWeight); > > > + color *= uMaterialAmbient; > > > + > > > +#else > > > + > > > +#ifdef AMBIENT_TEXTURE > > > + color = texture2D(uTextureAmbient0, vTexCoord) * uMaterialAmbient; > > > +#else > > > + color = uMaterialAmbient; > > > +#endif //AMBIENT_TEXTURE > > > + > > > +#endif //AMBIENT_TEXTURE_BLEND > > > + gl_FragColor += uLightAmbient * color; > > > +#endif //AMBIENT > > > + > > > +#ifdef EMISSION > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > + color = texture2D(uTextureEmission0, vTexCoord) * > uTextureEmissionWeight + > > > + texture2D(uTextureEmission1, vTexCoord) * (1.0 - > uTextureEmissionWeight); > > > + color *= uMaterialEmission; > > > +#else > > > + > > > +#ifdef EMISSION_TEXTURE > > > + color = texture2D(uTextureEmission0, vTexCoord) * > uMaterialEmission; > > > +#else > > > + color = uMaterialEmission; > > > +#endif //EMISSION_TEXTURE > > > + > > > +#endif //EMISSION_TEXTURE_BLEND > > > + > > > + gl_FragColor += color; > > > +#endif //EMISSION > > > + > > > +} > > > + > > > +void main() { > > > + > > > +#ifdef SHADOWED > > > + shadow = pcf(vLightPosition, 1.0 / 200.0); > > > +#endif //SHADOWED > > > + > > > + fragmentFlat(); > > > + > > > +#ifdef FOG_ENABLED > > > + float z = gl_FragCoord.z / gl_FragCoord.w; > > > + float fogFactor = exp2( -uFogFactor * uFogFactor * z * z * 1.44); > > > + fogFactor = clamp(fogFactor, 0.0, 1.0); > > > + gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor); > > > +#endif //FOG_ENABLED > > > + > > > +} > > > diff --git a/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd > > > new file mode 100644 > > > index 0000000..37aba1c > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/flat_vert.shd > > > @@ -0,0 +1,154 @@ > > > +uniform mat4 uMatrixMvp; > > > +uniform mat3 uMatrixNormal; > > > +uniform mat4 uMatrixModelview; > > > +uniform vec4 uLightPosition; > > > +varying vec2 vFactor; > > > + > > > +#ifdef SHADOWED > > > +uniform mat4 uMatrixLight; > > > +varying vec4 vLightPosition; > > > +#endif //SHADOWED > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL > > > +attribute vec4 aNormal0; > > > +#endif //VERTEX_NORMAL > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > +attribute vec4 aNormal1; > > > +uniform float uNormalWeight; > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD > > > +attribute vec4 aTexCoord0; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > +attribute vec4 aTexCoord1; > > > +uniform float uTexCoordWeight; > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //NEED_TEX_COORD > > > + > > > +#ifdef LIGHT_SPOT > > > +uniform vec3 uLightSpotDir; > > > +uniform float uLightSpotExp; > > > +uniform float uLightSpotCutoffCos; > > > +#endif //LIGHT_SPOT > > > + > > > +#ifdef SPECULAR > > > +uniform float uMaterialShininess; > > > +#endif //SPECULAR > > > + > > > +#ifdef LIGHT_ATTENUATION > > > +uniform vec3 uLightAtten; > > > +#endif //LIGHT_ATTENUATION > > > + > > > +void vertexFlat(vec4 position, vec3 normal) > > > +{ > > > + vec3 lv; > > > + float factor; > > > + normal = uMatrixNormal * normal; > > > + position = uMatrixModelview * position; > > > + > > > +#ifdef NORMALIZE_NORMALS > > > + normal = normalize(normal); > > > +#endif //NORMALIZE_NORMALS > > > + > > > +#ifdef LIGHT_DIRECTIONAL > > > + lv = uLightPosition.xyz; > > > +#else > > > + lv = uLightPosition.xyz - position.xyz; > > > + lv = normalize(lv); > > > +#endif //LIGHT_DIRECTIONAL > > > + > > > + factor = max(dot(lv, normal), 0.0); > > > + > > > +#ifdef LIGHT_SPOT > > > + float f = dot(-lv, uLightSpotDir); > > > + if (f > uLightSpotCutoffCos) > > > + factor *= pow(f, uLightSpotExp); > > > + else > > > + factor = 0.0; > > > +#endif //LIGHT_SPOT > > > + > > > + if (factor > 0.0) > > > + { > > > + > > > +#ifdef DIFFUSE > > > + vFactor.x = factor; > > > +#else > > > + vFactor.x = 0.0; > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > + vec3 hv = normalize(normalize(-position.xyz) + lv); > > > + factor = pow(max(dot(hv, normal), 0.0), uMaterialShininess); > > > + vFactor.y = factor; > > > +#endif //SPECULAR > > > + > > > + } > > > + else > > > + vFactor = vec2(0.0, 0.0); > > > + > > > + /* Light attenuation. */ > > > +#ifdef LIGHT_ATTENUATION > > > + float dist = length(lv); > > > + vFactor /= dot(uLightAtten, vec3(1.0, dist, dist * dist)); > > > +#endif //LIGHT_ATTENUATION > > > +} > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > + vec3 normal = aNormal0.xyz * uNormalWeight + > > > + aNormal1.xyz * (1.0 - uNormalWeight); > > > +#else > > > + > > > +#ifdef VERTEX_NORMAL > > > + vec3 normal = aNormal0.xyz; > > > +#endif //VERTEX_NORMAL > > > + > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > + vTexCoord = aTexCoord0.st * uTexCoordWeight + > > > + aTexCoord1.st * (1.0 - uTexCoordWeight); > > > +#else > > > + > > > +#ifdef VERTEX_TEXCOORD > > > + vTexCoord = aTexCoord0.st; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > + vertexFlat(position, normal); > > > + > > > +#ifdef SHADOWED > > > + vLightPosition = uMatrixLight * position; > > > +#endif > > > +} > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > b/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > > > new file mode 100755 > > > index 0000000..8bb6a2a > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/gen_shaders_3d.sh > > > @@ -0,0 +1,45 @@ > > > +#!/bin/bash > > > + > > > +# This script will generate a C file containing all the shaders used > by > Evas_3D > > > + > > > +DIR=`dirname $0` > > > + > > > +OUTPUT=${DIR}/evas_gl_3d_shaders.x > > > + > > > +exec 1<&- > > > +exec 1>${OUTPUT} > > > + > > > +SHADERS="$@" > > > +vert_shaders_source="" > > > +frag_shaders_source="" > > > + > > > +# Write header > > > +printf "/* DO NOT MODIFY THIS FILE AS IT IS AUTO-GENERATED\n * See: $0 > */\n\n" > > > +for shd in ${SHADERS} ; do > > > + lname=`basename ${shd} .shd` > > > + > > > + if echo ${lname} |grep _vert 2>&1 >> /dev/null ; then > > > + vert_shaders_source="${vert_shaders_source} ${lname}_glsl,\n" > > > + fi > > > + if echo ${lname} |grep _frag 2>&1 >> /dev/null ; then > > > + frag_shaders_source="${frag_shaders_source} ${lname}_glsl,\n" > > > + fi > > > + OIFS=$IFS > > > + IFS=$'\n' > > > + printf "static const char const ${lname}_glsl[] =" > > > + for line in `cat ${shd}` ; do > > > + printf "\n \"${line}\\\n\"" > > > + done > > > + printf ";\n\n" > > > + IFS=${OIFS} > > > +done > > > + > > > +printf "static const char *vertex_shaders[] = > > > +{\n" > > > + printf "${vert_shaders_source}" > > > +printf "};\n\n" > > > + > > > +printf "static const char *fragment_shaders[] = > > > +{\n" > > > + printf "${frag_shaders_source}" > > > +printf "};\n" > > > 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 > > > new file mode 100644 > > > index 0000000..766e07f > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/normal_map_frag.shd > > > @@ -0,0 +1,283 @@ > > > +varying vec3 vLightVector; > > > +varying vec3 vLightHalfVector; > > > +uniform sampler2D uTextureNormal0; > > > +varying vec3 vEyeVector; > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //TEX_COORD > > > + > > > +#ifdef FOG_ENABLED > > > +uniform float uFogFactor; > > > +uniform vec4 uFogColor; > > > +#endif //FOG_ENABLED > > > + > > > +#ifdef SHADOWED > > > +varying vec4 vLightPosition; > > > +uniform sampler2D uShadowMap; > > > +float shadow; > > > +#endif //SHADOWED > > > + > > > +#ifdef NORMAL_TEXTURE_BLEND > > > +uniform sampler2D uTextureNormal1; > > > +uniform float uTextureNormalWeight; > > > +#endif //NORMAL_TEXTURE_BLEND > > > + > > > +#ifndef VERTEX_TANGENT > > > +varying vec3 vNormal; > > > +#endif //VERTEX_TANGENT > > > + > > > +#ifdef DIFFUSE > > > +uniform vec4 uMaterialDiffuse; > > > +uniform vec4 uLightDiffuse; > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > +uniform sampler2D uTextureDiffuse0; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > +uniform sampler2D uTextureDiffuse1; > > > +uniform float uTextureDiffuseWeight; > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > +uniform vec4 uLightSpecular; > > > +uniform float uMaterialShininess; > > > +uniform vec4 uMaterialSpecular; > > > + > > > +#ifdef SPECULAR_TEXTURE > > > +uniform sampler2D uTextureSpecular0; > > > +#endif //SPECULAR_TEXTURE > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > +uniform sampler2D uTextureSpecular1; > > > +uniform float uTextureSpecularWeight; > > > +#endif //SPECULAR_TEXTURE_BLEND > > > + > > > +#endif //SPECULAR > > > + > > > +#ifdef AMBIENT > > > +uniform vec4 uMaterialAmbient; > > > +uniform vec4 uLightAmbient; > > > + > > > +#ifdef AMBIENT_TEXTURE > > > +uniform sampler2D uTextureAmbient0; > > > +#endif //AMBIENT_TEXTURE > > > + > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > +uniform sampler2D uTextureAmbient1; > > > +uniform float uTextureAmbientWeight; > > > +#endif //AMBIENT_TEXTURE_BLEND > > > + > > > +#endif //AMBIENT > > > + > > > +#ifdef EMISSION > > > +uniform vec4 uMaterialEmission; > > > + > > > +#ifdef EMISSION_TEXTURE > > > +uniform sampler2D uTextureEmission0; > > > +#endif //EMISSION_TEXTURE > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > +uniform sampler2D uTextureEmission1; > > > +uniform float uTextureEmissionWeight; > > > +#endif //EMISSION_TEXTURE_BLEND > > > + > > > +#endif //EMISSION > > > + > > > +#ifdef LIGHT_SPOT > > > +uniform vec3 uLightSpotDir; > > > +uniform float uLightSpotExp; > > > +uniform float uLightSpotCutoffCos; > > > +#endif //LIGHT_SPOT > > > + > > > +#ifdef LIGHT_ATTENUATION > > > +varying float vLightDist; > > > +#endif //LIGHT_ATTENUATION > > > + > > > +#ifndef VERTEX_TANGENT > > > + > > > +mat3 cotangent_frame(vec3 n, vec3 p, vec2 uv) > > > +{ > > > + vec3 dp1 = dFdx(p); > > > + vec3 dp2 = dFdy(p); > > > + vec2 duv1 = dFdx(uv); > > > + vec2 duv2 = dFdy(uv); > > > + vec3 dp2perp = cross(dp2, n); > > > + vec3 dp1perp = cross(n, dp1); > > > + vec3 t = dp2perp * duv1.x + dp1perp * duv2.x; > > > + vec3 b = dp2perp * duv1.y + dp1perp * duv2.y; > > > + float invmax = inversesqrt(max(dot(t, t), dot(b, b))); > > > + return mat3(t * invmax, b * invmax, n); > > > +} > > > + > > > +vec3 perturb_normal(vec3 normal) > > > +{ > > > + mat3 tbn = cotangent_frame(vNormal, -vEyeVector, vTexCoord); > > > + return normalize(tbn * normal); > > > +} > > > +#endif //VERTEX_TANGENT > > > + > > > +void fragmentNormalMap() > > > +{ > > > + float factor; > > > + vec3 normal; > > > + vec4 color; > > > + > > > +#ifdef NORMAL_TEXTURE_BLEND > > > + normal = texture2D(uTextureNormal0, vTexCoord).rgb * > uTextureNormalWeight; > > > + normal += texture2D(uTextureNormal1, vTexCoord).rgb * > > > + (1.0 - uTextureNormalWeight); > > > +#else > > > + normal = texture2D(uTextureNormal0, vTexCoord).rgb; > > > +#endif //NORMAL_TEXTURE_BLEND > > > + > > > + normal = 2.0 * normal - 1.0; > > > + > > > +#ifndef VERTEX_TANGENT > > > + normal = perturb_normal(normal); > > > +#endif //VERTEX_TANGENT > > > + > > > + vec3 lv = normalize(vLightVector); > > > + normal = normalize(normal); > > > + > > > + factor = dot(lv, normal); > > > + > > > +#ifdef LIGHT_SPOT > > > + float f = dot(-lv, normalize(uLightSpotDir)); > > > + > > > + if (f > uLightSpotCutoffCos) > > > + factor *= pow(f, uLightSpotExp); > > > + else > > > + factor = 0.0; > > > +#endif //LIGHT_SPOT > > > + > > > + if (factor > 0.0) > > > + { > > > + > > > +#ifdef DIFFUSE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > + color = texture2D(uTextureDiffuse0, vTexCoord) * > uTextureDiffuseWeight + > > > + texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight); > > > +#else > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > + color = texture2D(uTextureDiffuse0, vTexCoord); > > > +#else > > > + color = uMaterialDiffuse; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > + gl_FragColor = uLightDiffuse * color * factor; > > > + > > > +#else > > > + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > + > > > + factor = dot(normalize(vLightHalfVector), normal); > > > + if (factor > 0.0) > > > + { > > > + factor = pow(factor, uMaterialShininess); > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > + color = texture2D(uTextureSpecular0, vTexCoord) * > uTextureSpecularWeight + > > > + texture2D(uTextureSpecular1, vTexCoord) * (1.0 - > uTextureSpecularWeight); > > > +#else > > > +#ifdef SPECULAR_TEXTURE > > > + color = texture2D(uTextureSpecular0, vTexCoord); > > > +#else > > > + color = uMaterialSpecular; > > > +#endif //SPECULAR_TEXTURE > > > + > > > +#endif //SPECULAR_TEXTURE_BLEND > > > + > > > + gl_FragColor += uLightSpecular * color * factor; > > > + } > > > + > > > +#endif //SPECULAR > > > + > > > +#ifdef SHADOWED > > > + gl_FragColor *= shadow; > > > +#endif //SHADOWED > > > + > > > + } > > > + else > > > + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); > > > + > > > +#ifdef AMBIENT > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > + color = texture2D(uTextureAmbient0, vTexCoord) * > uTextureAmbientWeight + > > > + texture2D(uTextureAmbient1, vTexCoord) * (1.0 - > uTextureAmbientWeight); > > > +#else > > > + > > > +#ifdef AMBIENT_TEXTURE > > > + color = texture2D(uTextureAmbient0, vTexCoord); > > > +#else > > > + color = uMaterialAmbient; > > > +#endif //AMBIENT_TEXTURE > > > + > > > +#endif //AMBIENT_TEXTURE_BLEND > > > + > > > + gl_FragColor += uLightAmbient * color; > > > +#endif //AMBIENT > > > + > > > +#ifdef LIGHT_ATTENUATION > > > + gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * > vLightDist)); > > > +#endif //LIGHT_ATTENUATION > > > + > > > +#ifdef EMISSION > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > + color = texture2D(uTextureEmission0, vTexCoord) * > uTextureEmissionWeight + > > > + texture2D(uTextureEmission1, vTexCoord) * (1.0 - > uTextureEmissionWeight); > > > +#else > > > + > > > +#ifdef EMISSION_TEXTURE > > > + color = texture2D(uTextureEmission0, vTexCoord); > > > +#else > > > + color = uMaterialEmission; > > > +#endif //EMISSION_TEXTURE > > > + > > > +#endif //EMISSION_TEXTURE_BLEND > > > + > > > + gl_FragColor += color; > > > +#endif //EMISSION > > > + > > > +} > > > + > > > +#ifdef SHADOWED > > > +float pcf(vec4 lpos, float size) > > > +{ > > > + vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5; > > > + float i, j, randx, randy, shadow; > > > + shadow = 0.0; > > > + for (i = -4.0; i < 4.0; i++) > > > + 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; > > > +} > > > +#endif //SHADOWED > > > + > > > +void main() { > > > + > > > +#ifdef SHADOWED > > > + shadow = pcf(vLightPosition, 1.0 / 200.0); > > > +#endif //SHADOWED > > > + > > > + fragmentNormalMap(); > > > + > > > +#ifdef FOG_ENABLED > > > + float z = gl_FragCoord.z / gl_FragCoord.w; > > > + float fogFactor = exp2( -uFogFactor * uFogFactor * z * z * 1.44); > > > + fogFactor = clamp(fogFactor, 0.0, 1.0); > > > + gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor); > > > +#endif //FOG_ENABLED > > > + > > > +} > > > + > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd > > > new file mode 100644 > > > index 0000000..3dc42d2 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/normal_map_vert.shd > > > @@ -0,0 +1,189 @@ > > > +uniform mat4 uMatrixMvp; > > > +uniform mat3 uMatrixNormal; > > > +uniform mat4 uMatrixModelview; > > > +uniform vec4 uLightPosition; > > > +varying vec3 vLightVector; > > > +varying vec3 vLightHalfVector; > > > +varying vec3 vEyeVector; > > > + > > > +#ifndef VERTEX_TANGENT > > > +varying vec3 vNormal; > > > +#endif //VERTEX_TANGENT > > > + > > > +#ifdef SHADOWED > > > +uniform mat4 uMatrixLight; > > > +varying vec4 vLightPosition; > > > +#endif //SHADOWED > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL > > > +attribute vec4 aNormal0; > > > +#endif //VERTEX_NORMAL > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > +attribute vec4 aNormal1; > > > +uniform float uNormalWeight; > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TANGENT > > > +attribute vec4 aTangent0; > > > +#endif //VERTEX_TANGENT > > > + > > > +#ifdef VERTEX_TANGENT_BLEND > > > +attribute vec4 aTangent1; > > > +uniform float uTangentWeight; > > > +#endif //VERTEX_TANGENT_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD > > > +attribute vec4 aTexCoord0; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > +attribute vec4 aTexCoord1; > > > +uniform float uTexCoordWeight; > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //NEED_TEX_COORD > > > + > > > +#ifdef LIGHT_ATTENUATION > > > +varying float vLightDist; > > > +#endif //LIGHT_ATTENUATION > > > + > > > +#ifndef VERTEX_TANGENT > > > +void vertexNormalMap(vec4 position, vec3 normal) > > > +{ > > > + normal = uMatrixNormal * normal; > > > + position = uMatrixModelview * position; > > > + vEyeVector = normalize(-position.xyz); > > > + > > > +#ifdef NORMALIZE_NORMALS > > > + normal = normalize(normal); > > > +#endif //NORMALIZE_NORMALS > > > + > > > +#ifdef LIGHT_DIRECTIONAL > > > + vLightVector = uLightPosition.xyz; > > > +#else > > > + vLightVector = uLightPosition.xyz - position.xyz; > > > + > > > +#ifdef LIGHT_ATTENUATION > > > + vLightDist = length(vLightVector); > > > +#endif //LIGHT_ATTENUATION > > > + > > > + vLightVector = normalize(vLightVector); > > > +#endif //LIGHT_DIRECTIONAL > > > + > > > + vLightHalfVector = normalize(vEyeVector + vLightVector); > > > + vNormal = normal; > > > +} > > > + > > > +#else > > > + > > > +void vertexNormalMap(vec4 position, vec3 normal, vec3 tangent) > > > +{ > > > + vec3 n = normalize(uMatrixNormal * normal); > > > + vec3 t = normalize(uMatrixNormal * tangent); > > > + vec3 b = cross(n, t); > > > + vec3 tmp; > > > + > > > + position = uMatrixModelview * position; > > > + > > > +#ifdef LIGHT_DIRECTIONAL > > > + vec3 lightDir = uLightPosition.xyz; > > > +#else > > > + vec3 lightDir = uLightPosition.xyz - position.xyz; > > > + > > > +#ifdef LIGHT_ATTENUATION > > > + vLightDist = length(lightDir); > > > +#endif //LIGHT_ATTENUATION > > > + > > > + lightDir = normalize(lightDir); > > > +#endif //LIGHT_DIRECTIONAL > > > + > > > + tmp.x = dot(lightDir, t); > > > + tmp.y = dot(lightDir, b); > > > + tmp.z = dot(lightDir, n); > > > + vLightVector = tmp; > > > + > > > + tmp.x = dot(position.xyz, t); > > > + tmp.y = dot(position.xyz, b); > > > + tmp.z = dot(position.xyz, n); > > > + vEyeVector = normalize(tmp); > > > + > > > + vec3 hv = normalize(normalize(-position.xyz) + lightDir); > > > + tmp.x = dot(hv, t); > > > + tmp.y = dot(hv, b); > > > + tmp.z = dot(hv, n); > > > + vLightHalfVector = tmp; > > > +} > > > +#endif //VERTEX_TANGENT > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > + vec3 normal = aNormal0.xyz * uNormalWeight + > > > + aNormal1.xyz * (1.0 - uNormalWeight); > > > +#else > > > + > > > +#ifdef VERTEX_NORMAL > > > + vec3 normal = aNormal0.xyz; > > > +#endif //VERTEX_NORMAL > > > + > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TANGENT_BLEND > > > + vec3 tangent = aTangent0.xyz * uTangentWeight + > > > + aTangent1.xyz * (1.0 - uTangentWeight); > > > +#else > > > + > > > +#ifdef VERTEX_TANGENT > > > + vec3 tangent = aTangent0.xyz; > > > +#endif //VERTEX_TANGENT > > > + > > > +#endif //VERTEX_TANGENT_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > + vTexCoord = aTexCoord0.st * uTexCoordWeight + > > > + aTexCoord1.st * (1.0 - uTexCoordWeight); > > > +#else > > > + > > > +#ifdef VERTEX_TEXCOORD > > > + vTexCoord = aTexCoord0.st; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > + > > > +#ifdef VERTEX_TANGENT > > > + vertexNormalMap(position, normal, tangent); > > > +#else > > > + vertexNormalMap(position, normal); > > > +#endif //VERTEX_TANGENT > > > + > > > +#ifdef SHADOWED > > > + vLightPosition = uMatrixLight * position; > > > +#endif > > > +} > > > 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 > > > new file mode 100644 > > > index 0000000..f668984 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/phong_frag.shd > > > @@ -0,0 +1,235 @@ > > > +varying vec3 vLightVector; > > > +varying vec3 vLightHalfVector; > > > +varying vec3 vNormal; > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //TEX_COORD > > > + > > > +#ifdef FOG_ENABLED > > > +uniform float uFogFactor; > > > +uniform vec4 uFogColor; > > > +#endif //FOG_ENABLED > > > + > > > +#ifdef SHADOWED > > > +varying vec4 vLightPosition; > > > +uniform sampler2D uShadowMap; > > > +float shadow; > > > +#endif //SHADOWED > > > + > > > +#ifdef DIFFUSE > > > +uniform vec4 uMaterialDiffuse; > > > +uniform vec4 uLightDiffuse; > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > +uniform sampler2D uTextureDiffuse0; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > +uniform sampler2D uTextureDiffuse1; > > > +uniform float uTextureDiffuseWeight; > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > +#endif //DIFFUSE > > > + > > > +#ifdef SPECULAR > > > +uniform vec4 uLightSpecular; > > > +uniform float uMaterialShininess; > > > +uniform vec4 uMaterialSpecular; > > > + > > > +#ifdef SPECULAR_TEXTURE > > > +uniform sampler2D uTextureSpecular0; > > > +#endif //SPECULAR_TEXTURE > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > +uniform sampler2D uTextureSpecular1; > > > +uniform float uTextureSpecularWeight; > > > +#endif //SPECULAR_TEXTURE_BLEND > > > + > > > +#endif //SPECULAR > > > + > > > +#ifdef AMBIENT > > > +uniform vec4 uMaterialAmbient; > > > +uniform vec4 uLightAmbient; > > > + > > > +#ifdef AMBIENT_TEXTURE > > > +uniform sampler2D uTextureAmbient0; > > > +#endif //AMBIENT_TEXTURE > > > + > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > +uniform sampler2D uTextureAmbient1; > > > +uniform float uTextureAmbientWeight; > > > +#endif //AMBIENT_TEXTURE_BLEND > > > + > > > +#endif //AMBIENT > > > + > > > +#ifdef EMISSION > > > +uniform vec4 uMaterialEmission; > > > + > > > +#ifdef EMISSION_TEXTURE > > > +uniform sampler2D uTextureEmission0; > > > +#endif //EMISSION_TEXTURE > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > +uniform sampler2D uTextureEmission1; > > > +uniform float uTextureEmissionWeight; > > > +#endif //EMISSION_TEXTURE_BLEND > > > + > > > +#endif //EMISSION > > > + > > > +#ifdef LIGHT_SPOT > > > +uniform vec3 uLightSpotDir; > > > +uniform float uLightSpotExp; > > > +uniform float uLightSpotCutoffCos; > > > +#endif //LIGHT_SPOT > > > + > > > +#ifdef LIGHT_ATTENUATION > > > +varying float vLightDist; > > > +#endif //LIGHT_ATTENUATION > > > + > > > +void fragmentPhong() > > > +{ > > > + vec3 normal = normalize(vNormal); > > > + vec3 lv = normalize(vLightVector); > > > + float factor = dot(lv, normal); > > > + vec4 color; > > > + > > > +#ifdef LIGHT_SPOT > > > + float f = dot(-lv, normalize(uLightSpotDir)); > > > + > > > + if (f > uLightSpotCutoffCos) > > > + factor *= pow(f, uLightSpotExp); > > > + else > > > + factor = 0.0; > > > +#endif //LIGHT_SPOT > > > + > > > + if (factor > 0.0) > > > + { > > > + > > > + /* Diffuse term. */ > > > +#ifdef DIFFUSE > > > + > > > +#ifdef DIFFUSE_TEXTURE_BLEND > > > + color = texture2D(uTextureDiffuse0, vTexCoord) * > uTextureDiffuseWeight + > > > + texture2D(uTextureDiffuse1, vTexCoord) * (1.0 - > uTextureDiffuseWeight); > > > +#else > > > + > > > +#ifdef DIFFUSE_TEXTURE > > > + color = texture2D(uTextureDiffuse0, vTexCoord); > > > +#else > > > + color = uMaterialDiffuse; > > > +#endif //DIFFUSE_TEXTURE > > > + > > > +#endif //DIFFUSE_TEXTURE_BLEND > > > + > > > + gl_FragColor = uLightDiffuse * color * factor; > > > +#else > > > + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); > > > +#endif //DIFFUSE > > > + > > > + /* Specular term. */ > > > +#ifdef SPECULAR > > > + factor = dot(normalize(vLightHalfVector), normal); > > > + if (factor > 0.0) > > > + { > > > + factor = pow(factor, uMaterialShininess); > > > + > > > +#ifdef SPECULAR_TEXTURE_BLEND > > > + color = texture2D(uTextureSpecular0, vTexCoord) * > uTextureSpecularWeight + > > > + texture2D(uTextureSpecular1, vTexCoord) * (1.0 - > uTextureSpecularWeight); > > > +#else > > > + > > > +#ifdef SPECULAR_TEXTURE > > > + color = texture2D(uTextureSpecular0, vTexCoord); > > > +#else > > > + color = uMaterialSpecular; > > > +#endif > > > + > > > +#endif > > > + > > > + gl_FragColor += uLightSpecular * color * factor; > > > + } > > > +#endif > > > + > > > + } > > > + else > > > + gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); > > > + > > > +#ifdef SHADOWED > > > + gl_FragColor *= shadow; > > > +#endif //SHADOWED > > > + > > > +#ifdef AMBIENT > > > +#ifdef AMBIENT_TEXTURE_BLEND > > > + color = texture2D(uTextureAmbient0, vTexCoord) * > uTextureAmbientWeight + > > > + texture2D(uTextureAmbient1, vTexCoord) * (1.0 - > uTextureAmbientWeight); > > > +#else > > > + > > > +#ifdef AMBIENT_TEXTURE > > > + color = texture2D(uTextureAmbient0, vTexCoord); > > > +#else > > > + color = uMaterialAmbient; > > > +#endif > > > + > > > +#endif > > > + > > > + gl_FragColor += uLightAmbient * color; > > > +#endif > > > + > > > + /* Light attenuation. */ > > > +#ifdef LIGHT_ATTENUATION > > > + gl_FragColor /= dot(uLightAtten, vec3(1.0, vLightDist, vLightDist * > vLightDist)); > > > +#endif > > > + > > > + /* Emission term. */ > > > +#ifdef EMISSION > > > + > > > +#ifdef EMISSION_TEXTURE_BLEND > > > + color = texture2D(uTextureEmission0, vTexCoord) * > uTextureEmissionWeight + > > > + texture2D(uTextureEmission1, vTexCoord) * (1.0 - > uTextureEmissionWeight); > > > +#else > > > + > > > +#ifdef EMISSION_TEXTURE > > > + color = texture2D(uTextureEmission0, vTexCoord); > > > +#else > > > + color = uMaterialEmission; > > > +#endif > > > + > > > +#endif > > > + > > > + gl_FragColor += color; > > > +#endif > > > + > > > +} > > > + > > > +#ifdef SHADOWED > > > +float pcf(vec4 lpos, float size) > > > +{ > > > + vec3 smcoord = lpos.xyz / lpos.w * 0.5 + 0.5; > > > + float i, j, randx, randy, shadow; > > > + shadow = 0.0; > > > + for (i = -4.0; i < 4.0; i++) > > > + 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; > > > +} > > > +#endif //SHADOWED > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef SHADOWED > > > + shadow = pcf(vLightPosition, 1.0 / 300.0); > > > +#endif //SHADOWED > > > + > > > + fragmentPhong(); > > > + > > > +#ifdef FOG_ENABLED > > > + float z = gl_FragCoord.z / gl_FragCoord.w; > > > + float fogFactor = exp2( -uFogFactor * uFogFactor * z * z * 1.44); > > > + fogFactor = clamp(fogFactor, 0.0, 1.0); > > > + gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor); > > > +#endif //FOG_ENABLED > > > + > > > +} > > > + > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd > > > new file mode 100644 > > > index 0000000..fb2c5d4 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/phong_vert.shd > > > @@ -0,0 +1,116 @@ > > > +uniform mat4 uMatrixMvp; > > > +uniform mat3 uMatrixNormal; > > > +uniform mat4 uMatrixModelview; > > > +uniform vec4 uLightPosition; > > > +varying vec3 vLightVector; > > > +varying vec3 vLightHalfVector; > > > +varying vec3 vNormal; > > > + > > > +#ifdef SHADOWED > > > +uniform mat4 uMatrixLight; > > > +varying vec4 vLightPosition; > > > +#endif //SHADOWED > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL > > > +attribute vec4 aNormal0; > > > +#endif //VERTEX_NORMAL > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > +attribute vec4 aNormal1; > > > +uniform float uNormalWeight; > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD > > > +attribute vec4 aTexCoord0; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > +attribute vec4 aTexCoord1; > > > +uniform float uTexCoordWeight; > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > +#ifdef NEED_TEX_COORD > > > +varying vec2 vTexCoord; > > > +#endif //NEED_TEX_COORD > > > + > > > +#ifdef LIGHT_ATTENUATION > > > +varying float vLightDist; > > > +#endif //LIGHT_ATTENUATION > > > + > > > +void vertexPhong(vec4 position, vec3 normal) > > > +{ > > > + normal = uMatrixNormal * normal; > > > + position = uMatrixModelview * position; > > > + > > > +#ifdef NORMALIZE_NORMALS > > > + normal = normalize(normal); > > > +#endif //NORMALIZE_NORMALS > > > + > > > +#ifdef LIGHT_DIRECTIONAL > > > + vLightVector = uLightPosition.xyz; > > > +#else > > > + vLightVector = uLightPosition.xyz - position.xyz; > > > + > > > +#ifdef LIGHT_ATTENUATION > > > + vLightDist = length(vLightVector); > > > +#endif //LIGHT_ATTENUATION > > > + > > > + vLightVector = normalize(vLightVector); > > > +#endif //LIGHT_DIRECTIONAL > > > + > > > + vLightHalfVector = normalize(normalize(-position.xyz) + > vLightVector); > > > + vNormal = normal; > > > +} > > > + > > > +void main() { > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_NORMAL_BLEND > > > + vec3 normal = aNormal0.xyz * uNormalWeight + > > > + aNormal1.xyz * (1.0 - uNormalWeight); > > > +#else > > > + > > > +#ifdef VERTEX_NORMAL > > > + vec3 normal = aNormal0.xyz; > > > +#endif //VERTEX_NORMAL > > > + > > > +#endif //VERTEX_NORMAL_BLEND > > > + > > > +#ifdef VERTEX_TEXCOORD_BLEND > > > + vTexCoord = aTexCoord0.st * uTexCoordWeight + > > > + aTexCoord1.st * (1.0 - uTexCoordWeight); > > > +#else > > > + > > > +#ifdef VERTEX_TEXCOORD > > > + vTexCoord = aTexCoord0.st; > > > +#endif //VERTEX_TEXCOORD > > > + > > > +#endif //VERTEX_TEXCOORD_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > + vertexPhong(position, normal); > > > + > > > +#ifdef SHADOWED > > > + vLightPosition = uMatrixLight * position; > > > +#endif //SHADOWED > > > +} > > > 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 > > > new file mode 100644 > > > index 0000000..84a586a > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd > > > @@ -0,0 +1,4 @@ > > > +void main() > > > +{ > > > + gl_FragColor.r = gl_FragCoord.z; > > > +} > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd > > > new file mode 100644 > > > index 0000000..3f12a69 > > > --- /dev/null > > > +++ b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_vert.shd > > > @@ -0,0 +1,28 @@ > > > +uniform mat4 uMatrixMvp; > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > + gl_Position = uMatrixMvp * position; > > > +} > > > 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 > > > new file mode 100644 > > > index 0000000..9b0c023 > > > --- /dev/null > > > +++ > b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_frag.shd > > > @@ -0,0 +1,20 @@ > > > +varying vec4 vColor; > > > + > > > +#ifdef FOG_ENABLED > > > +uniform float uFogFactor; > > > +uniform vec4 uFogColor; > > > +#endif //FOG_ENABLED > > > + > > > +void main() > > > +{ > > > + gl_FragColor = vColor; > > > + > > > +#ifdef FOG_ENABLED > > > + float z = gl_FragCoord.z / gl_FragCoord.w; > > > + float fogFactor = exp2( -uFogFactor * uFogFactor * z * z * 1.44); > > > + fogFactor = clamp(fogFactor, 0.0, 1.0); > > > + gl_FragColor = mix(uFogColor, gl_FragColor, fogFactor); > > > +#endif //FOG_ENABLED > > > + > > > +} > > > + > > > diff --git > a/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd > b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd > > > new file mode 100644 > > > index 0000000..560baad > > > --- /dev/null > > > +++ > b/src/modules/evas/engines/gl_common/shader_3d/vertex_color_vert.shd > > > @@ -0,0 +1,50 @@ > > > +uniform mat4 uMatrixMvp; > > > +varying vec4 vColor; > > > + > > > +#ifdef VERTEX_POSITION > > > +attribute vec4 aPosition0; > > > +#endif //VERTEX_POSITION > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > +attribute vec4 aPosition1; > > > +uniform float uPositionWeight; > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_COLOR > > > +attribute vec4 aColor0; > > > +#endif //VERTEX_COLOR > > > + > > > +#ifdef VERTEX_COLOR_BLEND > > > +attribute vec4 aColor1; > > > +uniform float uColorWeight; > > > +#endif //VERTEX_COLOR_BLEND > > > + > > > +void main() > > > +{ > > > + > > > +#ifdef VERTEX_POSITION_BLEND > > > + vec4 position = aPosition0 * uPositionWeight + > > > + aPosition1 * (1.0 - uPositionWeight); > > > + position = vec4(position.xyz, 1.0); > > > +#else > > > + > > > +#ifdef VERTEX_POSITION > > > + vec4 position = vec4(aPosition0.xyz, 1.0); > > > +#endif // VERTEX_POSITION > > > + > > > +#endif //VERTEX_POSITION_BLEND > > > + > > > +#ifdef VERTEX_COLOR_BLEND > > > + vec4 color = aColor0 * uColorWeight + aColor1 * (1.0 - > uColorWeight); > > > +#else > > > + > > > +#ifdef VERTEX_COLOR > > > + vec4 color = aColor0; > > > +#endif //VERTEX_COLOR > > > + > > > +#endif //VERTEX_COLOR_BLEND > > > + > > > + vColor = color; > > > + gl_Position = uMatrixMvp * position; > > > +} > > > + > > > > > > > > > ---------------------------------------------------------------------------- > -- > > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > > with Interactivity, Sharing, Native Excel Exports, App Integration & more > > Get technology previously reserved for billion-dollar corporations, FREE > > > > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > > _______________________________________________ > > enlightenment-devel mailing list > > enlightenment-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > ---------------------------------------------------------------------------- > -- > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > with Interactivity, Sharing, Native Excel Exports, App Integration & more > Get technology previously reserved for billion-dollar corporations, FREE > > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > With best regards, > > Oleksander Shcherbina > > SRK-Tizen Platform Lab > > Samsung Ukraine R&D Institute > > 57 L'va Tolstogo Str., Kyiv 01032, Ukraine > > Mob.: +380 (66) 1297544 > > o.shcherb...@samsung.com > > > > > [cid:LLKJ9INH0GAN@namo.co.kr] > > > [SeenTimeChecker?do=f39c14f5643c71c58d395db40ae9c4ecb541d7877385379628d6023d > > ffbae032ba777c355c197185c465c2cf80a2b7ef9aba4bb3b2b5ca43ddd7e184e0604d958075 > b6b33f32d245be7a12499853ada082afa00ff4b36e9acf878f9a26ce15a0] > ------------------------------------------------------------------------------ > Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server > from Actuate! Instantly Supercharge Your Business Reports and Dashboards > with Interactivity, Sharing, Native Excel Exports, App Integration & more > Get technology previously reserved for billion-dollar corporations, FREE > http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=190641631&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel