6

インターフェイスのメソッドでglEnableClientState()一度呼び出すだけです。例えば:onSurfaceCreated()GLSurfaceView.Renderer

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()。しかし、多くのプログラマーが両方のメソッドを呼び出して、すべての描画呼び出しをラップすることがよくあります。

私のアプローチに何か問題がありますか?それとも、すべての描画呼び出しをラップするアプローチを使用する方が良い方法ですか、それともより効率的ですか?

4

1 に答える 1

3

すべての描画呼び出しが同じ状態を必要とする場合、アプローチに問題はないと思います。法線/色なしで何かを描画している場合、法線/色の配列を有効にしたくないなど.

すべてのオブジェクトが確実に同じ配列を使用している場合は、不必要な opengl 呼び出しを排除できるため、その方法がおそらく最適です。各オブジェクトの後にすべてを無効にすると、パフォーマンスが低下する可能性がありますが、一般的には、不要なものを誤って有効にしたままにしない方が安全です。

于 2012-04-06T19:48:46.877 に答える