Loading opengl/java/android/opengl/GLSurfaceView.java +29 −0 Original line number Diff line number Diff line Loading @@ -999,6 +999,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback GL10 gl = null; boolean createEglSurface = false; boolean sizeChanged = false; boolean wantRenderNotification = false; boolean doRenderNotification = false; int w = 0; int h = 0; Runnable event = null; Loading Loading @@ -1044,6 +1046,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sGLThreadManager.notifyAll(); } if (doRenderNotification) { wantRenderNotification = false; doRenderNotification = false; mRenderComplete = true; sGLThreadManager.notifyAll(); } // Ready to draw? if ((!mPaused) && mHasSurface && (mWidth > 0) && (mHeight > 0) Loading @@ -1063,6 +1072,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sizeChanged = true; w = mWidth; h = mHeight; wantRenderNotification = true; if (DRAW_TWICE_AFTER_SIZE_CHANGED) { // We keep mRequestRender true so that we draw twice after the size changes. // (Once because of mSizeChanged, the second time because of mRequestRender.) Loading Loading @@ -1119,6 +1130,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback Log.i("GLThread", "egl surface lost tid=" + getId()); } } if (wantRenderNotification) { doRenderNotification = true; } } } finally { /* Loading Loading @@ -1201,7 +1216,20 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mHeight = h; mSizeChanged = true; mRequestRender = true; mRenderComplete = false; sGLThreadManager.notifyAll(); // Wait for thread to react to resize and render a frame while (! mExited && !mPaused && !mRenderComplete ) { if (LOG_SURFACE) { Log.i("Main thread", "onWindowResize waiting for render complete."); } try { sGLThreadManager.wait(); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } } } Loading Loading @@ -1247,6 +1275,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback private int mHeight; private int mRenderMode; private boolean mRequestRender; private boolean mRenderComplete; private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>(); // End of member variables protected by the sGLThreadManager monitor. Loading Loading
opengl/java/android/opengl/GLSurfaceView.java +29 −0 Original line number Diff line number Diff line Loading @@ -999,6 +999,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback GL10 gl = null; boolean createEglSurface = false; boolean sizeChanged = false; boolean wantRenderNotification = false; boolean doRenderNotification = false; int w = 0; int h = 0; Runnable event = null; Loading Loading @@ -1044,6 +1046,13 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sGLThreadManager.notifyAll(); } if (doRenderNotification) { wantRenderNotification = false; doRenderNotification = false; mRenderComplete = true; sGLThreadManager.notifyAll(); } // Ready to draw? if ((!mPaused) && mHasSurface && (mWidth > 0) && (mHeight > 0) Loading @@ -1063,6 +1072,8 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback sizeChanged = true; w = mWidth; h = mHeight; wantRenderNotification = true; if (DRAW_TWICE_AFTER_SIZE_CHANGED) { // We keep mRequestRender true so that we draw twice after the size changes. // (Once because of mSizeChanged, the second time because of mRequestRender.) Loading Loading @@ -1119,6 +1130,10 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback Log.i("GLThread", "egl surface lost tid=" + getId()); } } if (wantRenderNotification) { doRenderNotification = true; } } } finally { /* Loading Loading @@ -1201,7 +1216,20 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback mHeight = h; mSizeChanged = true; mRequestRender = true; mRenderComplete = false; sGLThreadManager.notifyAll(); // Wait for thread to react to resize and render a frame while (! mExited && !mPaused && !mRenderComplete ) { if (LOG_SURFACE) { Log.i("Main thread", "onWindowResize waiting for render complete."); } try { sGLThreadManager.wait(); } catch (InterruptedException ex) { Thread.currentThread().interrupt(); } } } } Loading Loading @@ -1247,6 +1275,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback private int mHeight; private int mRenderMode; private boolean mRequestRender; private boolean mRenderComplete; private ArrayList<Runnable> mEventQueue = new ArrayList<Runnable>(); // End of member variables protected by the sGLThreadManager monitor. Loading