我正在编写一款使用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
}
}
答案 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的单独路径。