我正在编写一个使用 GL10 的 3d 游戏,但我希望该应用程序支持 GL11 或 GL20(如果可用)。支持这三者的最佳设计是什么?或者这是一个愚蠢的差事,我应该只专注于支持一个版本?
我当前的想法是将 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
}
}
您实际上在 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。不过,您不太可能需要为 1.0 和 1.x 设置单独的路径,除非您直接使用 GLES 调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)