jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=6e4d7151b8f38f6126df4c878879bcb9aa3e897d
commit 6e4d7151b8f38f6126df4c878879bcb9aa3e897d Author: Jean-Philippe Andre <[email protected]> Date: Mon Sep 1 19:16:21 2014 +0900 Evas GL: Save EGL error codes in gl_x11 engine --- src/modules/evas/engines/gl_x11/evas_engine.c | 87 +++++++++++++++++++++++---- 1 file changed, 74 insertions(+), 13 deletions(-) diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c b/src/modules/evas/engines/gl_x11/evas_engine.c index a639b2f..3475532 100644 --- a/src/modules/evas/engines/gl_x11/evas_engine.c +++ b/src/modules/evas/engines/gl_x11/evas_engine.c @@ -217,6 +217,7 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return 0; } @@ -231,7 +232,9 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush) ret = eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); if (!ret) { - ERR("eglMakeCurrent() failed! Error Code=%#x", eglGetError()); + int err = eglGetError(); + _evgl_error_set(err - EGL_SUCCESS); + ERR("eglMakeCurrent() failed! Error Code=%#x", err); return 0; } return 1; @@ -251,7 +254,9 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush) if (!ret) { - ERR("eglMakeCurrent() failed! Error Code=%#x", eglGetError()); + int err = eglGetError(); + _evgl_error_set(err - EGL_SUCCESS); + ERR("eglMakeCurrent() failed! Error Code=%#x", err); return 0; } } @@ -267,6 +272,7 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush) if (!ret) { ERR("glXMakeCurrent() failed!"); + _evgl_error_set(EVAS_GL_BAD_DISPLAY); return 0; } return 1; @@ -285,6 +291,7 @@ evgl_eng_make_current(void *data, void *surface, void *context, int flush) if (!ret) { ERR("glXMakeCurrent() failed. Ret: %d! Context: %p Surface: %p", ret, (void*)ctx, (void*)sfc); + _evgl_error_set(EVAS_GL_BAD_DISPLAY); return 0; } } @@ -303,6 +310,7 @@ evgl_eng_native_window_create(void *data) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return NULL; } @@ -331,6 +339,7 @@ evgl_eng_native_window_create(void *data) if (!win) { ERR("Creating native X window failed."); + _evgl_error_set(EVAS_GL_BAD_DISPLAY); return NULL; } @@ -346,12 +355,14 @@ evgl_eng_native_window_destroy(void *data, void *native_window) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return 0; } if (!native_window) { ERR("Inavlid native surface."); + _evgl_error_set(EVAS_GL_BAD_NATIVE_WINDOW); return 0; } @@ -374,6 +385,7 @@ evgl_eng_window_surface_create(void *data, void *native_window EINA_UNUSED) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return NULL; } @@ -414,6 +426,7 @@ evgl_eng_window_surface_destroy(void *data, void *surface) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return 0; } @@ -421,6 +434,7 @@ evgl_eng_window_surface_destroy(void *data, void *surface) if (!surface) { ERR("Invalid surface."); + _evgl_error_set(EVAS_GL_BAD_SURFACE); return 0; } @@ -440,6 +454,7 @@ evgl_eng_context_create(void *data, void *share_ctx) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return NULL; } @@ -469,7 +484,9 @@ evgl_eng_context_create(void *data, void *share_ctx) if (!context) { - ERR("Engine Context Creations Failed. Error: %#x.", eglGetError()); + int err = eglGetError(); + ERR("Engine Context Creations Failed. Error: %#x.", err); + _evgl_error_set(err - EGL_SUCCESS); return NULL; } @@ -496,6 +513,8 @@ evgl_eng_context_create(void *data, void *share_ctx) if (!context) { ERR("Internal Resource Context Creations Failed."); + if(!(eng_get_ob(re)->info->info.display)) _evgl_error_set(EVAS_GL_BAD_DISPLAY); + if(!(eng_get_ob(re)->win)) _evgl_error_set(EVAS_GL_BAD_NATIVE_WINDOW); return NULL; } @@ -513,6 +532,8 @@ evgl_eng_context_destroy(void *data, void *context) if ((!re) || (!context)) { ERR("Invalid Render Input Data. Engine: %p, Context: %p", data, context); + if (!re) _evgl_error_set(EVAS_GL_NOT_INITIALIZED); + if (!context) _evgl_error_set(EVAS_GL_BAD_CONTEXT); return 0; } @@ -534,6 +555,7 @@ evgl_eng_string_get(void *data) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return NULL; } @@ -566,6 +588,7 @@ evgl_eng_rotation_angle_get(void *data) if (!re) { ERR("Invalid Render Engine Data!"); + _evgl_error_set(EVAS_GL_NOT_INITIALIZED); return 0; } @@ -574,6 +597,7 @@ evgl_eng_rotation_angle_get(void *data) else { ERR("Unable to retrieve rotation angle."); + _evgl_error_set(EVAS_GL_BAD_CONTEXT); return 0; } } @@ -1240,6 +1264,30 @@ eng_output_dump(void *data) _re_winfree(re); } +static int +eng_gl_error_get(void *data EINA_UNUSED) +{ + int err; + + if ((err = _evgl_error_get()) != EVAS_GL_SUCCESS) + goto end; + +#ifdef GL_GLES + err = eglGetError() - EGL_SUCCESS; +#else + Render_Engine *re = data; + + if (!eng_get_ob(re)->win) + err = EVAS_GL_BAD_DISPLAY; + else if (!eng_get_ob(re)->info) + err = EVAS_GL_BAD_SURFACE; +#endif + +end: + _evgl_error_set(EVAS_GL_SUCCESS); + return err; +} + ///////////////////////////////////////////////////////////////////////// // // @@ -1357,15 +1405,19 @@ _native_free_cb(void *data, void *image) #ifdef GL_GLES if (n->egl_surface) { - if (glsym_eglDestroyImage) - { - glsym_eglDestroyImage(eng_get_ob(re)->egl_disp, - n->egl_surface); - if (eglGetError() != EGL_SUCCESS) - ERR("eglDestroyImage() failed."); - } - else - ERR("Try eglDestroyImage on EGL with no support"); + int err; + if (glsym_eglDestroyImage) + { + glsym_eglDestroyImage(eng_get_ob(re)->egl_disp, + n->egl_surface); + if ((err = eglGetError()) != EGL_SUCCESS) + { + ERR("eglDestroyImage() failed."); + _evgl_error_set(err - EGL_SUCCESS); + } + } + else + ERR("Try eglDestroyImage on EGL with no support"); } #else # ifdef GLX_BIND_TO_TEXTURE_TARGETS_EXT @@ -1549,7 +1601,12 @@ eng_image_native_set(void *data, void *image, void *native) if (!eglChooseConfig(eng_get_ob(re)->egl_disp, config_attrs, &egl_config, 1, &num_config)) - ERR("eglChooseConfig() failed for pixmap 0x%x, num_config = %i", (unsigned int)pm, num_config); + { + int err = eglGetError(); + ERR("eglChooseConfig() failed for pixmap 0x%x, num_config = %i with error %d", + (unsigned int)pm, num_config, err); + _evgl_error_set(err - EGL_SUCCESS); + } else { int val; @@ -1875,6 +1932,10 @@ module_open(Evas_Module *em) ORD(image_native_set); + ORD(gl_error_get); + // gl_current_surface_get is in gl generic + ORD(gl_current_context_get); + gl_symbols(); /* now advertise out own api */ --
