【问题标题】:When should I call glEnableClientState() and glDisableClientState() in android我什么时候应该在 android 中调用 glEnableClientState() 和 glDisableClientState()
【发布时间】:2012-04-07 03:48:46
【问题描述】:

我只是在GLSurfaceView.Renderer 接口的onSurfaceCreated() 方法中调用glEnableClientState() 一次。例如:

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() 方法。但我看到许多程序员调用这两种方法时经常将它们包裹在所有绘图调用中。

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

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

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

    如果您的所有对象都确定使用相同的数组,那么您的方法可能是最好的,因为您可以消除不必要的 opengl 调用。在每个对象之后禁用所有内容可能会降低性能,但通常更安全的是您不会意外启用您不想要的东西。

    【讨论】:

    • 谢谢。我发现glEnableClientState()/glDisableClientState() 最常用于示例代码和库中,可能是为了确保启用所需的数组是安全的,当然它们在绘图后禁用使用的数组以避免对另一个绘图代码产生负面干扰(可能不使用某些已启用的数组)。
    • 另外请记住,在使用 NVIDIA 卡的系统上,如果您忽略将启用/禁用调用封装在绘图调用周围,您将获得不稳定的应用程序和/或崩溃。见:stackoverflow.com/q/30406971/2398263
    猜你喜欢
    • 2013-03-11
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多