Estoy escribiendo un juego en 3D que está usando GL10, pero me gustaría que la aplicación sea compatible con GL11 o GL20 si está disponible. ¿Cuál es el mejor diseño para apoyar a los 3? ¿O es un mandado tonto y debería centrarme en apoyar una versión?¿Cómo soporto OpenGL ES GL10, GL11 y GL20 en Libgdx?
Mi idea actual es dividir mi función render() en renderGL10, renderGL11, renderGL20 y llamar a la función de renderización adecuada en función de la instancia GL disponible. Dentro de cada función de renderizado se encuentra la forma correcta de renderizar para la versión GL; es probable que haya superposición para GL10 y GL11. ¿Es esta una forma apropiada de manejar mi problema o hay una mejor manera?
public render(){
if (Gdx.graphics.isGL20Available()){
renderGL20();
} else if (Gdx.graphics.isGL11Available()){
renderGL11();
} else {
renderGL10();
}
}
EDIT: Solución: Si está disponible gl1.x, GL10 también está disponible (y Gdx.gl10 no es nulo). Por lo tanto, mi rendir código en general, debe estar estructurado de la siguiente manera:
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
}
}
Todavía no uso muchas de las partes de la biblioteca; Estoy explorando cómo quiero diseñarlo sin mucho conocimiento de gles2.0 o cómo libgdx trata a gl1.x. Estoy usando este juego para ampliar mis conocimientos de programación de juegos y GLES, por lo que me gustaría apoyar ambos para poder aprender GLSL. En función de su respuesta sobre 1.x, simplemente eché un vistazo rápido a la fuente para los backends de Android y Jogl y noté que cuando gl11 está disponible, Gdx.gl10 = Gdx.gl11; Esperaba que gl10 fuera nulo si se configuraran gl11 (de la misma manera que gl10 y gl11 son nulos cuando 2.0 está disponible). Esta y tu respuesta realmente ayudaron. – Doran