2011-09-29 14 views
5

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 
    } 
} 

Respuesta

10

¿Usted realmente utiliza shaders en su camino OpenGL ES 2.0 o qué confiar en SpriteBatch y consortes para manejar los detalles sucios para usted? En el último caso, no hay un beneficio real al usar GLES 2.0 (aparte de la falta de potencia de dos texturas, que podría ser más lenta en algunos dispositivos)

Normalmente se elige entre GLES 1.xo 2.0. Si usa 1.x, no tiene que hacer nada. Si desea utilizar 2.0, debe crear una AndroidApplicationConfig y establecer el flag useGL20 en verdadero. Si GLES 2.0 no es compatible con el dispositivo en el que ejecuta su aplicación, libgdx recurrirá a 1.x. A continuación, puede utilizar su ciclo de representación anterior que utilizará GLES 2.0 si está disponible y, de lo contrario, volverá a 1.x. Sin embargo, es poco probable que tenga que tener rutas de acceso separadas para 1.0 y 1.x, a menos que use llamadas GLES directamente.

+1

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