【问题标题】:How do I support OpenGL ES GL10, GL11, and GL20 in Libgdx?如何在 Libgdx 中支持 OpenGL ES GL10、GL11 和 GL20?
【发布时间】:2011-09-29 23:03:46
【问题描述】:

我正在编写使用 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
  }
}

【问题讨论】:

    标签: java opengl-es opengl-es-2.0 libgdx


    【解决方案1】:

    您实际上是在 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 设置单独的路径。

    【讨论】:

    • 我还没有使用图书馆的很多艺术部分;我正在探索如何在不了解 gles2.0 或 libgdx 如何处理 gl1.x 的情况下设计它。我正在使用这个游戏来扩展我对游戏编程和 GLES 的了解,所以我想同时支持这两者,这样我就可以尝试学习 GLSL。根据您对 1.x 的回答,我只是快速查看了 Android 和 Jogl 后端的源代码,并注意到当 gl11 可用时,Gdx.gl10 = Gdx.gl11;如果设置了 gl11,我预计 gl10 将为空(与 2.0 可用时 gl10 和 gl11 为空的方式相同)。这和你的回答真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2014-07-29
    相关资源
    最近更新 更多