From 31651a88424744054c41b3544937991488f032ef Mon Sep 17 00:00:00 2001 From: Dmytro Dadyka Date: Wed, 18 Mar 2015 14:40:05 +0100 Subject: [PATCH] evas: Evas_3D - add alpha testing. Reviewers: Hermet, cedric Reviewed By: cedric Subscribers: Ievgen, cedric Differential Revision: https://phab.enlightenment.org/D2046 --- src/examples/evas/Makefile.am | 2 + src/examples/evas/evas-3d-shadows.c | 121 +++++++++++++----- src/examples/evas/resources/images/grid.png | Bin 0 -> 45870 bytes src/examples/evas/resources/images/grid_n.png | Bin 0 -> 51868 bytes src/lib/evas/Evas_Eo.h | 27 ++++ src/lib/evas/canvas/evas_3d_mesh.c | 37 ++++++ src/lib/evas/canvas/evas_3d_mesh.eo | 50 ++++++++ src/lib/evas/include/evas_private.h | 4 + .../evas/engines/gl_common/evas_gl_3d.c | 13 ++ .../engines/gl_common/evas_gl_3d_private.h | 9 +- .../engines/gl_common/evas_gl_3d_renderer.c | 35 ++++- .../engines/gl_common/evas_gl_3d_shader.c | 1 + .../gl_common/shader_3d/evas_gl_3d_shaders.x | 52 +++++++- .../gl_common/shader_3d/shadow_map_frag.shd | 43 ++++++- .../gl_common/shader_3d/shadow_map_vert.shd | 32 +++++ 15 files changed, 384 insertions(+), 42 deletions(-) create mode 100644 src/examples/evas/resources/images/grid.png create mode 100644 src/examples/evas/resources/images/grid_n.png diff --git a/src/examples/evas/Makefile.am b/src/examples/evas/Makefile.am index 98a4a7f831..5e27afa438 100644 --- a/src/examples/evas/Makefile.am +++ b/src/examples/evas/Makefile.am @@ -338,6 +338,8 @@ resources/images/wood.jpg \ resources/images/rocks.jpg \ resources/images/four_NM_height.tga \ resources/images/rocks_NM_height.tga \ +resources/images/grid.png \ +resources/images/grid_n.png \ resources/models/mesh_for_mmap.eet \ resources/models/mesh_for_mmap.md2 \ resources/models/mesh_for_mmap.obj \ diff --git a/src/examples/evas/evas-3d-shadows.c b/src/examples/evas/evas-3d-shadows.c index f58e8b8a7d..d53f435127 100644 --- a/src/examples/evas/evas-3d-shadows.c +++ b/src/examples/evas/evas-3d-shadows.c @@ -6,7 +6,7 @@ * @see evas_3d_object_callback_register * * @verbatim - * gcc -o gcc -o evas-3d-shadows evas-3d-shadows.c evas-3d-primitives.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm + * gcc -o evas-3d-shadows evas-3d-shadows.c evas-3d-primitives.c `pkg-config --libs --cflags efl evas ecore ecore-evas eo eina` -lm * @endverbatim */ @@ -37,8 +37,9 @@ #define SPECULAR_LIGHT 1.0, 1.0, 1.0 static const char *model_path = PACKAGE_EXAMPLES_DIR EVAS_MODEL_FOLDER "/sonic.md2"; -static const char *image_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png"; + static const vec2 tex_scale = {1, 1}; +static const vec2 fence_tex_scale = {80, 6}; Ecore_Evas *ecore_evas = NULL; Evas *evas = NULL; @@ -46,30 +47,6 @@ Eo *background = NULL; Eo *image = NULL; Evas_3D_Node *choosed_node = NULL; -typedef struct _Body_3D -{ - Eo *material; - Eo *mesh; - Eo *node; -} Body_3D; - -typedef struct _Scene_Data -{ - Eo *scene; - Eo *root_node; - Eo *camera_node; - Eo *camera; - Eo *light_node; - Eo *light; - - Body_3D sphere; - Body_3D cube; - Body_3D square; - Body_3D cylinder; - Body_3D model; - Body_3D cone; -} Scene_Data; - Eina_Bool _cb_clicked(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED, void *event_info) { @@ -107,6 +84,31 @@ _cb_collision(void *data EINA_UNUSED, Eo *obj EINA_UNUSED, const Eo_Event_Descri return EINA_TRUE; } +typedef struct _Body_3D +{ + Eo *material; + Eo *mesh; + Eo *node; +} Body_3D; + +typedef struct _Scene_Data +{ + Eo *scene; + Eo *root_node; + Eo *camera_node; + Eo *camera; + Eo *light_node; + Eo *light; + + Body_3D sphere; + Body_3D cube; + Body_3D square; + Body_3D cylinder; + Body_3D model; + Body_3D cone; + Body_3D fence; +} Scene_Data; + static void _show_help() { @@ -211,6 +213,51 @@ _cylinder_setup(Body_3D *cylinder) evas_3d_node_position_set(-2.0, 3.0, 1.0)); } +static void +_fence_setup(Body_3D *fence) +{ + + Eo *texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas); + eo_do(texture, + evas_3d_texture_file_set(PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/grid.png", NULL), + evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, + EVAS_3D_TEXTURE_FILTER_NEAREST), + evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, + EVAS_3D_WRAP_MODE_REPEAT)); + Eo *texture1 = eo_add(EVAS_3D_TEXTURE_CLASS, evas); + eo_do(texture1, + evas_3d_texture_file_set(PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/grid_n.png", NULL), + evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, + EVAS_3D_TEXTURE_FILTER_NEAREST), + evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, + EVAS_3D_WRAP_MODE_REPEAT)); + fence->material = eo_add(EVAS_3D_MATERIAL_CLASS, evas); + + eo_do(fence->material, + evas_3d_material_texture_set(EVAS_3D_MATERIAL_DIFFUSE, texture), + evas_3d_material_texture_set(EVAS_3D_MATERIAL_AMBIENT, texture), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_AMBIENT, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_DIFFUSE, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_SPECULAR, EINA_TRUE), + evas_3d_material_enable_set(EVAS_3D_MATERIAL_NORMAL, EINA_TRUE), + evas_3d_material_texture_set(EVAS_3D_MATERIAL_NORMAL, texture1), + evas_3d_material_shininess_set(100.0)); + fence->mesh = eo_add(EVAS_3D_MESH_CLASS, evas); + evas_3d_add_cylinder_frame(fence->mesh, 0, 50, fence_tex_scale); + + eo_do(fence->mesh, + evas_3d_mesh_frame_material_set(0, fence->material), + evas_3d_mesh_alpha_func_set(EVAS_3D_COMPARISON_GREATER, 0), + evas_3d_mesh_alpha_test_enable_set(EINA_TRUE), + evas_3d_mesh_shade_mode_set(EVAS_3D_SHADE_MODE_NORMAL_MAP)); + fence->node = + eo_add(EVAS_3D_NODE_CLASS, evas, + evas_3d_node_constructor(EVAS_3D_NODE_TYPE_MESH)); + eo_do(fence->node, evas_3d_node_mesh_add(fence->mesh), + evas_3d_node_scale_set(7.0, 3.0, 7.0), + evas_3d_node_position_set(0.0, 0.5, -5.0)); +} + static void _square_setup(Body_3D *square) { @@ -247,7 +294,7 @@ _model_setup(Body_3D *model) { Eo *texture = eo_add(EVAS_3D_TEXTURE_CLASS, evas); eo_do(texture, - evas_3d_texture_file_set(image_path, NULL), + evas_3d_texture_file_set(PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/sonic.png", NULL), evas_3d_texture_filter_set(EVAS_3D_TEXTURE_FILTER_NEAREST, EVAS_3D_TEXTURE_FILTER_NEAREST), evas_3d_texture_wrap_set(EVAS_3D_WRAP_MODE_REPEAT, @@ -307,7 +354,8 @@ _light_setup(Scene_Data *data) evas_3d_light_ambient_set(AMBIENT_LIGHT, 1.0), evas_3d_light_diffuse_set(DIFFUSE_LIGHT, 1.0), evas_3d_light_specular_set(SPECULAR_LIGHT, 1.0), - evas_3d_light_projection_perspective_set(45.0, 1.0, 2.0, 1000.0)); + evas_3d_light_spot_cutoff_set(20), + evas_3d_light_projection_perspective_set(40.0, 1.0, 2.0, 1000.0)); data->light_node = eo_add(EVAS_3D_NODE_CLASS, evas, @@ -315,7 +363,7 @@ _light_setup(Scene_Data *data) eo_do(data->light_node, evas_3d_node_light_set(data->light), evas_3d_node_position_set(50.0, 50.0, 20.0), - evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 0.0, 0.0, 20.0, + evas_3d_node_look_at_set(EVAS_3D_SPACE_PARENT, 15.0, 0.0, -5.0, EVAS_3D_SPACE_PARENT, 0.0, 0.0, 1.0)); eo_do(data->root_node, evas_3d_node_member_add(data->light_node)); } @@ -343,13 +391,16 @@ _scene_setup(Scene_Data *data) _square_setup(&data->square); _model_setup(&data->model); _cone_setup(&data->cone); + _fence_setup(&data->fence); - eo_do(data->root_node, evas_3d_node_member_add(data->sphere.node)); - eo_do(data->root_node, evas_3d_node_member_add(data->cube.node)); - eo_do(data->root_node, evas_3d_node_member_add(data->cylinder.node)); - eo_do(data->root_node, evas_3d_node_member_add(data->square.node)); - eo_do(data->root_node, evas_3d_node_member_add(data->model.node)); - eo_do(data->root_node, evas_3d_node_member_add(data->cone.node)); + eo_do(data->root_node, + evas_3d_node_member_add(data->sphere.node), + evas_3d_node_member_add(data->cube.node), + evas_3d_node_member_add(data->cylinder.node), + evas_3d_node_member_add(data->square.node), + evas_3d_node_member_add(data->model.node), + evas_3d_node_member_add(data->cone.node), + evas_3d_node_member_add(data->fence.node)); eo_do(data->scene, evas_3d_scene_root_node_set(data->root_node), diff --git a/src/examples/evas/resources/images/grid.png b/src/examples/evas/resources/images/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..60d103629df6f3f6c2fdd4b075d85e5d716c16f5 GIT binary patch literal 45870 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 literal 0 HcmV?d00001 diff --git a/src/examples/evas/resources/images/grid_n.png b/src/examples/evas/resources/images/grid_n.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9236ef30c209626000bec2643318dbe3bdf1cb GIT binary patch literal 51868 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 literal 0 HcmV?d00001 diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h index f82dbed26d..34ab6a486b 100644 --- a/src/lib/evas/Evas_Eo.h +++ b/src/lib/evas/Evas_Eo.h @@ -488,6 +488,7 @@ typedef enum _Evas_3D_State EVAS_3D_STATE_MESH_SHADE_MODE, EVAS_3D_STATE_MESH_FOG, EVAS_3D_STATE_MESH_BLENDING, + EVAS_3D_STATE_MESH_ALPHA_TEST, EVAS_3D_STATE_MESH_COLOR_PICK, EVAS_3D_STATE_CAMERA_PROJECTION = 1, @@ -669,6 +670,32 @@ typedef enum _Evas_3D_Blend_Func EVAS_3D_BLEND_SRC_ALPHA_SATURATE, } Evas_3D_Blend_Func; +/** + * Comparsion functions for testing(alpha, depth, stencil) in fragment shader. + * + * @since 1.14 + * @ingroup Evas_3D_Types + */ +typedef enum _Evas_3D_Comparison +{ + /**< Never passes.*/ + EVAS_3D_COMPARISON_NEVER, + /**< Passes if the incoming value is less than the reference value.*/ + EVAS_3D_COMPARISON_LESS, + /**< Passes if the incoming value is equal to the reference value.*/ + EVAS_3D_COMPARISON_EQUAL, + /**< Passes if the incoming value is less than or equal to the reference value.*/ + EVAS_3D_COMPARISON_LEQUAL, + /**< Passes if the incoming value is greater than the reference value.*/ + EVAS_3D_COMPARISON_GREATER, + /**< Passes if the incoming value is not equal to the reference value.*/ + EVAS_3D_COMPARISON_NOTEQUAL, + /**< Passes if the incoming value is greater than or equal to the reference value.*/ + EVAS_3D_COMPARISON_GEQUAL, + /**< Always passes (initial value).*/ + EVAS_3D_COMPARISON_ALWAYS, +} Evas_3D_Comparison; + /** * Color formats of pixel data * diff --git a/src/lib/evas/canvas/evas_3d_mesh.c b/src/lib/evas/canvas/evas_3d_mesh.c index 5e6253f7d3..52a71f2d66 100644 --- a/src/lib/evas/canvas/evas_3d_mesh.c +++ b/src/lib/evas/canvas/evas_3d_mesh.c @@ -121,6 +121,10 @@ _mesh_init(Evas_3D_Mesh_Data *pd) pd->blend_dfactor = EVAS_3D_BLEND_ZERO; pd->blending = EINA_FALSE; + pd->alpha_comparison = EVAS_3D_COMPARISON_ALWAYS; + pd->alpha_ref_value = 0.0f; + pd->alpha_test_enabled = EINA_FALSE; + pd->color_pick_key = -1.0; pd->color_pick_enabled = EINA_FALSE; } @@ -803,6 +807,39 @@ _evas_3d_mesh_blending_func_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd, if (dfactor) *dfactor = pd->blend_dfactor; } +EOLIAN static void +_evas_3d_mesh_alpha_func_set(Eo *obj, Evas_3D_Mesh_Data *pd, Evas_3D_Comparison comparison, + Evas_Real ref_value) +{ + if (pd->alpha_comparison == comparison && pd->alpha_ref_value == ref_value) + return; + pd->alpha_comparison = comparison; + pd->alpha_ref_value = ref_value; + eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_ALPHA_TEST, NULL)); +} + +EOLIAN static void +_evas_3d_mesh_alpha_func_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd, + Evas_3D_Comparison *comparison, + Evas_Real *ref_value) +{ + if (comparison) *comparison = pd->alpha_comparison; + if (ref_value) *ref_value = pd->alpha_ref_value; +} + +EOLIAN static void +_evas_3d_mesh_alpha_test_enable_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_Bool enabled) +{ + pd->alpha_test_enabled = enabled; + eo_do(obj, evas_3d_object_change(EVAS_3D_STATE_MESH_ALPHA_TEST, NULL)); +} + +EOLIAN static Eina_Bool +_evas_3d_mesh_alpha_test_enable_get(Eo *obj EINA_UNUSED, Evas_3D_Mesh_Data *pd) +{ + return pd->alpha_test_enabled; +} + EOLIAN static void _evas_3d_mesh_mmap_set(Eo *obj, Evas_3D_Mesh_Data *pd, Eina_File *file, const char *key EINA_UNUSED) diff --git a/src/lib/evas/canvas/evas_3d_mesh.eo b/src/lib/evas/canvas/evas_3d_mesh.eo index 7965cd647d..784f91a257 100644 --- a/src/lib/evas/canvas/evas_3d_mesh.eo +++ b/src/lib/evas/canvas/evas_3d_mesh.eo @@ -402,6 +402,56 @@ class Evas_3D_Mesh (Evas_3D_Object, Evas.Common_Interface, Efl.File) Eina_Bool enabled; /*@ Fog enabled status.*/ } } + + alpha_test_enable { + set { + /** + * Get the enable status of alpha test for given mesh + * + * Default alpha test disabled. + * + * @ingroup Evas_3D_Mesh + */ + } + get { + /** + * Get the enable status of alpha test for given mesh + * + * @see alpha_test_enable_set() + * + * @ingroup Evas_3D_Mesh + */ + } + values { + Eina_Bool enabled; /*@ Alpha test status.*/ + } + } + + alpha_func { + set { + /* + * The alpha test discards fragments depending on the outcome of a comparison + * between an incoming fragment's alpha value and a constant reference value + * This func specifies the reference value and the comparison function. + * + * @ingroup Evas_3D_Mesh + */ + } + get { + /* + * Get the reference value and the comparison function for alpha testing + * + * @see eavs_3d_mesh_alpha_test_param_set() + * + * @ingroup Evas_3D_Mesh + */ + } + values { + Evas_3D_Comparison comparison_func; /*@ Specifies the alpha comparison function.*/ + Evas_Real ref_value; /*@ Specifies the reference value that incoming alpha values are compared to.*/ + } + } + blending_enable { set { /** diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 7471ae6a42..a3f06e1dae 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -344,6 +344,10 @@ struct _Evas_3D_Mesh Evas_3D_Blend_Func blend_sfactor; Evas_3D_Blend_Func blend_dfactor; + Evas_3D_Comparison alpha_comparison; + Evas_Real alpha_ref_value; + Eina_Bool alpha_test_enabled :1; + Evas_Color fog_color; Eina_Bool fog_enabled :1; 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 9e7dfd02f8..6ee269721f 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_3d.c +++ b/src/modules/evas/engines/gl_common/evas_gl_3d.c @@ -1142,6 +1142,8 @@ _mesh_draw_data_build(E3D_Draw_Data *data, data->flags |= E3D_SHADER_FLAG_FOG_ENABLED; data->fog_color = pdmesh->fog_color; } + if (pdmesh->alpha_test_enabled) + data->flags |= E3D_SHADER_FLAG_ALPHA_TEST_ENABLED; if (pdmesh->shadowed) data->flags |= E3D_SHADER_FLAG_SHADOWED; @@ -1149,6 +1151,10 @@ _mesh_draw_data_build(E3D_Draw_Data *data, if (pdmesh->color_pick_enabled) data->color_pick_key = pdmesh->color_pick_key; + data->alpha_comparison = pdmesh->alpha_comparison; + data->alpha_ref_value = pdmesh->alpha_ref_value; + data->alpha_test_enabled =pdmesh->alpha_test_enabled; + data->blending = pdmesh->blending; data->blend_sfactor = pdmesh->blend_sfactor; data->blend_dfactor = pdmesh->blend_dfactor; @@ -1184,6 +1190,13 @@ _mesh_draw_data_build(E3D_Draw_Data *data, else if (pdmesh->shade_mode == EVAS_3D_SHADE_MODE_SHADOW_MAP_RENDER) { BUILD(vertex_attrib, VERTEX_POSITION, EINA_TRUE); + if (pdmesh->alpha_test_enabled) + { + BUILD(material_texture, MATERIAL_DIFFUSE, EINA_FALSE); + + if (_flags_need_tex_coord(data->flags)) + BUILD(vertex_attrib, VERTEX_TEXCOORD, EINA_FALSE); + } } else if (pdmesh->shade_mode == EVAS_3D_SHADE_MODE_COLOR_PICK) { 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 78ddc429f0..948ec7ba37 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 @@ -37,8 +37,9 @@ typedef unsigned long E3D_Shader_Flag; #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 +#define E3D_SHADER_FLAG_ALPHA_TEST_ENABLED (1 << 29) +#define E3D_SHADER_FLAG_SHADOWED (1 << 30) +#define E3D_SHADER_FLAG_COUNT 31 static inline Eina_Bool _flags_need_tex_coord(E3D_Shader_Flag flags) @@ -90,6 +91,10 @@ struct _E3D_Draw_Data Evas_3D_Blend_Func blend_dfactor; Eina_Bool blending : 1; + Evas_3D_Comparison alpha_comparison; + Evas_Real alpha_ref_value; + Eina_Bool alpha_test_enabled :1; + struct { Evas_Vec4 position; Evas_Vec3 spot_dir; diff --git a/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c b/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c index f5228819fb..0c8410e08f 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c +++ b/src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c @@ -82,6 +82,32 @@ _gl_blend_func_get(Evas_3D_Blend_Func blend_func) } } +static inline GLenum +_gl_comparison_func_get(Evas_3D_Comparison comparison_func) +{ + switch (comparison_func) + { + case EVAS_3D_COMPARISON_NEVER: + return GL_NEVER; + case EVAS_3D_COMPARISON_LESS: + return GL_LESS; + case EVAS_3D_COMPARISON_EQUAL: + return GL_EQUAL; + case EVAS_3D_COMPARISON_LEQUAL: + return GL_LEQUAL; + case EVAS_3D_COMPARISON_GREATER: + return GL_GREATER; + case EVAS_3D_COMPARISON_NOTEQUAL: + return GL_NOTEQUAL; + case EVAS_3D_COMPARISON_GEQUAL: + return GL_GEQUAL; + case EVAS_3D_COMPARISON_ALWAYS: + return GL_ALWAYS; + default: + return GL_ALWAYS; + } +} + static inline void _renderer_vertex_attrib_array_enable(E3D_Renderer *renderer, int index) { @@ -284,7 +310,6 @@ e3d_renderer_draw(E3D_Renderer *renderer, E3D_Draw_Data *data) _renderer_program_use(renderer, program); e3d_program_uniform_upload(program, data); - if (data->mode != EVAS_3D_SHADE_MODE_SHADOW_MAP_RENDER) _renderer_texture_bind(renderer, data); /* Set up vertex attrib pointers. */ @@ -323,6 +348,14 @@ e3d_renderer_draw(E3D_Renderer *renderer, E3D_Draw_Data *data) } else glDisable(GL_BLEND); + if (data->alpha_test_enabled) + { + glEnable(GL_ALPHA_TEST); + glAlphaFunc(_gl_comparison_func_get(data->alpha_comparison), + (GLclampf)data->alpha_ref_value); + } + else glDisable(GL_ALPHA_TEST); + if (data->indices) { _renderer_elements_draw(renderer, data->assembly, data->index_count, 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 4f8fcedbc7..9d858aa54b 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 @@ -86,6 +86,7 @@ static const char *shader_flag_names[] = "EMISSION_TEXTURE_BLEND", "NORMAL_TEXTURE_BLEND", "FOG_ENABLED", + "ALPHA_TEST_ENABLED", "SHADOWED" }; diff --git a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x b/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x index cae8825e39..12476733e6 100644 --- a/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x +++ b/src/modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x @@ -1055,6 +1055,18 @@ static const char const shadow_map_vert_glsl[] = "attribute vec4 aPosition1;\n" "uniform float uPositionWeight;\n" "#endif //VERTEX_POSITION_BLEND\n" + "#ifdef ALPHA_TEST_ENABLED\n" + "#ifdef VERTEX_TEXCOORD\n" + "attribute vec4 aTexCoord0;\n" + "#endif //VERTEX_TEXCOORD\n" + "#ifdef VERTEX_TEXCOORD_BLEND\n" + "attribute vec4 aTexCoord1;\n" + "uniform float uTexCoordWeight;\n" + "#endif //VERTEX_TEXCOORD_BLEND\n" + "#ifdef NEED_TEX_COORD\n" + "varying vec2 vTexCoord;\n" + "#endif //TEX_COORD\n" + "#endif //ALPHA_TEST_ENABLED\n" "void main()\n" "{\n" "#ifdef VERTEX_POSITION_BLEND\n" @@ -1066,12 +1078,48 @@ static const char const shadow_map_vert_glsl[] = " vec4 position = vec4(aPosition0.xyz, 1.0);\n" "#endif // VERTEX_POSITION\n" "#endif //VERTEX_POSITION_BLEND\n" + "#ifdef ALPHA_TEST_ENABLED\n" + "#ifdef VERTEX_TEXCOORD_BLEND\n" + " vTexCoord = aTexCoord0.st * uTexCoordWeight +\n" + " aTexCoord1.st * (1.0 - uTexCoordWeight);\n" + "#else\n" + "#ifdef VERTEX_TEXCOORD\n" + " vTexCoord = aTexCoord0.st;\n" + "#endif //VERTEX_TEXCOORD\n" + "#endif //VERTEX_TEXCOORD_BLEND\n" + "#endif //ALPHA_TEST_ENABLED\n" " gl_Position = uMatrixMvp * position;\n" "}\n"; static const char const shadow_map_frag_glsl[] = - "void main()\n" - "{\n" + "#ifdef ALPHA_TEST_ENABLED\n" + "#ifdef NEED_TEX_COORD\n" + "varying vec2 vTexCoord;\n" + "#endif //TEX_COORD\n" + "#ifdef DIFFUSE\n" + "#ifdef DIFFUSE_TEXTURE\n" + "uniform sampler2D uTextureDiffuse0;\n" + "#endif //DIFFUSE_TEXTURE\n" + "#ifdef DIFFUSE_TEXTURE_BLEND\n" + "uniform sampler2D uTextureDiffuse1;\n" + "uniform float uTextureDiffuseWeight;\n" + "#endif //DIFFUSE_TEXTURE_BLEND\n" + "#endif //DIFFUSE\n" + "#endif //ALPHA_TEST_ENABLED\n" + "void main() {\n" + "#ifdef ALPHA_TEST_ENABLED\n" + "#ifdef DIFFUSE_TEXTURE_BLEND\n" + " gl_FragColor = (texture2D(uTextureDiffuse0, vTexCoord) *\n" + " uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vTexCoord) *\n" + " (1.0 - uTextureDiffuseWeight));\n" + "#else\n" + "#ifdef DIFFUSE_TEXTURE\n" + " gl_FragColor = texture2D(uTextureDiffuse0, vTexCoord) ;\n" + "#else\n" + " gl_FragColor = vec4(1);\n" + "#endif //DIFFUSE_TEXTURE\n" + "#endif //DIFFUSE_TEXTURE_BLEND\n" + "#endif //ALPHA_TEST_ENABLED\n" " gl_FragColor.r = gl_FragCoord.z;\n" "}\n"; diff --git a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd index 84a586ac7b..6bfbcc7104 100644 --- a/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd +++ b/src/modules/evas/engines/gl_common/shader_3d/shadow_map_frag.shd @@ -1,4 +1,43 @@ -void main() -{ +#ifdef ALPHA_TEST_ENABLED + +#ifdef NEED_TEX_COORD +varying vec2 vTexCoord; +#endif //TEX_COORD + +#ifdef DIFFUSE + +#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 + +#endif //ALPHA_TEST_ENABLED + +void main() { + +#ifdef ALPHA_TEST_ENABLED + +#ifdef DIFFUSE_TEXTURE_BLEND + gl_FragColor = (texture2D(uTextureDiffuse0, vTexCoord) * + uTextureDiffuseWeight + texture2D(uTextureDiffuse1, vTexCoord) * + (1.0 - uTextureDiffuseWeight)); +#else + +#ifdef DIFFUSE_TEXTURE + gl_FragColor = texture2D(uTextureDiffuse0, vTexCoord) ; +#else + gl_FragColor = vec4(1); +#endif //DIFFUSE_TEXTURE + +#endif //DIFFUSE_TEXTURE_BLEND + +#endif //ALPHA_TEST_ENABLED + 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 index 3f12a69b2b..be92999e7b 100644 --- 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 @@ -9,6 +9,23 @@ attribute vec4 aPosition1; uniform float uPositionWeight; #endif //VERTEX_POSITION_BLEND +#ifdef ALPHA_TEST_ENABLED + +#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 //TEX_COORD + +#endif //ALPHA_TEST_ENABLED + void main() { @@ -24,5 +41,20 @@ void main() #endif //VERTEX_POSITION_BLEND +#ifdef ALPHA_TEST_ENABLED + +#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 + +#endif //ALPHA_TEST_ENABLED + gl_Position = uMatrixMvp * position; }