diff --git a/project/jni/glshim/src/gl/const.h b/project/jni/glshim/src/gl/const.h index 2d9b65ab5..00678c447 100755 --- a/project/jni/glshim/src/gl/const.h +++ b/project/jni/glshim/src/gl/const.h @@ -282,6 +282,10 @@ #define GL_NAME_STACK_DEPTH 0x0D70 #define GL_MAX_NAME_STACK_DEPTH 0x0D37 #define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 // evaluators #define GL_AUTO_NORMAL 0x0D80 diff --git a/project/jni/glshim/src/gl/gl.c b/project/jni/glshim/src/gl/gl.c index c0f937773..c6a68b1d8 100755 --- a/project/jni/glshim/src/gl/gl.c +++ b/project/jni/glshim/src/gl/gl.c @@ -146,6 +146,15 @@ const GLubyte *glGetString(GLenum name) { } } +void transposeMatrix(float *matrix) +{ + float tmp[16]; + memcpy(tmp, matrix, sizeof(tmp)); + for (int i=0; i<4; i++) + for (int j=0; j<4; j++) + matrix[i*4+j]=tmp[j*4+i]; +} + // glGet extern float zoomx, zoomy; extern GLfloat raster_scale[4]; @@ -376,6 +385,18 @@ void glGetFloatv(GLenum pname, GLfloat *params) { case GL_PIXEL_UNPACK_BUFFER_BINDING: *params=(state.buffers.unpack)?state.buffers.unpack->buffer:0; break; + case GL_TRANSPOSE_PROJECTION_MATRIX: + gles_glGetFloatv(GL_PROJECTION_MATRIX, params); + transposeMatrix(params); + break; + case GL_TRANSPOSE_MODELVIEW_MATRIX: + gles_glGetFloatv(GL_MODELVIEW_MATRIX, params); + transposeMatrix(params); + break; + case GL_TRANSPOSE_TEXTURE_MATRIX: + gles_glGetFloatv(GL_TEXTURE_MATRIX, params); + transposeMatrix(params); + break; default: errorGL(); gles_glGetFloatv(pname, params);