diff -r 93b540e4db8a android-project/src/org/libsdl/app/SDLActivity.java --- a/android-project/src/org/libsdl/app/SDLActivity.java mié jul 31 16:25:50 2013 -0300 +++ b/android-project/src/org/libsdl/app/SDLActivity.java vie ago 02 10:42:34 2013 -0300 @@ -72,6 +72,7 @@ // Set up the surface mEGLSurface = EGL10.EGL_NO_SURFACE; mSurface = new SDLSurface(getApplication()); + mEGLContext = EGL10.EGL_NO_CONTEXT; mLayout = new AbsoluteLayout(this); mLayout.addView(mSurface); @@ -248,6 +249,20 @@ public static boolean createGLContext(int majorVersion, int minorVersion, int[] attribs) { return initEGL(majorVersion, minorVersion, attribs); } + + public static void deleteGLContext() { + if (SDLActivity.mEGLDisplay != null && SDLActivity.mEGLContext != EGL10.EGL_NO_CONTEXT) { + EGL10 egl = (EGL10)EGLContext.getEGL(); + egl.eglMakeCurrent(SDLActivity.mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); + egl.eglDestroyContext(SDLActivity.mEGLDisplay, SDLActivity.mEGLContext); + SDLActivity.mEGLContext = EGL10.EGL_NO_CONTEXT; + + if (SDLActivity.mEGLSurface != EGL10.EGL_NO_SURFACE) { + egl.eglDestroySurface(SDLActivity.mEGLDisplay, SDLActivity.mEGLSurface); + SDLActivity.mEGLSurface = EGL10.EGL_NO_SURFACE; + } + } + } public static void flipBuffers() { flipEGL(); @@ -396,7 +411,7 @@ public static boolean createEGLSurface() { if (SDLActivity.mEGLDisplay != null && SDLActivity.mEGLConfig != null) { EGL10 egl = (EGL10)EGLContext.getEGL(); - if (SDLActivity.mEGLContext == null) createEGLContext(); + if (SDLActivity.mEGLContext == EGL10.EGL_NO_CONTEXT) createEGLContext(); if (SDLActivity.mEGLSurface == EGL10.EGL_NO_SURFACE) { Log.v("SDL", "Creating new EGL Surface"); diff -r 93b540e4db8a src/core/android/SDL_android.c --- a/src/core/android/SDL_android.c mié jul 31 16:25:50 2013 -0300 +++ b/src/core/android/SDL_android.c vie ago 02 10:42:34 2013 -0300 @@ -71,6 +71,7 @@ // method signatures static jmethodID midCreateGLContext; +static jmethodID midDeleteGLContext; static jmethodID midFlipBuffers; static jmethodID midAudioInit; static jmethodID midAudioWriteShortBuffer; @@ -120,6 +121,8 @@ midCreateGLContext = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "createGLContext","(II[I)Z"); + midDeleteGLContext = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, + "deleteGLContext","()V"); midFlipBuffers = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, "flipBuffers","()V"); midAudioInit = (*mEnv)->GetStaticMethodID(mEnv, mActivityClass, @@ -352,6 +355,13 @@ return success ? SDL_TRUE : SDL_FALSE; } +SDL_bool Android_JNI_DeleteContext(SDL_GLContext context) +{ + /* There's only one context, so the parameter is ignored for now */ + JNIEnv *env = Android_JNI_GetEnv(); + (*env)->CallStaticBooleanMethod(env, mActivityClass, midDeleteGLContext); +} + void Android_JNI_SwapWindow() { JNIEnv *mEnv = Android_JNI_GetEnv(); diff -r 93b540e4db8a src/video/android/SDL_androidgl.c --- a/src/video/android/SDL_androidgl.c mié jul 31 16:25:50 2013 -0300 +++ b/src/video/android/SDL_androidgl.c vie ago 02 10:42:34 2013 -0300 @@ -119,7 +119,9 @@ void Android_GL_DeleteContext(_THIS, SDL_GLContext context) { - __android_log_print(ANDROID_LOG_INFO, "SDL", "[STUB] GL_DeleteContext\n"); + if (context) { + Android_JNI_DeleteContext(context); + } } #endif /* SDL_VIDEO_DRIVER_ANDROID */