From 7cecc00c8fe030ec7537e3e426427ef54c72eac3 Mon Sep 17 00:00:00 2001 From: Sergii Pylypenko Date: Mon, 27 Jan 2014 23:21:53 +0200 Subject: [PATCH] Fixed on-screen keys disappearing in OpenArena --- project/jni/application/openarena/engine | 2 +- .../video/android/SDL_touchscreenkeyboard.c | 116 ++++++++++++++++++ todo.txt | 4 - 3 files changed, 117 insertions(+), 5 deletions(-) diff --git a/project/jni/application/openarena/engine b/project/jni/application/openarena/engine index a98ce32e8..d9bfbb177 160000 --- a/project/jni/application/openarena/engine +++ b/project/jni/application/openarena/engine @@ -1 +1 @@ -Subproject commit a98ce32e8388c953475d8da31cbc294a4720489f +Subproject commit d9bfbb1770d33c03bad126d425c325545ca2e54f diff --git a/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c b/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c index 6491b46b6..767d2f624 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_touchscreenkeyboard.c @@ -93,6 +93,7 @@ enum { MOUSE_POINTER_W = 32, MOUSE_POINTER_H = 32, MOUSE_POINTER_X = 5, MOUSE_PO static int sunTheme = 0; static int joystickTouchPoints[MAX_JOYSTICKS*2]; +static void R_DumpOpenGlState(void); static inline int InsideRect(const SDL_Rect * r, int x, int y) { @@ -136,6 +137,18 @@ static inline void beginDrawingTex() glGetIntegerv(GL_CLIENT_ACTIVE_TEXTURE, &oldGlState.clientTexunitId); #endif + //R_DumpOpenGlState(); + + /* + glActiveTexture(GL_TEXTURE1); + glClientActiveTexture(GL_TEXTURE1); + glDisable(GL_TEXTURE_2D); + glDisableClientState(GL_COLOR_ARRAY); + glDisableClientState(GL_NORMAL_ARRAY); + glDisableClientState(GL_VERTEX_ARRAY); + glDisableClientState(GL_TEXTURE_COORD_ARRAY); + */ + glActiveTexture(GL_TEXTURE0); glClientActiveTexture(GL_TEXTURE0); @@ -153,8 +166,17 @@ static inline void beginDrawingTex() glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glEnable(GL_BLEND); + glDisable(GL_CULL_FACE); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisableClientState(GL_COLOR_ARRAY); + //static const GLfloat color[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + //glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color); + //glDisable(GL_DEPTH_TEST); + //glDisable(GL_ALPHA_TEST); + //glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + //glDisableClientState(GL_NORMAL_ARRAY); + //glDisableClientState(GL_VERTEX_ARRAY); + //glDisableClientState(GL_TEXTURE_COORD_ARRAY); } static inline void endDrawingTex() @@ -1187,3 +1209,97 @@ int SDL_ANDROID_SetScreenKeyboardHintMesage(const char * hint) SDL_ANDROID_CallJavaSetScreenKeyboardHintMessage(hint); return 1; } + +/** + * @brief Dumps OpenGL state for debugging - typically every capability set with glEnable(). + */ +void R_DumpOpenGlState(void) +{ +#define CAPABILITY( X ) {GL_ ## X, # X} + /* List taken from here: http://www.khronos.org/opengles/sdk/1.1/docs/man/glIsEnabled.xml */ + const struct { GLenum idx; const char * text; } openGLCaps[] = { + CAPABILITY(ALPHA_TEST), + CAPABILITY(BLEND), + CAPABILITY(COLOR_ARRAY), + CAPABILITY(COLOR_LOGIC_OP), + CAPABILITY(COLOR_MATERIAL), + CAPABILITY(CULL_FACE), + CAPABILITY(DEPTH_TEST), + CAPABILITY(DITHER), + CAPABILITY(FOG), + CAPABILITY(LIGHTING), + CAPABILITY(LINE_SMOOTH), + CAPABILITY(MULTISAMPLE), + CAPABILITY(NORMAL_ARRAY), + CAPABILITY(NORMALIZE), + CAPABILITY(POINT_SMOOTH), + CAPABILITY(POLYGON_OFFSET_FILL), + CAPABILITY(RESCALE_NORMAL), + CAPABILITY(SAMPLE_ALPHA_TO_COVERAGE), + CAPABILITY(SAMPLE_ALPHA_TO_ONE), + CAPABILITY(SAMPLE_COVERAGE), + CAPABILITY(SCISSOR_TEST), + CAPABILITY(STENCIL_TEST), + CAPABILITY(VERTEX_ARRAY) + }; +#undef CAPABILITY + + char s[1024] = ""; + GLint i; + GLint maxTexUnits = 0; + GLint activeTexUnit = 0; + GLint activeClientTexUnit = 0; + GLint activeTexId = 0; + GLfloat texEnvMode = 0; + const char * texEnvModeStr = "UNKNOWN"; + GLfloat color[4]; + + for (i = 0; i < sizeof(openGLCaps) / sizeof(openGLCaps[0]); i++) { + if (glIsEnabled(openGLCaps[i].idx)) { + strcat(s, openGLCaps[i].text); + strcat(s, " "); + } + } + glGetFloatv(GL_CURRENT_COLOR, color); + + __android_log_print(ANDROID_LOG_INFO, "libSDL", "OpenGL enabled caps: %s color %f %f %f %f \n", s, color[0], color[1], color[2], color[3]); + + glGetIntegerv(GL_ACTIVE_TEXTURE, &activeTexUnit); + glGetIntegerv(GL_CLIENT_ACTIVE_TEXTURE, &activeClientTexUnit); + + glGetIntegerv(GL_MAX_TEXTURE_UNITS, &maxTexUnits); + for (i = GL_TEXTURE0; i < GL_TEXTURE0 + maxTexUnits; i++) { + glActiveTexture(i); + glClientActiveTexture(i); + + strcpy(s, ""); + if (glIsEnabled (GL_TEXTURE_2D)) + strcat(s, "enabled, "); + if (glIsEnabled (GL_TEXTURE_COORD_ARRAY)) + strcat(s, "with texcoord array, "); + if (i == activeTexUnit) + strcat(s, "active, "); + if (i == activeClientTexUnit) + strcat(s, "client active, "); + + glGetIntegerv(GL_TEXTURE_BINDING_2D, &activeTexId); + glGetTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, &texEnvMode); + if (fabs(texEnvMode - GL_ADD) < 0.1f) + texEnvModeStr = "ADD"; + if (fabs(texEnvMode - GL_MODULATE) < 0.1f) + texEnvModeStr = "MODULATE"; + if (fabs(texEnvMode - GL_DECAL) < 0.1f) + texEnvModeStr = "DECAL"; + if (fabs(texEnvMode - GL_BLEND) < 0.1f) + texEnvModeStr = "BLEND"; + if (fabs(texEnvMode - GL_REPLACE) < 0.1f) + texEnvModeStr = "REPLACE"; + if (fabs(texEnvMode - GL_COMBINE) < 0.1f) + texEnvModeStr = "COMBINE"; + + __android_log_print(ANDROID_LOG_INFO, "libSDL", "Texunit: %d texID %d %s texEnv mode %s\n", i - GL_TEXTURE0, activeTexId, s, texEnvModeStr); + } + + glActiveTexture(activeTexUnit); + glClientActiveTexture(activeClientTexUnit); +} diff --git a/todo.txt b/todo.txt index 5a3ea9833..e50028932 100644 --- a/todo.txt +++ b/todo.txt @@ -24,10 +24,6 @@ Requested features, might never get implemented TODO, which will get actually done ================================== -- OpenArena: Smooth camera rotation in aim under finger mode. - -- OpenArena: fix and enable renderer_oa. - - OpenArena: chat text input should be faster. - OpenArena: Shift and Ctrl keys on USB keyboard do not work for text input.