2011-05-03 17 views
8

Ha pasado un tiempo desde que salió el iPhone 3GS, y ahora hay podría ser suficiente cuota de mercado de los dispositivos de soporte OpenGL ES 2.0 para garantizar su desarrollo.Transición de OpenGL ES 1.1 a OpenGL ES 2.0

Pero la situación es un montón de desarrolladores probablemente ya tienen enormes bases de código en OpenGL ES 1.1

¿Cómo se transitionf ROM ES 1.1 a 2.0 ES? Supongo que las matrices deben ser atendidas, así como cosas como GL_FOG, GL_CULL tal vez?

¿Es posible escribir "sustitutos" para estas funciones, por ejemplo, su propio glTranslatef, glPushmatrix, etc.? ¿Esto significará un golpe de rendimiento?

¿Qué otras consideraciones existen para la transición a ES 2.0? ¿Qué ventajas y desventajas (además del obvio problema de soporte del dispositivo) conlleva usar cualquiera de estos?

Considerando la cantidad de etiquetas es 2.0 en comparación con las etiquetas es estándar en stackoverflow, parece que aún no es el momento para 2.0.

Respuesta

17

No sólo tiene que ir por la actividad en las etiquetas de desbordamiento de pila cuando se trata de determinar si desea o no utilizar OpenGL ES 2.0. Por un lado, no todas las preguntas 2.0 o relacionadas con el sombreador están etiquetadas como tales. Además, había mucha información sobre OpenGL ES 1.1 en el lanzamiento del SDK de iPhone o poco después, por lo que las personas están mucho más familiarizadas con esa API. Claramente hay mucho interés en OpenGL ES 2.0, como lo demuestra el hecho de que mi sesión de una clase sobre el tema es de lejos la más popular de todas, my course videos.

En su mayor parte, la forma en que maneja su geometría será la misma entre 1.1 y 2.0, así como cosas como sus framebuffers, pero todo lo demás cambia de ser determinado por funciones incorporadas a sus propios sombreadores. Tendrá que escribir un código para replicar funciones simples como usar la matriz de vista modelo o texturizar, pero esas tienden a requerir solo unas pocas líneas en un sombreado. Por ejemplo, usando la matriz de vista del modelo para ajustar sus vértices es tan simple como colocar una línea como esta en su vértice shader:

vec4 transformedPosition = modelViewProjMatrix * position; 

Personalmente, sustituye la glRotate(), etc. funciones a long while ago using the Core Animation helper functions para manipular lo que efectivamente es una matriz de vista modelo. Esto hizo que sea trivial mover ese código a OpenGL ES 2.0.

Jeff LaMarche también tiene una clase de ayuda extremadamente útil para envolver la mayor parte del código de configuración de su programa de sombreado en su artículo here.

Para obtener una guía excelente sobre cómo realizar la transición a OpenGL ES 1.1, consulte el artículo "Migración de OpenGL ES 1.0 a OpenGL ES 2.0" que es un capítulo del libro GPU Pro y se puede encontrar en la documentación que acompaña al PowerVR SDK.

He explicado lo que OpenGL ES 2.0 puede ser útil en mis respuestas anteriores here y here, pero quizás sería útil demostrar un antes y un después en lo que respecta a lo que la nueva API puede proporcionarle.

OpenGL ES 1.1:

OpenGL ES 1.1

OpenGL ES 2.0:

OpenGL ES 2.0

Con suerte, se puede ver la recompensa de la sustitución de algunas de las funciones integradas con los shaders.

+0

Excelente ilustración de sus puntos. ¿Eres el tipo que hizo la aplicación de las moléculas? Supongo que por ese ejemplo en las fotos, ¿la cifra de rendimiento es la misma? – kamziro

+0

@kamziro - Sí, ese soy yo. La captura de pantalla anterior es de la versión 2.0 que debería estar en revisión para el final de la semana. No estoy diciendo que no veas una diferencia de rendimiento entre la geometría sombreada simple como en mi ejemplo 1.1 y las esferas uniformes generadas procedimentalmente en mi 2.0, solo que serás capaz de lograr efectos más avanzados. Mi procesador 2.0 es significativamente más lento que el 1.1, pero eso es comparar manzanas con naranjas porque este último hace mucho más. El tamaño de la geometría requerida para acercarse a la segunda imagen en 1.1 anularía la GPU. –

1

Si tiene proyectos existentes, no recomendaría pasar a 2.0, considerando que el esfuerzo requerido es muy probablemente más de lo que valdría la pena. Dicho esto, para cualquier proyecto nuevo, no hay razón para siquiera molestarse en considerar 1.1 más en mi opinión. La mayoría de los dispositivos que se han vendido son 3GS o 4S, y ambos son más que capaces de manejar 2.0.

1

OpenGL ES 2.0 tiene algunas cosas en común con OpenGL ES 1.1 (me refiero a la representación). Para cada renderizado necesitarás un sombreador. Por ejemplo, FOG también se crea con shader. Pero tendrás más poder.

1 a @jer su respuesta