int SDL_ANDROID_CallJavaSwapBuffers() { if( !glContextLost ) { // Clear part of screen not used by SDL - on Android the screen contains garbage after each frame if( SDL_ANDROID_ForceClearScreenRectAmount > 0 ) { int i; glPushMatrix(); glLoadIdentity(); glOrthof( 0.0f, SDL_ANDROID_sRealWindowWidth, SDL_ANDROID_sRealWindowHeight, 0.0f, 0.0f, 1.0f ); glColor4f(0.0f, 0.0f, 0.0f, 1.0f); glEnableClientState(GL_VERTEX_ARRAY); for( i = 0; i < SDL_ANDROID_ForceClearScreenRectAmount; i++ ) { GLshort vertices[] = { SDL_ANDROID_ForceClearScreenRect[i].x, SDL_ANDROID_ForceClearScreenRect[i].y, SDL_ANDROID_ForceClearScreenRect[i].x + SDL_ANDROID_ForceClearScreenRect[i].w, SDL_ANDROID_ForceClearScreenRect[i].y, SDL_ANDROID_ForceClearScreenRect[i].x + SDL_ANDROID_ForceClearScreenRect[i].w, SDL_ANDROID_ForceClearScreenRect[i].y + SDL_ANDROID_ForceClearScreenRect[i].h, SDL_ANDROID_ForceClearScreenRect[i].x, SDL_ANDROID_ForceClearScreenRect[i].y + SDL_ANDROID_ForceClearScreenRect[i].h }; glVertexPointer(2, GL_SHORT, 0, vertices); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); } glDisableClientState(GL_VERTEX_ARRAY); glPopMatrix(); } SDL_ANDROID_drawTouchscreenKeyboard(); } if( ! (*JavaEnv)->CallIntMethod( JavaEnv, JavaRenderer, JavaSwapBuffers ) ) return 0; if( glContextLost ) { glContextLost = 0; __android_log_print(ANDROID_LOG_INFO, "libSDL", "OpenGL context recreated, refreshing textures"); SDL_ANDROID_VideoContextRecreated(); appRestoredCallback(); if(openALRestoredCallback) openALRestoredCallback(); } if( showScreenKeyboardDeferred ) { (*JavaEnv)->PushLocalFrame(JavaEnv, 1); jstring s = (*JavaEnv)->NewStringUTF(JavaEnv, showScreenKeyboardOldText); showScreenKeyboardDeferred = 0; (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, s, showScreenKeyboardSendBackspace ); (*JavaEnv)->DeleteLocalRef( JavaEnv, s ); (*JavaEnv)->PopLocalFrame(JavaEnv, NULL); } SDL_ANDROID_ProcessDeferredEvents(); return 1; }
int SDL_ANDROID_CallJavaSwapBuffers() { if( !glContextLost ) { SDL_ANDROID_drawTouchscreenKeyboard(); } // Clear part of screen not used by SDL - on Android the screen contains garbage after each frame if( SDL_ANDROID_ForceClearScreenRect.w != 0 && SDL_ANDROID_ForceClearScreenRect.h != 0 ) { glPushMatrix(); glLoadIdentity(); glOrthox( 0, (SDL_ANDROID_sRealWindowWidth) * 0x10000, SDL_ANDROID_sRealWindowHeight * 0x10000, 0, 0, 1 * 0x10000 ); glColor4x(0, 0, 0, 0x10000); glEnableClientState(GL_VERTEX_ARRAY); GLshort vertices[] = { SDL_ANDROID_ForceClearScreenRect.x, SDL_ANDROID_ForceClearScreenRect.y, SDL_ANDROID_ForceClearScreenRect.x + SDL_ANDROID_ForceClearScreenRect.w, SDL_ANDROID_ForceClearScreenRect.y, SDL_ANDROID_ForceClearScreenRect.x + SDL_ANDROID_ForceClearScreenRect.w, SDL_ANDROID_ForceClearScreenRect.y + SDL_ANDROID_ForceClearScreenRect.h, SDL_ANDROID_ForceClearScreenRect.x, SDL_ANDROID_ForceClearScreenRect.y + SDL_ANDROID_ForceClearScreenRect.h }; glVertexPointer(2, GL_SHORT, 0, vertices); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); glDisableClientState(GL_VERTEX_ARRAY); glPopMatrix(); } if( ! (*JavaEnv)->CallIntMethod( JavaEnv, JavaRenderer, JavaSwapBuffers ) ) return 0; if( glContextLost ) { glContextLost = 0; __android_log_print(ANDROID_LOG_INFO, "libSDL", "OpenGL context recreated, refreshing textures"); SDL_ANDROID_VideoContextRecreated(); appRestoredCallback(); if(openALRestoredCallback) openALRestoredCallback(); } if( showScreenKeyboardDeferred ) { showScreenKeyboardDeferred = 0; (*JavaEnv)->CallVoidMethod( JavaEnv, JavaRenderer, JavaShowScreenKeyboard, (*JavaEnv)->NewStringUTF(JavaEnv, showScreenKeyboardOldText), showScreenKeyboardSendBackspace ); } SDL_ANDROID_ProcessDeferredEvents(); return 1; }