2012-04-25 15 views
7

Estoy familiarizado con las diferencias básicas entre OpenGL y OpenGL ES, p. no glBegin, glEnd, no quads, etc.¿Guía para escribir código compatible con OpenGL y OpenGL ES?

Por lo tanto, mi pregunta no es sobre las diferencias entre las dos API, sino sobre escribir código que realmente funcione en ambas API y sus diversas implementaciones, especialmente con respecto a ES, donde las implementaciones parecen variar más.

Naturalmente, eso significa que se ajustan a las características que están presentes en las dos API y la sintaxis idéntica, nada demasiado sofisticado y vanguardista, con OpenGL ES 2 como el mínimo común denominador.

+0

Puede encontrar lectura interesante [MaliOpenGLESEmulator] (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0511c/BABBIBEA.html) documentos. Es un emulador de OpenGL ES (para MAC/PC) que convierte llamadas de OpenGL ES a OpenGL. Enumeran algunos detalles sobre la diferencia entre GL 2.0 y GLES 2.0. Como la falta (obviamente) de datos de punto fijo en GL, especificadores de precisión de sombreado y algunas otras cosas menores. – kerim

Respuesta

2

De acuerdo con Khronos OpenGL ES es un subconjunto de OpenGL de escritorio, por lo que para escribir código compatible solo necesita utilizar la documentación de OpenGL ES.

Una cita de http://www.khronos.org/opengles/

OpenGL ES es un derecho-libre, API multiplataforma para 2D con todas las funciones y gráficos en 3D en sistemas embebidos - incluyendo consolas, móviles, electrodomésticos y vehículos. Se compone de subconjuntos bien definidos de escritorio OpenGL

EDITAR: Como señaló Justin Meiners en los comentarios, en realidad hay algunas diferencias en lo que respecta a los detalles finos. La respuesta de David C. Bishop tiene más información sobre esto.

+0

Esto no es verdad. Si bien la mayoría del código se transferirá sin cambios, son problemas de compatibilidad. –

+0

@JustinMeiners: Tengo curiosidad por esas diferencias documentadas o errores en la implementación? No he encontrado ninguno de estos problemas de compatibilidad y la documentación de khronos todavía usa la palabra "subconjunto". Si no es un subconjunto estricto, me gustaría actualizar mi respuesta. –

+0

Algunos ejemplos de diferencias serían los calificadores de precisión de sombreado, las diferencias en los tamaños garantizados. Si mira el documento ARB_ES2_compatibility en la otra respuesta, describe todos los cambios que tienen que hacer para ser realmente compatibles. –

2

Usted puede estar interesado en la nueva extensión de OpenGL ES compatibilidad ARB_ES2_compatibility (añadido al núcleo de OpenGL 4.1)

supuesto de hecho utilizando la extensión requiere soporte para nuevos OpenGL 4.1 escritorio, pero se puede leer a través de ellos y ver qué fue necesario para obtener soporte ES en el escritorio y evitar eso en su código ES tanto como sea posible. Sin embargo, puede haber algunas cosas que no son compatibles con las versiones anteriores de escritorio OpenGL, principalmente algunos elementos de sombreado como la precisión de punto flotante.

También hay ARB_ES3_compatibility (núcleo en OpenGL 4.3), pero es seguro ignorarlo ya que es para OpenGL ES 3.0).