[evasgl] Use gl call immediately related frambuffer without checking 94/140594/3
authorsunghyun kim <scholb.kim@samsung.com>
Tue, 25 Jul 2017 12:30:04 +0000 (21:30 +0900)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Thu, 3 Aug 2017 05:49:44 +0000 (05:49 +0000)
A non-NULL return value for eglGetProcAddress() does not guarante
that a function is actually supported at runtime.
so if eglGetProcAddress() return NULL, it can be problem.
this issue is especially occuring in framebuffer call.

as a matter of fact, framebuffer is core api from gles 2.0,
so it can be used immediately without checking

Change-Id: Iaec4d0f24e1c9c0d947c593688d2c09691fbf2c2

src/modules/evas/engines/gl_common/evas_gl_common.h
src/modules/evas/engines/gl_common/evas_gl_context.c
src/modules/evas/engines/gl_common/evas_gl_texture.c
src/modules/evas/engines/gl_generic/evas_engine.c

index 5aeea7d..ddd5c8a 100644 (file)
@@ -716,10 +716,6 @@ void              evas_gl_common_texture_shared_back(Evas_Engine_GL_Context *gc,
 
 void              evas_gl_common_line_draw(Evas_Engine_GL_Context *gc, int x1, int y1, int x2, int y2);
 
-extern void       (*glsym_glGenFramebuffers)      (GLsizei a, GLuint *b);
-extern void       (*glsym_glBindFramebuffer)      (GLenum a, GLuint b);
-extern void       (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e);
-extern void       (*glsym_glDeleteFramebuffers)   (GLsizei a, const GLuint *b);
 extern void       (*glsym_glGetProgramBinary)     (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e);
 extern void       (*glsym_glProgramBinary)        (GLuint a, GLenum b, const void *c, GLint d);
 extern void       (*glsym_glProgramParameteri)    (GLuint a, GLuint b, GLint d);
@@ -882,10 +878,10 @@ __evas_gl_errdyn(int err, const char *file, const char *func, int line, const ch
 #  define glGetShaderiv(...) GL_ERROR_TRACE(glGetShaderiv, glGetShaderiv, #__VA_ARGS__, __VA_ARGS__)
 #  define glShaderSource(...) GL_ERROR_TRACE(glShaderSource, glShaderSource, #__VA_ARGS__, __VA_ARGS__)
 #  define glCompileShader(...) GL_ERROR_TRACE(glCompileShader, glCompileShader, #__VA_ARGS__, __VA_ARGS__)
-#  define glsym_glGenFramebuffers(...) GL_ERROR_TRACE(glGenFramebuffers, glsym_glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__)
-#  define glsym_glBindFramebuffer(...) GL_ERROR_TRACE(glBindFramebuffer, glsym_glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__)
-#  define glsym_glFramebufferTexture2D(...) GL_ERROR_TRACE(glFramebufferTexture2D, glsym_glFramebufferTexture2D, #__VA_ARGS__, __VA_ARGS__)
-#  define glsym_glDeleteFramebuffers(...) GL_ERROR_TRACE(glDeleteFramebuffers, glsym_glDeleteFramebuffers, #__VA_ARGS__, __VA_ARGS__)
+#  define glGenFramebuffers(...) GL_ERROR_TRACE(glGenFramebuffers, glGenFramebuffers, #__VA_ARGS__, __VA_ARGS__)
+#  define glBindFramebuffer(...) GL_ERROR_TRACE(glBindFramebuffer, glBindFramebuffer, #__VA_ARGS__, __VA_ARGS__)
+#  define glFramebufferTexture2D(...) GL_ERROR_TRACE(glFramebufferTexture2D, glFramebufferTexture2D, #__VA_ARGS__, __VA_ARGS__)
+#  define glDeleteFramebuffers(...) GL_ERROR_TRACE(glDeleteFramebuffers, glDeleteFramebuffers, #__VA_ARGS__, __VA_ARGS__)
 #  define glsym_glGetProgramBinary(...) GL_ERROR_TRACE(glGetProgramBinary, glsym_glGetProgramBinary, #__VA_ARGS__, __VA_ARGS__)
 #  define glsym_glProgramBinary(...) GL_ERROR_TRACE(glProgramBinary, glsym_glProgramBinary, #__VA_ARGS__, __VA_ARGS__)
 #  define glsym_glProgramParameteri(...) GL_ERROR_TRACE(glProgramParameteri, glsym_glProgramParameteri, #__VA_ARGS__, __VA_ARGS__)
index e90e45e..e8bdc0b 100644 (file)
@@ -20,10 +20,6 @@ typedef void      *(*glsym_func_void_ptr) ();
 typedef GLboolean  (*glsym_func_boolean) ();
 typedef const char *(*glsym_func_const_char_ptr) ();
 
-void       (*glsym_glGenFramebuffers)      (GLsizei a, GLuint *b) = NULL;
-void       (*glsym_glBindFramebuffer)      (GLenum a, GLuint b) = NULL;
-void       (*glsym_glFramebufferTexture2D) (GLenum a, GLenum b, GLenum c, GLuint d, GLint e) = NULL;
-void       (*glsym_glDeleteFramebuffers)   (GLsizei a, const GLuint *b) = NULL;
 void       (*glsym_glGetProgramBinary)     (GLuint a, GLsizei b, GLsizei *c, GLenum *d, void *e) = NULL;
 void       (*glsym_glProgramBinary)        (GLuint a, GLenum b, const void *c, GLint d) = NULL;
 void       (*glsym_glProgramParameteri)    (GLuint a, GLuint b, GLint d) = NULL;
@@ -99,46 +95,6 @@ evas_gl_symbols(void *(*GetProcAddress)(const char *name))
    *a = *b; \
    *b = tmp;
 
-#ifdef GL_GLES
-   FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void);
-   FINDSYM2(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void);
-   FALLBAK(glsym_glGenFramebuffers, glsym_func_void);
-#else
-   FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersEXT", glsym_func_void);
-   FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffersARB", glsym_func_void);
-   FINDSYM(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void);
-   // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it
-   FINDSYM2(glsym_glGenFramebuffers, "glGenFramebuffers", glsym_func_void);
-   FALLBAK(glsym_glGenFramebuffers, glsym_func_void);
-#endif
-
-#ifdef GL_GLES
-   FINDSYM(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void);
-   FINDSYM2(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void);
-   FALLBAK(glsym_glBindFramebuffer, glsym_func_void);
-#else
-   FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferEXT", glsym_func_void);
-   FINDSYM(glsym_glBindFramebuffer, "glBindFramebufferARB", glsym_func_void);
-   FINDSYM(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void);
-   // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it
-   FINDSYM2(glsym_glBindFramebuffer, "glBindFramebuffer", glsym_func_void);
-   FALLBAK(glsym_glBindFramebuffer, glsym_func_void);
-#endif
-
-   FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DEXT", glsym_func_void);
-   FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2DARB", glsym_func_void);
-   FINDSYM(glsym_glFramebufferTexture2D, "glFramebufferTexture2D", glsym_func_void);
-   // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it
-   FINDSYM2(glsym_glFramebufferTexture2D, "glFramebufferTexture2D", glsym_func_void);
-   FALLBAK(glsym_glFramebufferTexture2D, glsym_func_void);
-
-   FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersEXT", glsym_func_void);
-   FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffersARB", glsym_func_void);
-   FINDSYM(glsym_glDeleteFramebuffers, "glDeleteFramebuffers", glsym_func_void);
-   // nvidia tegra3 drivers seem to not expose via getprocaddress, but dlsym finds it
-   FINDSYM2(glsym_glDeleteFramebuffers, "glDeleteFramebuffers", glsym_func_void);
-   FALLBAK(glsym_glDeleteFramebuffers, glsym_func_void);
-
    FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryOES", glsym_func_void);
    FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryKHR", glsym_func_void);
    FINDSYM(glsym_glGetProgramBinary, "glGetProgramBinaryEXT", glsym_func_void);
@@ -1291,9 +1247,9 @@ evas_gl_common_context_target_surface_set(Evas_Engine_GL_Context *gc,
 # endif
 #endif
    if (gc->pipe[0].shader.surface == gc->def_surface)
-      GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, 0);
+      GL_TH(glBindFramebuffer,  GL_FRAMEBUFFER, 0);
    else
-      GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, surface->tex->pt->fb);
+      GL_TH(glBindFramebuffer,  GL_FRAMEBUFFER, surface->tex->pt->fb);
    _evas_gl_common_viewport_set(gc, 0, 0);
 }
 
index e033e3c..7656f39 100644 (file)
@@ -683,9 +683,9 @@ _pool_tex_render_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, in
 
    if (ok)
      {
-        GL_TH_CALL(glGenFramebuffers, glsym_glGenFramebuffers, 1, &(pt->fb));
-        GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, pt->fb);
-        GL_TH_CALL(glFramebufferTexture2D, glsym_glFramebufferTexture2D,
+        GL_TH(glGenFramebuffers, 1, &(pt->fb));
+        GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, pt->fb);
+        GL_TH(glFramebufferTexture2D,
                    GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, pt->texture, 0);
         // note: should check fbo completeness
      }
@@ -699,7 +699,7 @@ _pool_tex_render_new(Evas_Engine_GL_Context *gc, int w, int h, int intformat, in
         GL_TH(glFramebufferRenderbuffer, GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, pt->stencil);
      }
 
-   GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, fnum);
+   GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, fnum);
    if (gc->state.current.tex_target)
       GL_TH(glBindTexture, gc->state.current.tex_target, gc->state.current.cur_tex);
    else
@@ -1023,7 +1023,7 @@ evas_gl_texture_pool_empty(Evas_GL_Texture_Pool *pt)
      }
    if (pt->fb)
      {
-        GL_TH_CALL(glDeleteFramebuffers, glsym_glDeleteFramebuffers, 1, &(pt->fb));
+        GL_TH(glDeleteFramebuffers, 1, &(pt->fb));
         pt->fb = 0;
      }
     EINA_LIST_FREE(pt->allocations, apt)
index 802749e..b991700 100644 (file)
@@ -1890,7 +1890,7 @@ eng_gl_surface_read_pixels(void *data EINA_UNUSED, void *surface,
 
    GL_TH(glGetIntegerv, GL_FRAMEBUFFER_BINDING, &fbo);
    if (fbo != (GLint) im->tex->pt->fb)
-     GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, im->tex->pt->fb);
+     GL_TH(glBindFramebuffer, GL_FRAMEBUFFER, im->tex->pt->fb);
    GL_TH(glPixelStorei, GL_PACK_ALIGNMENT, 4);
 
    // With GLX we will try to read BGRA even if the driver reports RGBA
@@ -1920,7 +1920,7 @@ eng_gl_surface_read_pixels(void *data EINA_UNUSED, void *surface,
      }
 
    if (fbo != (GLint) im->tex->pt->fb)
-     GL_TH_CALL(glBindFramebuffer, glsym_glBindFramebuffer, GL_FRAMEBUFFER, fbo);
+     GL_TH(glBindFramebuffer,  GL_FRAMEBUFFER, fbo);
 
    return EINA_TRUE;
 }