diff --git a/android/testproject/jni/app-android.c b/android/testproject/jni/app-android.c index e91329a81..6d458a99e 100644 --- a/android/testproject/jni/app-android.c +++ b/android/testproject/jni/app-android.c @@ -55,6 +55,7 @@ void* sdlThreadProc(void* args){ __android_log_print(ANDROID_LOG_INFO, "SDL", "Couldn't make current: 0x%x", eglGetError()); return NULL; } + return (void *)SDL_main(); } @@ -143,14 +144,40 @@ void Java_org_libsdl_android_TestGLSurfaceView_nativePause( JNIEnv* env ) Render the next frame *******************************************************************************/ +volatile int frames = 0; +volatile int startSDL = 0; + +//eglSwapBuffers(mDisplay, mDraw); + void Java_org_libsdl_android_TestRenderer_nativeRender( JNIEnv* env ) { - //TODO: Render here + __android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: BeginRender"); - pthread_mutex_lock(&mSDLRenderMutex); - pthread_cond_signal(&mSDLRenderCondition); //wake up the SDL thread - pthread_mutex_unlock(&mSDLRenderMutex); + //Let the SDL thread do an entire run + int lastFrames = frames; + startSDL = 1; - //__android_log_print(ANDROID_LOG_INFO, "SDL", "Unlocked"); + //wait for it to finish + while(lastFrames == frames){ + ; + } + __android_log_print(ANDROID_LOG_INFO, "SDL", "JNI: EndRender"); } + +void sdl_render(){ + + //When we get here, we've accumulated a full frame + + __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: BeginRender"); + + frames++; + + while(startSDL == 0){ + ; + } + startSDL = 0; + + __android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: EndRender"); +} + diff --git a/android/testproject/jni/lesson05.c b/android/testproject/jni/lesson05.c index 329507704..40fa4afae 100644 --- a/android/testproject/jni/lesson05.c +++ b/android/testproject/jni/lesson05.c @@ -236,7 +236,7 @@ int drawGLScene( GLvoid ) glViewport(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); - glClearColorx(0,0,Frames,255); + glClearColorx(0,0,0,255); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); glMatrixMode(GL_PROJECTION); @@ -335,6 +335,8 @@ int drawGLScene( GLvoid ) } } + + return( TRUE ); } diff --git a/android/testproject/src/org/libsdl/android/TestActivity.java b/android/testproject/src/org/libsdl/android/TestActivity.java index 5777d42ee..9581f9ea2 100644 --- a/android/testproject/src/org/libsdl/android/TestActivity.java +++ b/android/testproject/src/org/libsdl/android/TestActivity.java @@ -41,6 +41,8 @@ class TestGLSurfaceView extends GLSurfaceView { super(context); mRenderer = new TestRenderer(); setRenderer(mRenderer); + + //setRenderMode(RENDERMODE_WHEN_DIRTY); } public boolean onTouchEvent(final MotionEvent event) { diff --git a/src/video/android/SDL_androidgl.c b/src/video/android/SDL_androidgl.c index b10f57615..a6b9b0bad 100644 --- a/src/video/android/SDL_androidgl.c +++ b/src/video/android/SDL_androidgl.c @@ -43,6 +43,7 @@ These things are in the JNI android support */ extern pthread_mutex_t mSDLRenderMutex; extern pthread_cond_t mSDLRenderCondition; +extern void sdl_render(); /* GL functions */ int Android_GL_LoadLibrary(_THIS, const char *path){ @@ -89,12 +90,14 @@ int Android_GL_GetSwapInterval(_THIS){ void Android_GL_SwapWindow(_THIS, SDL_Window * window){ +/* pthread_mutex_lock(&mSDLRenderMutex); pthread_cond_wait(&mSDLRenderCondition, &mSDLRenderMutex); pthread_mutex_unlock(&mSDLRenderMutex); - +*/ //__android_log_print(ANDROID_LOG_INFO, "SDL", "[STUB] GL_SwapWindow\n"); + sdl_render(); }