Support GL_(NUM_)COMPRESSED_TEXTURE_FORMATS get.
Change-Id: I6adb541649ec83f50f520e27a26814a47359b827
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 e4afd54..6c38f25 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 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 @@
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 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 @@
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 b26b504..1ff40d9 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 <stdio.h>
+#define MAX_SUPPORTED_PALLETE 10
+
struct Color
{
@@ -164,3 +166,19 @@
}
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 21094af..0dc3286 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 <GLES/gl.h>
+
unsigned char* uncompressTexture(GLenum internalformat,GLenum& formatOut,GLsizei width,GLsizei height,GLsizei imageSize, const GLvoid* data,GLint level);
+int getCompressedFormats(int* formats);
#endif