2009-08-07 11 views
6

En conversaciones con algunos colegas, nos preguntamos si el trabajo de OpenGL desarrollado para Android o iPhone es realmente intercambiable dado que ambos admiten la especificación.OpenGL para Android y iPhone

O es la realidad de compartir OpenGL entre las dos plataformas más un caso de peculiaridades, ajustes y no tan fácil como uno podría haber esperado.

Respuesta

8

Una implementación de OpenGL normalmente consta de dos partes: 1. Parte específica de la plataforma. Esto tiene una función generalmente relacionada con la creación y visualización de superficies. 2. La API de OpenGL. Esta parte es la misma en todas las plataformas para la implementación específica de OpenGL, en el caso de Android, OpenGLES 1.0.

Lo que esto significa es que la mayor parte de su código OpenGL debe ser fácil de portar.
En C, puede tener glLoadIdentity();
En Java en Android, algo así como gl.glLoadIdentity();

Así que para la mayor parte de tu código puedes cortar y pegar, y luego buscar y reemplazar prefijos como 'gl'.

Ahora, por la parte divertida: realmente debe tener cuidado con la versión contra la que está codificando. OpenGL para el escritorio tiene API que no existen en OpenGLES. También hay algunos tipos de datos OpenGL específicos para cada plataforma. Además, tiene que lidiar con 1.0 (por ejemplo, Android) 1.1 (por ejemplo, iPhone) 2.0 (por ejemplo, iPhone GS). Las diferencias en API a menudo tienen que ver con la capacidad de hardware adicional, por lo que no es posible escribir un código de envoltura fácil para emular las características 2.0 en 1.0/1.1.

+1

También debería agregar que Android también puede soportar OGLES 1.1 y 2.0 dependiendo de la versión de Andriod. –

1

Ambas plataformas usan OpenGL ES, pero Wikipedia afirma que Android usa 1.0, mientras que el iPhone usa 1.1 (original y 3g) y 2.0 para el 3gs link. Es probable que al menos algunos programas utilicen funciones api no incluidas en 1.0, por lo que no habrá compatibilidad total entre los 2 (bien 3).

5

OpenGL ES en Android se realiza de acuerdo con Khronos Java GLES especificación JSR239, y envuelve GL llamadas en algo así como glinst.glBindBuffer (FloatBuffer.wrap (datos) ...) OpenGL ES en iPhone se hace utilizando stock GL. h archivos y la misma llamada se acaba de ver como glBindBuffer (datos ...)

el código no ser intercambiables y causará muchas peculiaridades, incluso antes de entrar en el lío del conjunto de las diferencias entre 1,0 1.1 y 2.0 APis.