[編輯:固定!問題似乎是在佈局xml中有一個不可見的VideoView覆蓋我的GLSurfaceView。編輯#2:使GLSurfaceView使用ARGB888應該也解決這個問題(不能混合不同的顏色格式表面,我假設),已經做到這一點,以顯示GL在視頻上。]GLSurfaceView有時黑色的蜂窩,在ICS上工作
我使用GLSurfaceView成功,但在Android 3.2平板電腦上看到奇怪的問題。 GLSurfaceView活動使用AndroidManifest強制橫向。如果我從縱向方向上的現有活動開始,屏幕會旋轉,並且GLSurfaceView按預期工作。如果我從橫向活動開始它,GLSurfaceView是黑色的。這不僅僅是一個紋理問題,glClearColor也不會通過glDrawArrays填充實心三角形。
如果我旋轉屏幕(刪除清單指令後,手動,或通過有或沒有明顯的指示setRequestedOrientation)就開始工作。
如果我按下後退按鈕,我會在活動退出時看到預期呈現的GLSurfaceView片刻。
如果我開始一個新的活動(一個SettingsActivity),我會在開始新活動時以及按下後退按鈕返回到GLSurfaceView活動時看到預期呈現的GLSurfaceView閃爍片刻(然後屏幕再次變黑),,但前提是設備處於橫向方向。如果我將設備置於縱向模式,然後開始我的設置活動我沒有看到GL閃爍,但在按下後旋轉到縱向,當GLSurfaceView活動恢復時,我看到閃爍。
我在模擬器和Android 4.0.4手機中都看不到這種行爲。
我在onCreate中創建GLSurfaceView並將其添加到我的佈局xml中的FrameLayout中。
我正在調用GLSurfaceView暫停並從相應的活動方法恢復方法。這裏是我的onSurfaceCreated和onSurfaceChanged處理程序:
public final static void onSurfaceCreated(GL10 pGL) {
pGL.glClearColor(0.5f, 0.5f, 0.5f, 1f);
pGL.glEnable(GL10.GL_TEXTURE_2D);
pGL.glEnable(GL10.GL_BLEND);
pGL.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
pGL.glShadeModel(GL10.GL_FLAT);
pGL.glDisable(GL10.GL_DEPTH_TEST);
pGL.glDisable(GL10.GL_DITHER);
pGL.glDisable(GL10.GL_LIGHTING);
}
public final static void onSurfaceChanged(GL10 pGL, int pWidth, int pHeight) {
pGL.glViewport(0, 0, pWidth, pHeight);
pGL.glMatrixMode(GL10.GL_PROJECTION);
pGL.glLoadIdentity();
pGL.glOrthof(0f, pWidth, 0f, pHeight, -1f, 1f);
pGL.glMatrixMode(GL10.GL_MODELVIEW);
}
下面是我如何設置GLSurfaceView:
mGLSurfaceView = new GLSurfaceView(pContext);
mGLSurfaceView.setEGLConfigChooser(false); // no depth buffer
mGLSurfaceView.setRenderer(this);
mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR);
我加了登錄驗證onSurfaceCreated和onSurfaceChanged(與預期的大小),以及onDrawFrame正在調用。
我發現從別人使用TabHost內GLSurfaceView一份類似的報告,但沒有很好的解決:https://groups.google.com/forum/?fromgroups#!topic/android-developers/fXPfgw6AoeY
我一直要求的重點,無效,請求佈局的組合,等等,但沒有成功。我希望這裏有人能幫助我看到光明!
你試過記錄glGetError之類的結果嗎?這可能會給你一些線索,看看發生了什麼。此外,請嘗試在您的GLSurfaceView.Renderer.onDrawFrame中設置渲染狀態,矩陣等,以確保僅在您的上下文綁定到顯示器後才調用渲染狀態,矩陣等。 – fluffy
謝謝。我正在使用DEBUG_CHECK_GL_ERROR(更多設置代碼清單編輯的問題)。我試着將所有的GL設置移到第一次onDrawFrame被調用,行爲沒有改變。 – Darrell