2012-04-04 67 views
6

中調用glEnableClientState()和glDisableClientState()我只要在onSurfaceCreated()方法GLSurfaceView.Renderer接口中調用glEnableClientState()一次。例如:什麼時候應該在android

public class GLRenderer implements GLSurfaceView.Renderer { 
    @Override 
    public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
     gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); 
     gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 
     ... 
} 

之後,我不再調用它們。我從來不會調用glDisableClientState()方法。但是我看到很多程序員都調用這兩種方法,經常把它們包裝在所有的繪圖調用中。

我的方法有什麼問題嗎?或者這是一種很好的做法,或者更有效的方法是將這些方法用於所有繪圖調用?

回答

3

我不認爲你的方法有任何問題,只要所有的繪製調用都需要相同的狀態。如果你正在繪製一些沒有法線/顏色的東西,你不希望啓用正常/顏色陣列等。

如果你所有的對象肯定使用相同的數組,那麼你的方法可能是最好的,因爲你可以消除不必要的opengl調用。在每個對象之後禁用所有內容對性能來說可能更糟糕,但總的來說,您不會無意中遺留一些您不想要的內容。

+0

謝謝。我已經計算出在示例代碼和庫中最常用的'glEnableClientState()'/'glDisableClientState()'可能是安全的,因爲啓用了所需的數組,並且當然它們在繪圖之後禁用了使用的數組,以避免產生負面干擾另一個繪圖代碼(可能不使用某些啓用的數組)。 – 2012-04-07 14:34:40

相關問題