2011-03-31 14 views
7

Estoy trabajando en una aplicación de escritorio multiplataforma con pesados ​​gráficos en 2-D. Uso la especificación OpenGL 2.0 porque necesito vertex shaders. Me gusta 3.2+ core API por su simplicidad y poder. Creo que 3.2+ core podría ser una opción para el futuro. Pero me temo que hoy en día esta funcionalidad puede no estar disponible en algunas plataformas (quiero decir, tarjetas gráficas antiguas y falta (?) De controladores Linux modernos). Tal vez, debería usar la API tipo OpenGL ES 2.0 para una futura y fácil conexión.Qué versión de OpenGL elegir para la aplicación de escritorio multiplataforma

¿Cuál es el estado de las cosas con 3.2+ core, cards y linux driveres?

Respuesta

6

Los chips Intel anteriores solo admiten OpenGL 1.5. Las fichas más recientes (desde hace aproximadamente dos años) tienen 2.1 pero tienen un desempeño peor que 1.5. Sandy Bridge afirma que admite "OpenGL 3" sin especificar si es capaz de hacer 3.3 (como sugiere Damon), pero los controladores de Linux solo hacen 2.1 por ahora. Todos los hardware Radeons y Nvidia remotamente recientes con controladores de fuente cerrada admiten 3.3 (sombreadores de geometría) y la serie 400-500 admiten 4.1 (sombreadores de teselación). Por lo tanto, las versiones que desea apuntar son 1.5 (si le importa la basura pre-Sandy-Bridge Intel), 2.1 (para prácticamente todo el hardware), 3.3 (para hardware decente & controladores de fuente cerrada) o 4.1 (borde sangrante).

Tengo sombreadores de vértices y fragmentos escritos con #version 120 y sombreadores de geometría escritos en #version 330, para facilitar el repliegue en hardware antiguo.

+0

Hace varios días tuve un problema con los chips Intel y OpenGL 2.1. Probablemente, sería mejor conformar 1.5, pero los sombreadores a veces son realmente indispensables. – Yury

+0

No utilizo los productos de Apple, pero una cosa para agregar: OS X todavía no parece soportar nada mejor que OpenGL 2.1: O – Tronic

0

Depende de la máquina promedio de su mercado objetivo. Aunque para ser honesto, OpenGL 3.2+ es bastante omnipresente en estos días.

1

Yo personalmente iría por OpenGL 3.3, opcionalmente con un respaldo de 3.2 más extensiones (que es básicamente el mismo). Es la forma más conveniente de usar OpenGL 3.x, y es ampliamente compatible.

Apuntar a 3.1 o 3.0 ya no vale la pena, excepto si realmente desea ejecutar en sandy bridge (que, por alguna razón oscura, solo admite 3.0 aunque el hardware es muy capaz de hacer 3.3). También 3.1 y 3.0 tienen cambios muy considerables en el código de sombreado, que en mi opinión son una pesadilla de mantenimiento si quieres admitir muchas versiones (no hay tal problema con 3.2 y 3.3).

Cada hardware que admite 3.2 también puede admitir 3.3, el único obstáculo puede ser que los IHV no proporcionan un controlador reciente o que un usuario puede ser demasiado perezoso para actualizar. Por lo tanto, no puede suponer que "3.3 funciona en todas partes". Sin embargo, los controladores anteriores generalmente tendrán la misma funcionalidad a través de extensiones ARB.

1

Mac OS X no es compatible con el contexto GL-3 en este momento. Este verano puede cambiar la situación, pero recomendaría seguir con las extensiones GL-2 plus.

5

Puede permanecer en OpenGL ES 2.0. Incluso si ES significa Embed, es un buen enfoque porque elimina todas las funciones fijas (glBegin, etc ...): está utilizando un subconjunto de OpenGL 2.x. Entonces, si escribe su software pensando solo en OpenGL ES 2.0, será rápido y funcionará en la mayoría.

En realidad, OpenGL ES 2.0 y desktop GL pueden tener alguna diferencia, pero no creo que sea algo que va a utilizar. Si se admite la extensión GL_ARB_ES2_compatibility, tiene una tarjeta de "escritorio" que admite el subconjunto completo de inserción. (4 func y algunos const.)

Ahora, la verdadera pregunta es ¿cuántos años de hardware desea soportar? Todavía son muchos hardware antiguo que tienen soporte de gl muy pobre. Lo mejor sería apoyar a los menos viejos (OpenGL 2.0 ya es viejo) :)

+0

+1 ES 2.0 parece ser una gran combinación de características (totalmente programable y elimina todas las características heredadas) y compatibilidad generalizada. –

Cuestiones relacionadas