2011-11-08 17 views
9

Duplicar posible:
OpenGL 4.1 vs 3.1+Diferencia entre OpenGL 3.xy 4.x?

lectura de algunas páginas en la web, me encontré con los mismos ejemplos de código listados para ambas versiones de OpneGL. Sé que los dos utilizan tuberías de funciones programables, a diferencia de las versiones anteriores, pero ¿cuáles son las principales diferencias entre los dos? ¿Por qué usarías uno sobre el otro?

Respuesta

36

Los números de versión principal de OpenGL representan efectivamente los niveles de hardware, como los números de versión principal de D3D. GL 2.x representa hardware DX9. GL 3.x representa hardware de clase DX10. Y, por lo tanto, GL 4.x representa hardware de clase DX11.

No todas las características introducidas en GL 4.x son específicas del hardware, sin embargo. Algunos son conveniencia API y características de limpieza. Estos están disponibles como extensiones para hardware de nivel inferior, y los controladores de NVIDIA y AMD sí los proporcionan. El más grande de estos es program separation, que es algo que GLSL ha necesitado para un tiempo largo.

En términos de características de hardware reales presentadas por GL 4.x que no están disponibles en 3.x, no es enorme o cambia el juego. Es ciertamente significativo, pero no emocionante. Puede encontrar un desglose detallado de las características GL por versión en el OpenGL Wiki.

Image load/store y atomic counters son probablemente los más grandes (esto incluye shader storage buffers también), aunque al mismo tiempo el menos anunciado. Los sombreadores pueden escribir/leer de imágenes y búferes directamente, aunque hay a lot of caveats and synchronization issues to understand sobre cómo hacer esto.

GL 4.3 agregó compute shaders, que junto con lo anterior le permiten realizar tareas de cómputo sin el dolor de OpenCL/OpenGL interoperabilidad.

La característica que se habla más es tessellation. Esto introduce un par adicional de etapas de sombreado: una que decide cuánto teselar una primitiva, y la otra para decidir cómo generar los nuevos valores de la primitiva teselada.

Subroutines son una característica interesante pero que a menudo se pasa por alto. Básicamente, puede adjuntar subrutinas a programas de sombreado como uniformes. Por lo tanto, podría usar el mismo programa básico que ejecutará una función de iluminación, pero puede cambiar las funciones de iluminación sin cambiar el programa. El programa básico obtendría texturas, averiguaría cuáles son los parámetros del material difuso/especular/etc., determinaría los parámetros normales y de iluminación, y los pasaría a la subrutina. Podrías tener una gran variedad de subrutinas de iluminación, desde la difusa Lambertian rápida a la completa Cook-Torrance (aunque necesitarías más parámetros de material).

+2

Esta respuesta merece mucho más que + 5 ^^. Tu libro sobre OpenGL es realmente genial, incluso si la navegación es regular. – Korchkidu

+0

@Korchkidu: ¿qué libro? – ssc

+0

Además de los cambios internos, ¿puedo realmente ver la diferencia? Por ejemplo, cuando miro de cerca un juego o una demostración en 3D, ¿esos cambios dan como resultado algo que se ve mejor? – ssc

Cuestiones relacionadas