Fixed on-screen keyboard GL save/restore code

This commit is contained in:
pelya
2012-11-25 20:00:49 +02:00
parent bf150ecddb
commit f139d00006

View File

@@ -103,9 +103,10 @@ static inline int InsideRect(const SDL_Rect * r, int x, int y)
static struct ScreenKbGlState_t
{
GLboolean texture2d;
GLuint texunitId;
GLuint textureId;
GLfloat color[4];
GLint texEnvMode;
GLint texEnvMode, texEnvMode1, texEnvMode2;
GLboolean blend;
GLenum blend1, blend2;
GLint texFilter1, texFilter2;
@@ -114,34 +115,45 @@ oldGlState;
static inline void beginDrawingTex()
{
int MaxTextureUnits = 1;
// Save OpenGL state
glGetError(); // Clear error flag
// This code does not work on 1.6 emulator, and on some older devices
// However GLES 1.1 spec defines all theese values, so it's a device fault for not implementing them
oldGlState.texture2d = glIsEnabled(GL_TEXTURE_2D);
glGetIntegerv(GL_ACTIVE_TEXTURE, &oldGlState.texunitId);
glGetIntegerv(GL_MAX_TEXTURE_UNITS, &MaxTextureUnits);
glActiveTexture(GL_TEXTURE0 /* + MaxTextureUnits - 1 */);
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldGlState.textureId);
glGetFloatv(GL_CURRENT_COLOR, &(oldGlState.color[0]));
glGetTexEnviv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &oldGlState.texEnvMode);
glGetTexEnviv(GL_TEXTURE_ENV, GL_COMBINE_RGB, &oldGlState.texEnvMode1);
glGetTexEnviv(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, &oldGlState.texEnvMode2);
oldGlState.blend = glIsEnabled(GL_BLEND);
glGetIntegerv(GL_BLEND_SRC, &oldGlState.blend1);
glGetIntegerv(GL_BLEND_DST, &oldGlState.blend2);
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, &oldGlState.texFilter1);
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, &oldGlState.texFilter2);
// It's very unlikely that some app will use GL_TEXTURE_CROP_RECT_OES, so just skip it
if( glGetError() != GL_NO_ERROR )
{
// Make the video somehow work on emulator
oldGlState.texture2d = GL_FALSE;
oldGlState.texunitId = GL_TEXTURE0;
oldGlState.textureId = 0;
oldGlState.texEnvMode = GL_MODULATE;
oldGlState.texEnvMode1 = GL_MODULATE;
oldGlState.texEnvMode2 = GL_MODULATE;
oldGlState.blend = GL_FALSE;
oldGlState.blend1 = GL_SRC_ALPHA;
oldGlState.blend2 = GL_ONE_MINUS_SRC_ALPHA;
oldGlState.texFilter1 = GL_NEAREST;
oldGlState.texFilter2 = GL_NEAREST;
}
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
static inline void endDrawingTex()
@@ -152,16 +164,12 @@ static inline void endDrawingTex()
glBindTexture(GL_TEXTURE_2D, oldGlState.textureId);
glColor4f(oldGlState.color[0], oldGlState.color[1], oldGlState.color[2], oldGlState.color[3]);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, oldGlState.texEnvMode);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, oldGlState.texEnvMode1);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, oldGlState.texEnvMode2);
if( oldGlState.blend == GL_FALSE )
glDisable(GL_BLEND);
glBlendFunc(oldGlState.blend1, oldGlState.blend2);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, oldGlState.texFilter1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, oldGlState.texFilter2);
/*
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
*/
glActiveTexture(oldGlState.texunitId);
}
static inline void drawCharTexFlip(GLTexture_t * tex, SDL_Rect * src, SDL_Rect * dest, int flipX, int flipY, Uint8 r, Uint8 g, Uint8 b, Uint8 a)
@@ -175,10 +183,6 @@ static inline void drawCharTexFlip(GLTexture_t * tex, SDL_Rect * src, SDL_Rect *
glColor4x(r * 0x100, g * 0x100, b * 0x100, a * 0x100 );
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if( SDL_ANDROID_VideoLinearFilter )
{
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);