¿Qué son las extensiones OpenGL y cuáles son los beneficios/compensaciones de usarlas?

StackOverflow https://stackoverflow.com/questions/17352

  •  08-06-2019
  •  | 
  •  

Pregunta

En relación con esta pregunta sobre Usando extensiones OpenGL, ¿Cuál es el propósito de estas funciones de extensión?¿Por qué querría usarlos?Además, ¿existen compensaciones o trampas asociadas con su uso?

¿Fue útil?

Solución

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 introducir nuevas funciones y nuevas constantes, y pueden relajar o eliminar restricciones en las funciones OpenGL existentes.

Cada proveedor tiene una abreviatura alfabética que se utiliza para nombrar sus nuevas funciones y constantes.Por ejemplo, la abreviatura de NVIDIA (NV) se utiliza para definir su función patentada glCombinerParameterfvNV() y su constante GL_NORMAL_MAP_NV.

Puede suceder que más de un proveedor acepte implementar la misma funcionalidad ampliada.En ese caso, se utiliza la abreviatura EXT.Además, puede suceder que la Junta de Revisión de Arquitectura "bendiga" la extensión.Luego se conoce como 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 multitextura ya no es una extensión ARB implementada opcionalmente, sino que ha sido parte de la API principal 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 hacer esto es específico de la plataforma y existen bibliotecas como GLEW y GLEE para simplificar el proceso.

Otros consejos

Extensiones OpenGL son nuevas características añadidas a la Especificación OpenGL, los agrega el organismo de estándares OpenGL y los distintos proveedores de tarjetas gráficas.Estos se exponen al programador como nuevas llamadas a funciones o variables.Cada nueva versión de la especificación OpenGL viene con una funcionalidad más nueva y (normalmente) incluye todas las funciones y extensiones anteriores.

El verdadero problema con las extensiones OpenGL sólo existe en Windows.Microsoft no ha admitido ninguna extensión que se haya lanzado después OpenGL v1.1.Los proveedores de tarjetas gráficas superan esto enviando su propia versión de esta funcionalidad a través de bibliotecas y archivos de encabezado.Sin embargo, usar esto puede ser un poco doloroso, como muestra la pregunta a la que vinculó.Pero este problema ha desaparecido en gran medida con la popularidad de brillaba, que se encarga de envolver todo esto en un paquete fácil de usar.

Si utiliza una extensión OpenGL muy reciente, tenga en cuenta que es posible que no sea compatible con hardware de gráficos más antiguo.Aparte de esto, no hay otra desventaja al usar estas extensiones.La mayoría de las extensiones que se vuelven estándar son bastante malditas. útil y hay muy poca lógica para no usarlos.

Las extensiones son, en general, una forma para que los proveedores de tarjetas gráficas agreguen nuevas funciones a OpenGL sin tener que esperar hasta la próxima revisión de la especificación OpenGL.Existen diferentes tipos de extensiones:

  1. Extensión de proveedor: solo un proveedor proporciona un determinado tipo de funcionalidad.
    • Ejemplo: NV_vertex_program
  2. Extensión de múltiples proveedores: varios proveedores se han reunido y acordado la funcionalidad.
    • Ejemplo: EXT_vertex_program
  3. Extensión ARB: la Junta de Revisión de Arquitectura OpenGL ha bendecido la extensión.Tiene una expectativa razonable de que este tipo de extensión exista por un tiempo.
    • Ejemplo: ARB_vertex_program

Las extensiones no tienen que seguir todos estos pasos.A veces, una extensión solo la implementa un proveedor, antes de que los diseños de hardware tomen un rumbo diferente y se abandone la extensión.Otras veces, una extensión podría llegar hasta el estatus de ARB antes de que todos decidan que hay una mejor manera.(El ARB_vertex_program enfoque, por ejemplo, se dejó de lado en favor del enfoque de lenguaje de sombreado de alto nivel de ARB_vertex_shader cuando llegó el momento de incorporar sombreadores a la especificación principal de OpenGL). Incluso las extensiones ARB no duran para siempre;No escribiría algo hoy que requiera ARB_matrix_palette, por ejemplo.

Dicho todo esto, es una muy buena idea mantenerse actualizado sobre las extensiones, en particular las últimas extensiones ARB y EXT.En el pasado, era cierto que algunas de las "vías rápidas" a través del hardware sólo eran accesibles a través de extensiones.Del mismo modo, si desea saber todas las funciones que puede realizar una pieza de hardware, no hay mejor lugar para buscar que una extensión específica del proveedor.

Si recién estás comenzando con OpenGL, te recomiendo que investigues:

  • ARB_vertex_buffer_object (vértices)
  • ARB_vertex_shader / ARB_fragment_shader / ARB_shader_objects / Especificaciones GLSL (sombreadores)

Más avanzado:

  • ARB/EXT_framebuffer_object (renderizado fuera de pantalla)

Todas estas son funciones que se han incorporado al núcleo, pero puede ser bueno verlas de forma aislada para tener una mejor idea de dónde se encuentran sus límites.(La especificación principal de OpenGL combina a la perfección lo antiguo con lo nuevo, por lo que esto puede ser muy importante si desea mantenerse en el camino rápido y evitar el legado y, a veces, implementarse en rutas de software).

Hagas lo que hagas, asegúrate de tener las comprobaciones adecuadas para las extensiones que decidas utilizar y las alternativas cuando sea necesario.Aunque su tarjeta tenga 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top