我什么时候应该在android中调用glEnableClientState()和glDisableClientState()

时间:2012-04-04 16:18:09

标签: android opengl-es

我只需在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()方法。但我发现很多程序员都会调用这两种方法,经常将它们包装在所有绘图调用中。

我的方法有什么问题吗?或者使用围绕所有绘图调用包装它们的方法是一种好习惯还是更有效?

1 个答案:

答案 0 :(得分:3)

如果您的所有绘制调用都需要相同的状态,我认为您的方法没有任何问题。如果你正在绘制没有法线/颜色的东西,你不希望启用普通/颜色数组等。

如果所有对象都确定使用相同的数组,那么您的方法可能是最好的,因为您可以消除不必要的opengl调用。禁用每个对象之后的所有内容可能会对性能造成影响,但通常情况下更安全的是,您不会意外地保留您不想要的内容。