jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=a23fcb8b71a6a849b429f7501b433d7dc1daf470
commit a23fcb8b71a6a849b429f7501b433d7dc1daf470 Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Wed Oct 14 17:27:53 2015 +0900 Evas GL: Implement glGetString wrapper for OSMesa This is only one step into making the software engine actually work the same as a proper GL engine from Evas GL APIs point of view. This is necessary for the test suite (coming next). --- .../evas/engines/software_generic/evas_engine.c | 55 +++++++++++++++++++--- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 3bde901..4eaa9a4 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -211,7 +211,7 @@ static void (*_sym_glGetShaderiv) (GLuint shader, static void (*_sym_glGetShaderInfoLog) (GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) = NULL; static void (*_sym_glGetShaderPrecisionFormat) (GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) = NULL; static void (*_sym_glGetShaderSource) (GLuint shader, GLsizei bufsize, GLsizei* length, char* source) = NULL; -static const GLubyte *(*_sym_glGetString) (GLenum name) = NULL; +static const GLubyte *(*_sym_glGetString) (GLenum name) = NULL; static void (*_sym_glGetTexParameterfv) (GLenum target, GLenum pname, GLfloat* params) = NULL; static void (*_sym_glGetTexParameteriv) (GLenum target, GLenum pname, GLint* params) = NULL; static void (*_sym_glGetUniformfv) (GLuint program, GLint location, GLfloat* params) = NULL; @@ -4886,11 +4886,53 @@ evgl_glShaderBinary(GLsizei n EINA_UNUSED, const GLuint* shaders EINA_UNUSED, GL //n = binaryformat = length = 0; //shaders = binary = 0; } -#endif -//--------------------------------------------------------------// + +static const GLubyte * +evgl_glGetString(GLenum name) +{ + static char _version[128] = {0}; + static char _glsl[128] = {0}; + const char *ret; + + /* NOTE: Please modify gl_common/evas_gl_api.c as well if you change + * this function! + */ + + switch (name) + { + case GL_VENDOR: + case GL_RENDERER: + // Keep these as-is. + break; + + case GL_SHADING_LANGUAGE_VERSION: + ret = (const char *) _sym_glGetString(GL_SHADING_LANGUAGE_VERSION); + if (!ret) return NULL; + snprintf(_glsl, sizeof(_glsl), "OpenGL ES GLSL ES 1.00 Evas GL (%s)", (char *) ret); + _version[sizeof(_glsl) - 1] = '\0'; + return (const GLubyte *) _glsl; + + case GL_VERSION: + ret = (const char *) _sym_glGetString(GL_VERSION); + if (!ret) return NULL; + snprintf(_version, sizeof(_version), "OpenGL ES 2.0 Evas GL (%s)", (char *) ret); + _version[sizeof(_version) - 1] = '\0'; + return (const GLubyte *) _version; + + case GL_EXTENSIONS: + // assume OSMesa's extensions are safe (no messing with GL context here) + break; + + default: + // GL_INVALID_ENUM is generated if name is not an accepted value. + WRN("Unknown string requested: %x", (unsigned int) name); + break; + } + + return _sym_glGetString(name); +} -#ifdef EVAS_GL static void override_gl_apis(Evas_GL_API *api) { @@ -4959,7 +5001,7 @@ override_gl_apis(Evas_GL_API *api) ORD(glGetAttribLocation); ORD(glGetBooleanv); ORD(glGetBufferParameteriv); - ORD(glGetError); + ORD(glGetError); // FIXME ORD(glGetFloatv); ORD(glGetFramebufferAttachmentParameteriv); ORD(glGetIntegerv); @@ -4970,7 +5012,6 @@ override_gl_apis(Evas_GL_API *api) ORD(glGetShaderInfoLog); ORD(glGetShaderPrecisionFormat); ORD(glGetShaderSource); - ORD(glGetString); // FIXME ORD(glGetTexParameterfv); ORD(glGetTexParameteriv); ORD(glGetUniformfv); @@ -5044,6 +5085,8 @@ override_gl_apis(Evas_GL_API *api) #undef ORD #define ORD(f) EVAS_API_OVERRIDE(f, &gl_funcs, evgl_) + ORD(glGetString); + if (!gl_lib_is_gles) { // Override functions wrapped by Evas_GL --