diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp index 33a9b9319..876ba0f09 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp @@ -687,18 +687,14 @@ GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) { switch(pname) { - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(pname, &i); - *params = (i != 0) ? GL_TRUE : GL_FALSE; - break; - - case GL_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i); - *params = (i != 0) ? GL_TRUE : GL_FALSE; - break; - + case GL_FRAMEBUFFER_BINDING_OES: + case GL_RENDERBUFFER_BINDING_OES: + { + GLint name; + glGetIntegerv(pname,&name); + *params = name!=0 ? GL_TRUE: GL_FALSE; + } + break; case GL_TEXTURE_GEN_STR_OES: { GLboolean state_s = GL_FALSE; @@ -709,8 +705,7 @@ GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) { ctx->dispatcher().glGetBooleanv(GL_TEXTURE_GEN_R,&state_r); *params = state_s && state_t && state_r ? GL_TRUE: GL_FALSE; } - break; - + break; default: ctx->dispatcher().glGetBooleanv(pname,params); } @@ -766,33 +761,11 @@ GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) { switch(pname) { - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(pname, &i); - *params = I2X(i); - nParams = 0; - break; - - case GL_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i); - if(i > 0) - { - GLint* iParams = new GLint[i]; - glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, iParams); - while(i >= 0) - { - params[i] = I2X(iParams[i]); - i--; - } - delete [] iParams; - } - break; - + case GL_FRAMEBUFFER_BINDING_OES: + case GL_RENDERBUFFER_BINDING_OES: case GL_TEXTURE_GEN_STR_OES: - ctx->dispatcher().glGetFloatv(GL_TEXTURE_GEN_S,&fParams[0]); + glGetFloatv(pname,&fParams[0]); break; - default: ctx->dispatcher().glGetFloatv(pname,fParams); } @@ -815,34 +788,13 @@ GL_API void GL_APIENTRY glGetFloatv( GLenum pname, GLfloat *params) { GLint i; - switch(pname) - { - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(pname, &i); + switch (pname) { + case GL_FRAMEBUFFER_BINDING_OES: + case GL_RENDERBUFFER_BINDING_OES: + case GL_TEXTURE_GEN_STR_OES: + glGetIntegerv(pname,&i); *params = (GLfloat)i; break; - - case GL_COMPRESSED_TEXTURE_FORMATS: - glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &i); - if(i > 0) - { - GLint* iParams = new GLint[i]; - glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS, iParams); - while(i >= 0) - { - params[i] = (GLfloat)iParams[i]; - i--; - } - delete [] iParams; - } - break; - - case GL_TEXTURE_GEN_STR_OES: - ctx->dispatcher().glGetFloatv(GL_TEXTURE_GEN_S,¶ms[0]); - break; - default: ctx->dispatcher().glGetFloatv(pname,params); } @@ -855,29 +807,26 @@ GL_API void GL_APIENTRY glGetIntegerv( GLenum pname, GLint *params) { { return; } + + GLint i; switch(pname) { - case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: - *params = GL_UNSIGNED_BYTE; - break; - - case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - *params = GL_RGBA; - break; - case GL_TEXTURE_GEN_STR_OES: ctx->dispatcher().glGetIntegerv(GL_TEXTURE_GEN_S,¶ms[0]); break; - - case GL_COMPRESSED_TEXTURE_FORMATS: - getCompressedFormats(params); + case GL_FRAMEBUFFER_BINDING_OES: + if (thrd->shareGroup.Ptr()) { + ctx->dispatcher().glGetIntegerv(pname,&i); + *params = thrd->shareGroup->getLocalName(FRAMEBUFFER,i); + } break; - - case GL_NUM_COMPRESSED_TEXTURE_FORMATS: - *params = getCompressedFormats(NULL); + case GL_RENDERBUFFER_BINDING_OES: + if (thrd->shareGroup.Ptr()) { + ctx->dispatcher().glGetIntegerv(pname,&i); + *params = thrd->shareGroup->getLocalName(RENDERBUFFER,i); + } break; - default: ctx->dispatcher().glGetIntegerv(pname,params); } diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp index 652a769ca..57c1052d9 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_V2/GLESv2Imp.cpp @@ -638,7 +638,9 @@ GL_APICALL int GL_APIENTRY glGetAttribLocation(GLuint program, const GLchar* nam GL_APICALL void GL_APIENTRY glGetBooleanv(GLenum pname, GLboolean* params){ GET_CTX(); - ctx->dispatcher().glGetBooleanv(pname,params); + if (!ctx->glGetBooleanv(pname,params)) { + ctx->dispatcher().glGetBooleanv(pname,params); + } } GL_APICALL void GL_APIENTRY glGetBufferParameteriv(GLenum target, GLenum pname, GLint* params){ @@ -669,12 +671,55 @@ GL_APICALL GLenum GL_APIENTRY glGetError(void){ GL_APICALL void GL_APIENTRY glGetFloatv(GLenum pname, GLfloat* params){ GET_CTX(); - ctx->dispatcher().glGetFloatv(pname,params); + if (ctx->glGetFloatv(pname,params)) { + return; + } + GLint i; + switch (pname) { + case GL_CURRENT_PROGRAM: + case GL_FRAMEBUFFER_BINDING: + case GL_RENDERBUFFER_BINDING: + glGetIntegerv(pname,&i); + *params = (GLfloat)i; + break; + + default: + ctx->dispatcher().glGetFloatv(pname,params); + } } GL_APICALL void GL_APIENTRY glGetIntegerv(GLenum pname, GLint* params){ GET_CTX(); - ctx->dispatcher().glGetIntegerv(pname,params); + + if (ctx->glGetIntegerv(pname,params)) + { + return; + } + + GLint i; + + switch (pname) { + case GL_CURRENT_PROGRAM: + if (thrd->shareGroup.Ptr()) { + ctx->dispatcher().glGetIntegerv(pname,&i); + *params = thrd->shareGroup->getLocalName(SHADER,i); + } + break; + case GL_FRAMEBUFFER_BINDING: + if (thrd->shareGroup.Ptr()) { + ctx->dispatcher().glGetIntegerv(pname,&i); + *params = thrd->shareGroup->getLocalName(FRAMEBUFFER,i); + } + break; + case GL_RENDERBUFFER_BINDING: + if (thrd->shareGroup.Ptr()) { + ctx->dispatcher().glGetIntegerv(pname,&i); + *params = thrd->shareGroup->getLocalName(RENDERBUFFER,i); + } + break; + default: + ctx->dispatcher().glGetIntegerv(pname,params); + } } GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params){ diff --git a/tools/emulator/opengl/host/libs/Translator/GLcommon/GLEScontext.cpp b/tools/emulator/opengl/host/libs/Translator/GLcommon/GLEScontext.cpp index 358a94caf..51d4bcffb 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLcommon/GLEScontext.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLcommon/GLEScontext.cpp @@ -538,29 +538,59 @@ bool GLEScontext::glGetBooleanv(GLenum pname, GLboolean *params) bool GLEScontext::glGetFixedv(GLenum pname, GLfixed *params) { - GLint iParam; + bool result = false; + GLint numParams = 1; - if(glGetIntegerv(pname, &iParam)) + switch(pname) { - *params = I2X(iParam); - return true; + case GL_COMPRESSED_TEXTURE_FORMATS: + glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numParams); + break; + default: + numParams=1; } - return false; + GLint* iParams = new GLint[numParams]; + if (numParams>0 && glGetIntegerv(pname,iParams)) { + while(numParams >= 0) + { + params[numParams] = I2X(iParams[numParams]); + numParams--; + } + result = true; + } + delete [] iParams; + + return result; } bool GLEScontext::glGetFloatv(GLenum pname, GLfloat *params) { - GLint iParam; + bool result = false; + GLint numParams = 1; - if(glGetIntegerv(pname, &iParam)) + switch(pname) { - *params = (GLfloat)iParam; - return true; + case GL_COMPRESSED_TEXTURE_FORMATS: + glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS, &numParams); + break; + default: + numParams=1; } - return false; -} + GLint* iParams = new GLint[numParams]; + if (numParams>0 && glGetIntegerv(pname,iParams)) { + while(numParams >= 0) + { + params[numParams] = (GLfloat)iParams[numParams]; + numParams--; + } + result = true; + } + delete [] iParams; + + return result; +} bool GLEScontext::glGetIntegerv(GLenum pname, GLint *params) { @@ -574,10 +604,31 @@ bool GLEScontext::glGetIntegerv(GLenum pname, GLint *params) *params = m_elementBuffer; break; + case GL_TEXTURE_BINDING_CUBE_MAP: case GL_TEXTURE_BINDING_2D: *params = m_tex2DBind[m_activeTexture].texture; break; + case GL_ACTIVE_TEXTURE: + *params = m_activeTexture+GL_TEXTURE0; + break; + + case GL_COMPRESSED_TEXTURE_FORMATS: + getCompressedFormats(params); + break; + + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: + *params = getCompressedFormats(NULL); + break; + + case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: + *params = GL_UNSIGNED_BYTE; + break; + + case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: + *params = GL_RGBA; + break; + default: return false; }