opengl - glsl reference
¿Qué son las extensiones OpenGL y cuáles son los beneficios/ventajas de usarlas? (3)
En relación con esta pregunta sobre el uso de extensiones OpenGL , ¿cuál es el propósito de estas funciones de extensión? ¿Por qué querría usarlos? Además, ¿hay alguna compensación o truco asociado con su uso?
El estándar OpenGL permite a los proveedores individuales proporcionar funcionalidad adicional a través de extensiones a medida que se crea nueva tecnología. Las extensiones pueden presentar nuevas funciones y nuevas constantes, y pueden relajar o eliminar restricciones en las funciones existentes de OpenGL.
Cada vendedor tiene una abreviatura alfabética que se usa para nombrar sus nuevas funciones y constantes. Por ejemplo, la abreviatura de NVIDIA (NV) se usa para definir su función propietaria glCombinerParameterfvNV () y su constante GL_NORMAL_MAP_NV.
Puede suceder que más de un proveedor acepte implementar la misma funcionalidad extendida. En ese caso, se usa la abreviatura EXT. Es posible que la Junta de Revisión de Arquitectura "bendiga" la extensión. Luego se conoce como una extensión estándar, y se utiliza la abreviatura ARB. La primera extensión ARB fue GL_ARB_multitexture, introducida en la versión 1.2.1. Siguiendo la ruta oficial de promoción de extensiones, la multitexturación ya no es una extensión ARB implementada opcionalmente, sino que ha sido una parte de la API central de OpenGL desde la versión 1.3.
Antes de usar una extensión, un programa primero debe determinar su disponibilidad y luego obtener punteros a cualquier función nueva que defina la extensión. El mecanismo para hacerlo es específico de la plataforma y existen bibliotecas como GLEW y GLEE para simplificar el proceso.
Las extensiones son, en general, una forma para que los proveedores de tarjetas gráficas agreguen nuevas funcionalidades a OpenGL sin tener que esperar hasta la próxima revisión de las especificaciones de OpenGL. Hay diferentes tipos de extensiones:
- Extensión de proveedor: solo un proveedor proporciona un cierto tipo de funcionalidad.
- Ejemplo:
NV_vertex_program
- Ejemplo:
- Extensión de múltiples proveedores: varios proveedores se han unido y han acordado la funcionalidad.
- Ejemplo:
EXT_vertex_program
- Ejemplo:
- Extensión ARB: la Junta de Revisión de Arquitectura de OpenGL ha bendecido la extensión. Usted tiene una expectativa razonable de que este tipo de extensión existirá por un tiempo.
- Ejemplo:
ARB_vertex_program
- Ejemplo:
Las extensiones no tienen que pasar por todos estos pasos. Algunas veces, una extensión solo se implementa por un proveedor, antes de que los diseños de hardware sean diferentes y la extensión se abandona. Otras veces, una extensión puede llegar al estado ARB antes de que todos decidan que hay una mejor manera. (El enfoque ARB_vertex_program
, por ejemplo, se ARB_vertex_program
a favor del enfoque de lenguaje de sombreado de alto nivel de ARB_vertex_shader
cuando llegó el momento de implementar sombreadores en la especificación OpenGL principal). Incluso las extensiones ARB no duran para siempre; Hoy no escribiría algo que requiera ARB_matrix_palette
, por ejemplo.
Habiendo dicho todo esto, es una muy buena idea mantenerse al día con las extensiones, en particular las últimas extensiones ARB y EXT. En el pasado, ha sido cierto que algunas de las ''rutas rápidas'' a través del hardware solo eran accesibles a través de extensiones. Del mismo modo, si desea saber qué funcionalidad puede hacer un hardware, no hay mejor lugar para buscar que una extensión específica del proveedor.
Si recién está empezando en OpenGL, le recomiendo que investigue:
-
ARB_vertex_buffer_object
(vértices) -
ARB_vertex_shader
/ARB_fragment_shader
/ARB_shader_objects
/ GLSL spec (shaders)
Más avanzado:
-
ARB/EXT_framebuffer_object
(representación fuera de pantalla)
Esta es toda la funcionalidad que se ha incorporado al núcleo, pero puede ser bueno verla aislada para que pueda tener una mejor idea de dónde se encuentran sus límites. (Las especificaciones OpenGL básicas combinan a la perfección lo antiguo con lo nuevo, por lo que esto puede ser muy importante si desea mantenerse en la ruta rápida, y evitar el legado y, a veces, implementado en las rutas de software).
Hagas lo que hagas, asegúrate de tener los controles apropiados para las extensiones que decides usar, y de los inconvenientes necesarios. Aunque su tarjeta puede tener una extensión determinada, no hay garantía de que la extensión esté presente en la tarjeta de otro proveedor, o incluso en otro sistema operativo con la misma tarjeta.
Las extensiones OpenGL son nuevas características agregadas a la especificación OpenGL , que son agregadas por el cuerpo de estándares de OpenGL y por los diversos proveedores de tarjetas gráficas. Estos están expuestos al programador como nuevas llamadas a funciones o variables. Cada nueva versión de la especificación OpenGL viene con funcionalidades más nuevas y (típicamente) incluye todas las funcionalidades y extensiones anteriores.
El verdadero problema con las extensiones de OpenGL solo existe en Windows. Microsoft no ha admitido ninguna extensión que se haya lanzado después de OpenGL v1.1 . Los proveedores de tarjetas gráficas superan esto al enviar su propia versión de esta funcionalidad a través de archivos de encabezado y bibliotecas. Sin embargo, usar esto puede ser un poco doloroso como muestra la pregunta que enlazó. Pero este problema ha desaparecido con la popularidad de GLEW , que se encarga de incluir todo esto en un paquete fácil de usar.
Si utiliza una extensión de OpenGL muy reciente, tenga en cuenta que es posible que no sea compatible con hardware de gráficos anterior. Aparte de esto, no hay otra desventaja al usar estas extensiones. La mayoría de las extensiones que se convierten en estándar son bastante útiles y hay muy poca lógica para no usarlas.