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 e4afd5428..6c38f252c 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/GLEScmImp.cpp @@ -658,15 +658,23 @@ GL_API void GL_APIENTRY glGenTextures( GLsizei n, GLuint *textures) { GL_API void GL_APIENTRY glGetBooleanv( GLenum pname, GLboolean *params) { GET_CTX() + + GLint i; + switch(pname) { case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - GLint i; + 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_TEXTURE_GEN_STR_OES: { GLboolean state_s = GL_FALSE; @@ -725,17 +733,33 @@ GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) { size_t nParams = glParamSize(pname); GLfloat fParams[16]; + GLint i; switch(pname) { case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - GLint i; + 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_TEXTURE_GEN_STR_OES: ctx->dispatcher().glGetFloatv(GL_TEXTURE_GEN_S,&fParams[0]); break; @@ -754,15 +778,33 @@ GL_API void GL_APIENTRY glGetFixedv( GLenum pname, GLfixed *params) { GL_API void GL_APIENTRY glGetFloatv( GLenum pname, GLfloat *params) { GET_CTX() + + GLint i; + switch(pname) { case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: - GLint i; + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: 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; @@ -788,6 +830,14 @@ GL_API void GL_APIENTRY glGetIntegerv( GLenum pname, GLint *params) { ctx->dispatcher().glGetIntegerv(GL_TEXTURE_GEN_S,¶ms[0]); break; + case GL_COMPRESSED_TEXTURE_FORMATS: + getCompressedFormats(params); + break; + + case GL_NUM_COMPRESSED_TEXTURE_FORMATS: + *params = getCompressedFormats(NULL); + break; + default: ctx->dispatcher().glGetIntegerv(pname,params); } diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp index b26b5048a..1ff40d90f 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp +++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.cpp @@ -16,6 +16,8 @@ #include "TextureUtils.h" #include +#define MAX_SUPPORTED_PALLETE 10 + struct Color { @@ -164,3 +166,19 @@ unsigned char* uncompressTexture(GLenum internalformat,GLenum& formatOut,GLsizei } return pixelsOut; } + +int getCompressedFormats(int* formats){ + if(formats){ + formats[0] = GL_PALETTE4_RGBA8_OES; + formats[1] = GL_PALETTE4_RGBA4_OES; + formats[2] = GL_PALETTE8_RGBA8_OES; + formats[3] = GL_PALETTE8_RGBA4_OES; + formats[4] = GL_PALETTE4_RGB8_OES; + formats[5] = GL_PALETTE8_RGB8_OES; + formats[6] = GL_PALETTE4_RGB5_A1_OES; + formats[7] = GL_PALETTE8_RGB5_A1_OES; + formats[8] = GL_PALETTE4_R5_G6_B5_OES; + formats[9] = GL_PALETTE8_R5_G6_B5_OES; + } + return MAX_SUPPORTED_PALLETE; +} diff --git a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h index 21094aff9..0dc32863a 100644 --- a/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h +++ b/tools/emulator/opengl/host/libs/Translator/GLES_CM/TextureUtils.h @@ -18,6 +18,8 @@ #include + unsigned char* uncompressTexture(GLenum internalformat,GLenum& formatOut,GLsizei width,GLsizei height,GLsizei imageSize, const GLvoid* data,GLint level); +int getCompressedFormats(int* formats); #endif