From 14799a7c2c298abf4a0b30f1ac1a95da7ea81a9e Mon Sep 17 00:00:00 2001 From: Minkyoung Kim Date: Wed, 18 Mar 2015 17:14:41 +0900 Subject: [PATCH] Evas GL: Wrap glGetString() for gles1.x. This is backport from upstream : commit 9a0f5913144da3def33e246e0438c8529f367298 Author: Minkyoung Kim Date: Tue Feb 24 19:32:35 2015 +0900 Evas GL: Wrap glGetString() for gles1.x. Summary: - Implement glGetString() wrapper func in the same way as gles2.x. - Small bug fix glGetString() for gles2.x. Change-Id: I54569c5d239fde17b17d7cc8334bca1fc67edc0e --- src/modules/evas/engines/gl_common/evas_gl_api.c | 2 +- .../evas/engines/gl_common/evas_gl_api_gles1.c | 58 ++++++++++++++++++++-- 2 files changed, 56 insertions(+), 4 deletions(-) diff --git a/src/modules/evas/engines/gl_common/evas_gl_api.c b/src/modules/evas/engines/gl_common/evas_gl_api.c index 0f592d4..6cde550 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api.c +++ b/src/modules/evas/engines/gl_common/evas_gl_api.c @@ -695,7 +695,7 @@ _evgl_glGetString(GLenum name) ret = glGetString(GL_SHADING_LANGUAGE_VERSION); if (!ret) return NULL; #ifdef GL_GLES - if (ret[15] != (GLubyte) '1') + if (ret[18] != (GLubyte) '1') { // We try not to remove the vendor fluff snprintf(_glsl, sizeof(_glsl), "OpenGL ES GLSL ES 1.00 Evas GL (%s)", ((char *) ret) + 18); diff --git a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c index c3448aa..1bddfe2 100644 --- a/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c +++ b/src/modules/evas/engines/gl_common/evas_gl_api_gles1.c @@ -1015,11 +1015,63 @@ _evgl_gles1_glGetPointerv(GLenum pname, GLvoid **params) static const GLubyte * _evgl_gles1_glGetString(GLenum name) { - const GLubyte * ret; + static char _version[128] = {0}; + EVGL_Resource *rsc; + const GLubyte *ret; + if (!_gles1_api.glGetString) return NULL; - ret = _gles1_api.glGetString(name); - return ret; + + if ((!(rsc = _evgl_tls_resource_get())) || !rsc->current_ctx) + { + ERR("Current context is NULL, not calling glGetString"); + // This sets evas_gl_error_get instead of glGetError... + evas_gl_common_error_set(NULL, EVAS_GL_BAD_CONTEXT); + return NULL; + } + + if (rsc->current_ctx->version != EVAS_GL_GLES_1_X) + { + ERR("Invalid context version %d", (int) rsc->current_ctx->version); + evas_gl_common_error_set(NULL, EVAS_GL_BAD_MATCH); + return NULL; + } + + switch (name) + { + case GL_VENDOR: + case GL_RENDERER: + case GL_SHADING_LANGUAGE_VERSION: + break; + case GL_VERSION: + ret = glGetString(GL_VERSION); + if (!ret) return NULL; +#ifdef GL_GLES + if (ret[13] != (GLubyte) '1') + { + // We try not to remove the vendor fluff + snprintf(_version, sizeof(_version), "OpenGL ES-CM 1.1 Evas GL (%s)", ((char *) ret) + 10); + _version[sizeof(_version) - 1] = '\0'; + return (const GLubyte *) _version; + } + return ret; +#else + // Desktop GL, we still keep the official name + snprintf(_version, sizeof(_version), "OpenGL ES-CM 1.1 Evas GL (%s)", (char *) ret); + _version[sizeof(_version) - 1] = '\0'; + return (const GLubyte *) _version; +#endif + + case GL_EXTENSIONS: + return (GLubyte *) evgl_api_ext_string_get(EINA_TRUE, EVAS_GL_GLES_1_X); + + default: + WRN("Unknown string requested: %x", (unsigned int) name); + break; + } + + return _gles1_api.glGetString(name); + } static void -- 2.7.4