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 d6a30935de..f79c1ce3e6 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 242127a985..e23777d44e 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;