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 回答