5

我正在编写使用 GL10 的 3d 游戏,但我希望应用程序支持 GL11 或 GL20(如果可用)。支持所有 3 的最佳设计是什么?或者这是一个愚蠢的差事,我应该只专注于支持一个版本?

我目前的想法是将我的 render() 函数拆分为 renderGL10、renderGL11、renderGL20 并根据可用的 GL 实例调用适当的渲染函数。每个渲染函数内部都有 GL 版本的正确渲染方法;GL10 和 GL11 可能会有重叠。这是处理我的问题的适当方法还是有更好的方法?

public render(){
  if (Gdx.graphics.isGL20Available()){
    renderGL20();
  } else if (Gdx.graphics.isGL11Available()){
    renderGL11();
  } else { 
    renderGL10();
  }
}

编辑:解决方案:如果 gl1.x 可用,则 gl10 也可用(并且 Gdx.gl10 不为空)。所以,我的渲染代码一般应该如下结构:

public render(){
  // Use Gdx.gl for any gl calls common to all versions
  if (Gdx.graphics.isGL20Available()){
    // Use Gdx.GL20 for all gl calls
  } else {
    if (Gdx.graphics.isGL11Available()){
      // Use Gdx.gl11 for any gl11 call not supported by gl10
    } 
    // Use Gdx.gl10 for all gl calls
  }
}
4

1 回答 1

10

您实际上是在 OpenGL ES 2.0 路径中使用着色器,还是依赖 SpriteBatch 和 consorts 为您处理脏细节?在后一种情况下,使用 GLES 2.0 并没有真正的好处(除了两个纹理的非功率,这在某些设备上可能会更慢)

通常您在 GLES 1.x 或 2.0 之间进行选择。如果您使用 1.x,则无需执行任何操作。如果您想使用 2.0,您必须创建一个 AndroidApplicationConfig 并将 useGL20 标志设置为 true。如果运行应用程序的设备不支持 GLES 2.0,libgdx 将回退到 1.x。然后,您可以使用上面的渲染循环,如果可用,它将使用 GLES 2.0,否则回退到 1.x。不过,除非您直接使用 GLES 调用,否则您不太可能必须为 1.0 和 1.x 提供单独的路径。

于 2011-10-16T10:19:03.890 回答