public void onDrawFrame(GL10 gl1) { GL11 gl = (GL11) gl1; if (!mFirstDraw) { Log.i(TAG, "First Draw"); } mFirstDraw = true; // setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // Rebuild the display lists if the render tree has changed. if (mListsDirty) { updateLists(); } boolean wasLoadingExpensiveTextures = isLoadingExpensiveTextures(); boolean loadingExpensiveTextures = false; int numTextureThreads = sTextureLoadThreads.length; for (int i = 2; i < numTextureThreads; ++i) { if (sTextureLoadThreads[i].mIsLoading) { loadingExpensiveTextures = true; break; } } if (loadingExpensiveTextures != wasLoadingExpensiveTextures) { mLoadingExpensiveTexturesStartTime = loadingExpensiveTextures ? SystemClock.uptimeMillis() : 0; } // Upload new textures. processTextures(false); // Update the current time and frame time interval. long now = SystemClock.uptimeMillis(); final float dt = 0.001f * Math.min(50, now - mFrameTime); mFrameInterval = dt; mFrameTime = now; // Dispatch the current touch event. processCurrentEvent(); processTouchEvent(); // Run the update pass. final Lists lists = sLists; synchronized (lists) { final ArrayList<Layer> updateList = lists.updateList; boolean isDirty = false; for (int i = 0, size = updateList.size(); i != size; ++i) { boolean retVal = updateList.get(i).update(this, mFrameInterval); isDirty |= retVal; } if (isDirty) { requestRender(); } // Clear the depth buffer. gl.glClear(GL11.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL11.GL_SCISSOR_TEST); gl.glScissor(0, 0, getWidth(), getHeight()); // Run the opaque pass. gl.glDisable(GL11.GL_BLEND); final ArrayList<Layer> opaqueList = lists.opaqueList; for (int i = opaqueList.size() - 1; i >= 0; --i) { final Layer layer = opaqueList.get(i); if (!layer.mHidden) { layer.renderOpaque(this, gl); } } // Run the blended pass. gl.glEnable(GL11.GL_BLEND); final ArrayList<Layer> blendedList = lists.blendedList; for (int i = 0, size = blendedList.size(); i != size; ++i) { final Layer layer = blendedList.get(i); if (!layer.mHidden) { layer.renderBlended(this, gl); } } gl.glDisable(GL11.GL_BLEND); } }