diff options
| author | 2010-10-26 18:25:56 -0700 | |
|---|---|---|
| committer | 2010-10-26 18:25:56 -0700 | |
| commit | 6f688ae7fb4e19acd80c6b006d24b9701fc3f0f2 (patch) | |
| tree | 36e4d55546164666e90d9dc6a48cd9b4c227ce07 | |
| parent | 8aebc966d27081bcd75c3a4eaca05bc575f5fa16 (diff) | |
| parent | 2ff6a824619ac6849ba9f36d97590acf74f62518 (diff) | |
Merge "Allow a GLSurfaceView to be reattached to a window."
| -rw-r--r-- | opengl/java/android/opengl/GLSurfaceView.java | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java index c937b068619b..0d854042d775 100644 --- a/opengl/java/android/opengl/GLSurfaceView.java +++ b/opengl/java/android/opengl/GLSurfaceView.java @@ -155,6 +155,8 @@ import android.view.SurfaceView; * */ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback { + private final static String TAG = "GLSurfaceView"; + private final static boolean LOG_ATTACH_DETACH = false; private final static boolean LOG_THREADS = false; private final static boolean LOG_PAUSE_RESUME = false; private final static boolean LOG_SURFACE = false; @@ -306,6 +308,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback if (mEGLWindowSurfaceFactory == null) { mEGLWindowSurfaceFactory = new DefaultWindowSurfaceFactory(); } + mRenderer = renderer; mGLThread = new GLThread(renderer); mGLThread.start(); } @@ -525,10 +528,34 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback /** * This method is used as part of the View class and is not normally * called or subclassed by clients of GLSurfaceView. + */ + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + if (LOG_ATTACH_DETACH) { + Log.d(TAG, "onAttachedToWindow reattach =" + mDetached); + } + if (mDetached && (mRenderer != null)) { + mGLThread = new GLThread(mRenderer); + mGLThread.start(); + } + mDetached = false; + } + + /** + * This method is used as part of the View class and is not normally + * called or subclassed by clients of GLSurfaceView. * Must not be called before a renderer has been set. */ @Override protected void onDetachedFromWindow() { + if (LOG_ATTACH_DETACH) { + Log.d(TAG, "onDetachedFromWindow"); + } + if (mGLThread != null) { + mGLThread.requestExitAndWait(); + } + mDetached = true; super.onDetachedFromWindow(); } @@ -1726,6 +1753,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback private boolean mSizeChanged = true; private GLThread mGLThread; + private Renderer mRenderer; + private boolean mDetached; private EGLConfigChooser mEGLConfigChooser; private EGLContextFactory mEGLContextFactory; private EGLWindowSurfaceFactory mEGLWindowSurfaceFactory; |