From: mythri.venugopal Date: Mon, 9 Feb 2015 05:23:29 +0000 (+0900) Subject: Evas GL: Fix GLES1.1 extension initialisation bug X-Git-Tag: v1.13.0~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=48d8cdb4dd430667b6c70adeabd0daffbab6249f;p=platform%2Fupstream%2Fefl.git Evas GL: Fix GLES1.1 extension initialisation bug Summary: Extension function pointer initialisation requires glGetString(GL_EXTENSIONS). To get GLESv1 extension string, GLESv1 context has to be bound. Change involves updating extensions after GLESv1 context has been bound. Reviewers: jpeg Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D1946 Signed-off-by: Jean-Philippe Andre --- diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c index d6a3093..f79c1ce 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api_ext.c +++ b/src/modules/evas/engines/gl_common/evas_gl_api_ext.c @@ -505,13 +505,37 @@ _evgl_api_gles1_ext_init(void) int _curext_supported = 0; Evas_GL_API *gles1_funcs; const char *gles1_exts; + EVGL_Resource *rsc; + EGLint context_version; + EGLDisplay dpy = EGLDISPLAY_GET(); - /* Note from the EGL documentation: - * Function pointers returned by eglGetProcAddress are independent of the - * display and the currently bound context and may be used by any context - * which supports the extension. - * So, we don't need to check that GLESv1 is current. + /* glGetString returns the information for the currently bound context + * So, update gles1_exts only if GLES1 context is currently bound. + * Check here if GLESv1 is current */ + if (!(rsc=_evgl_tls_resource_get())) + { + ERR("Unable to initialize GLES1 extensions. Error retrieving tls"); + return EINA_FALSE; + } + + if ((dpy == EGL_NO_DISPLAY) || !rsc->current_ctx) + { + DBG("Unable to initialize GLES1 extensions. Engine not initialised"); + return EINA_FALSE; + } + + if (!eglQueryContext(dpy, rsc->current_ctx->context, EGL_CONTEXT_CLIENT_VERSION, &context_version)) + { + ERR("Unable to initialize GLES1 extensions. eglQueryContext failed 0x%x", eglGetError()); + return EINA_FALSE; + } + + if (context_version != EVAS_GL_GLES_1_X) + { + DBG("GLESv1 context not bound"); + return EINA_FALSE; + } gles1_funcs = _evgl_api_gles1_internal_get(); if (!gles1_funcs || !gles1_funcs->glGetString) diff --git a/src/modules/evas/engines/gl_common/evas_gl_core.c b/src/modules/evas/engines/gl_common/evas_gl_core.c index 242127a98..e23777d 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_core.c +++ b/src/modules/evas/engines/gl_common/evas_gl_core.c @@ -2304,6 +2304,12 @@ evgl_make_current(void *eng_data, EVGL_Surface *sfc, EVGL_Context *ctx) rsc->current_ctx = ctx; rsc->current_eng = eng_data; + // Update GLESv1 extension functions after GLESv1 context is bound + if (ctx->version == EVAS_GL_GLES_1_X) + { + evgl_api_gles1_ext_get(gles1_funcs); + } + _surface_context_list_print(); return 1;