2012-05-18 27 views
2

[編輯:固定!問題似乎是在佈局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

我一直要求的重點,無效,請求佈局的組合,等等,但沒有成功。我希望這裏有人能幫助我看到光明!

+0

你試過記錄glGetError之類的結果嗎?這可能會給你一些線索,看看發生了什麼。此外,請嘗試在您的GLSurfaceView.Renderer.onDrawFrame中設置渲染狀態,矩陣等,以確保僅在您的上下文綁定到顯示器後才調用渲染狀態,矩陣等。 – fluffy

+0

謝謝。我正在使用DEBUG_CHECK_GL_ERROR(更多設置代碼清單編輯的問題)。我試着將所有的GL設置移到第一次onDrawFrame被調用,行爲沒有改變。 – Darrell

回答

1

回答我自己的問題:固定!問題似乎是在佈局xml中有一個不可見的VideoView覆蓋我的GLSurfaceView。從佈局中移除VideoView可恢復預期的行爲。