From: Stanislav Vorobiov Date: Thu, 31 Oct 2013 14:10:25 +0000 (+0400) Subject: YaGL: Get number of extensions before calling glGetStringi X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~475^2~49 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8325278506c13448381dcadd2d5674e45ab3e28;p=sdk%2Femulator%2Fqemu.git YaGL: Get number of extensions before calling glGetStringi It's better to call glGetIntegerv(GL_NUM_EXTENSIONS) and use the result in glGetStringi than calling glGetStringi until error is returned Change-Id: Ic61c0c4d42469be9ae217e5d234033ba0023c3b5 --- diff --git a/hw/yagl_apis/gles/yagl_host_gles_calls.c b/hw/yagl_apis/gles/yagl_host_gles_calls.c index 9c5a9f9634..dac491659c 100644 --- a/hw/yagl_apis/gles/yagl_host_gles_calls.c +++ b/hw/yagl_apis/gles/yagl_host_gles_calls.c @@ -1560,14 +1560,15 @@ void yagl_host_glGetString(GLenum name, if ((name == GL_EXTENSIONS) && (gles_api_ts->driver->gl_version > yagl_gl_2)) { struct yagl_vector v; - uint32_t i; + GLint i, num_extensions = 0; char nb = '\0'; yagl_vector_init(&v, 1, 0); - for (i = 0, tmp = (const char*)gles_api_ts->driver->GetStringi(name, i); - tmp; - ++i, tmp = (const char*)gles_api_ts->driver->GetStringi(name, i)) { + gles_api_ts->driver->GetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + + for (i = 0; i < num_extensions; ++i) { + tmp = (const char*)gles_api_ts->driver->GetStringi(name, i); int size = yagl_vector_size(&v); int ext_len = strlen(tmp); diff --git a/hw/yagl_drivers/egl_glx/yagl_egl_glx.c b/hw/yagl_drivers/egl_glx/yagl_egl_glx.c index 3f2e12a842..4d899b8c23 100644 --- a/hw/yagl_drivers/egl_glx/yagl_egl_glx.c +++ b/hw/yagl_drivers/egl_glx/yagl_egl_glx.c @@ -134,7 +134,7 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx, GLXPbuffer pbuffer = 0; const GLubyte *(GLAPIENTRY *GetStringi)(GLenum, GLuint) = NULL; void (GLAPIENTRY *GetIntegerv)(GLenum, GLint*) = NULL; - uint32_t i; + GLint i, num_extensions = 0; GLint major = 0, minor = 0; YAGL_EGL_GLX_ENTER(yagl_egl_glx_get_gl_version, NULL); @@ -208,9 +208,19 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx, goto out; } - for (i = 0, tmp = (const char*)GetStringi(GL_EXTENSIONS, i); - tmp; - ++i, tmp = (const char*)GetStringi(GL_EXTENSIONS, i)) { + GetIntegerv = yagl_dyn_lib_get_ogl_procaddr(egl_glx->base.dyn_lib, + "glGetIntegerv"); + + if (!GetIntegerv) { + YAGL_LOG_ERROR("Unable to get symbol: %s", + yagl_dyn_lib_get_error(egl_glx->base.dyn_lib)); + goto out; + } + + GetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + + for (i = 0; i < num_extensions; ++i) { + tmp = (const char*)GetStringi(GL_EXTENSIONS, i); if (strcmp(tmp, "GL_ARB_ES3_compatibility") == 0) { YAGL_LOG_INFO("GL_ARB_ES3_compatibility supported, using OpenGL 3.1"); *version = yagl_gl_3_es3; @@ -224,15 +234,6 @@ static bool yagl_egl_glx_get_gl_version(struct yagl_egl_glx *egl_glx, * able to patch shaders and run them with GLSL 1.50. */ - GetIntegerv = yagl_dyn_lib_get_ogl_procaddr(egl_glx->base.dyn_lib, - "glGetIntegerv"); - - if (!GetIntegerv) { - YAGL_LOG_ERROR("Unable to get symbol: %s", - yagl_dyn_lib_get_error(egl_glx->base.dyn_lib)); - goto out; - } - GetIntegerv(GL_MAJOR_VERSION, &major); GetIntegerv(GL_MINOR_VERSION, &minor);