--- a/android-project/src/org/libsdl/app/SDLActivity.java 2013-06-02 10:36:30.069981000 +0300 +++ b/android-project/src/org/libsdl/app/SDLActivity.java 2013-06-04 15:46:23.900940000 +0300 @@ -292,29 +292,42 @@ // EGL functions public static boolean initEGL(int majorVersion, int minorVersion, int[] attribs) { try { - if (SDLActivity.mEGLDisplay == null) { - Log.v("SDL", "Starting up OpenGL ES " + majorVersion + "." + minorVersion); + Log.v("SDL", "Starting up OpenGL ES " + majorVersion + "." + minorVersion); - EGL10 egl = (EGL10)EGLContext.getEGL(); + EGL10 egl = (EGL10)EGLContext.getEGL(); + + if (SDLActivity.mEGLContext != null) { + egl.eglMakeCurrent(SDLActivity.mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); + egl.eglDestroyContext(SDLActivity.mEGLDisplay, SDLActivity.mEGLContext); + SDLActivity.mEGLContext = null; + } + if (SDLActivity.mEGLSurface != null) { + egl.eglDestroySurface(SDLActivity.mEGLDisplay, SDLActivity.mEGLSurface); + SDLActivity.mEGLSurface = null; + } + if (SDLActivity.mEGLDisplay != null) { + egl.eglTerminate(SDLActivity.mEGLDisplay); + SDLActivity.mEGLDisplay = null; + } - EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); + EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - int[] version = new int[2]; - egl.eglInitialize(dpy, version); - - EGLConfig[] configs = new EGLConfig[1]; - int[] num_config = new int[1]; - if (!egl.eglChooseConfig(dpy, attribs, configs, 1, num_config) || num_config[0] == 0) { - Log.e("SDL", "No EGL config available"); - return false; - } - EGLConfig config = configs[0]; - - SDLActivity.mEGLDisplay = dpy; - SDLActivity.mEGLConfig = config; - SDLActivity.mGLMajor = majorVersion; - SDLActivity.mGLMinor = minorVersion; + int[] version = new int[2]; + egl.eglInitialize(dpy, version); + + EGLConfig[] configs = new EGLConfig[1]; + int[] num_config = new int[1]; + if (!egl.eglChooseConfig(dpy, attribs, configs, 1, num_config) || num_config[0] == 0) { + Log.e("SDL", "No EGL config available"); + return false; } + EGLConfig config = configs[0]; + + SDLActivity.mEGLDisplay = dpy; + SDLActivity.mEGLConfig = config; + SDLActivity.mGLMajor = majorVersion; + SDLActivity.mGLMinor = minorVersion; + return SDLActivity.createEGLSurface(); } catch(Exception e) { @@ -341,7 +354,9 @@ public static boolean createEGLSurface() { if (SDLActivity.mEGLDisplay != null && SDLActivity.mEGLConfig != null) { EGL10 egl = (EGL10)EGLContext.getEGL(); - if (SDLActivity.mEGLContext == null) createEGLContext(); + if (!createEGLContext()) { + return false; + } Log.v("SDL", "Creating new EGL Surface"); EGLSurface surface = egl.eglCreateWindowSurface(SDLActivity.mEGLDisplay, SDLActivity.mEGLConfig, SDLActivity.mSurface, null);