2012-04-04 5 views
6

glEnableClientState()onSurfaceCreated()の方法でGLSurfaceView.Rendererインターフェイスに1回だけ呼び出してください。例:androidでglEnableClientState()とglDisableClientState()を呼び出す必要があります

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()'が、必要な配列が有効になっていること、そしてもちろん図面の後で使用されている配列を無効にして、別の描画コード(使用可能な配列の一部を使用していない可能性があります)。 –

関連する問題