2012-04-04 56 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

相关问题