cedric pushed a commit to branch master.

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

commit 49f350d046535e0d0e65d7955c1ce670d17bdaaf
Author: Dmytro Dadyka <d.dad...@dmail.com>
Date:   Mon Feb 23 14:20:45 2015 +0100

    evas: Evas_3D - add texture units count checking.
    
    Reviewers: cedric
    
    Subscribers: cedric
    
    Differential Revision: https://phab.enlightenment.org/D2023
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/modules/evas/engines/gl_common/evas_gl_3d.c          | 9 ++++++++-
 src/modules/evas/engines/gl_common/evas_gl_3d_renderer.c | 9 +++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

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 403aea6..eab4351 100644
--- a/src/modules/evas/engines/gl_common/evas_gl_3d.c
+++ b/src/modules/evas/engines/gl_common/evas_gl_3d.c
@@ -1262,10 +1262,17 @@ _mesh_draw_data_build(E3D_Draw_Data *data,
         evas_normal_matrix_get(&data->matrix_normal, matrix_mv);
      }
 
-   // TODO Add correct numbering
    int num;
    glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &num);
    data->smap_sampler = num - 1;
+
+   if (data->texture_count >= num)
+     if ((data->flags & E3D_SHADER_FLAG_SHADOWED) || (data->texture_count > 
num))
+       {
+          ERR("Too many textures for your graphics configuration.");
+          return EINA_FALSE;
+       }
+
    return EINA_TRUE;
 }
 
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 82b0676..f522881 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
@@ -15,6 +15,7 @@ struct _E3D_Renderer
    Eina_Bool      vertex_attrib_enable[E3D_MAX_VERTEX_ATTRIB_COUNT];
    Eina_Bool      depth_test_enable;
    GLuint         texDepth;
+   GLint         smap_sampler;
 };
 
 static inline GLenum
@@ -173,8 +174,12 @@ _renderer_texture_bind(E3D_Renderer *renderer, 
E3D_Draw_Data *data)
                }
           }
      }
-     glActiveTexture(GL_TEXTURE0 + data->smap_sampler);
-     glBindTexture(GL_TEXTURE_2D, renderer->texDepth);
+   if ((data->flags & E3D_SHADER_FLAG_SHADOWED) && (renderer->smap_sampler != 
data->smap_sampler))
+     {
+        glActiveTexture(GL_TEXTURE0 + data->smap_sampler);
+        glBindTexture(GL_TEXTURE_2D, renderer->texDepth);
+        renderer->smap_sampler = data->smap_sampler;
+     }
 }
 
 static inline void

-- 


Reply via email to