如何在Libgdx中支持OpenGL ES GL10,GL11和GL20?

时间:2011-09-29 23:03:46

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

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

1 个答案:

答案 0 :(得分: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的单独路径。