Dor*_*ran 5 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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:解决方案:如果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
}
}
Run Code Online (Sandbox Code Playgroud)
bad*_*gic 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分别设置路径.
| 归档时间: |
|
| 查看次数: |
6601 次 |
| 最近记录: |