2008-08-20 13 views

Respuesta

20

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 utiliza 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.

6

extensiones OpenGL son nuevas características añadidas a la especificación OpenGL , se agregan por el organismo de normalización de OpenGL y por los distintos fabricantes 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 envolver todo esto en un paquete fácil de usar.

Si utiliza una extensión de OpenGL muy reciente, tenga en cuenta que puede 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 muy útiles útil y hay muy poca lógica para no usarlas.

5

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. Existen diferentes tipos de extensiones:

  1. Extensión de proveedor: solo un proveedor proporciona un cierto tipo de funcionalidad.
    • Ejemplo: NV_vertex_program
  2. extensión Multivendor - múltiples proveedores se han reunido y han acordado la funcionalidad.
    • Ejemplo: EXT_vertex_program
  3. extensión ARB - Arquitectura de la Junta de Revisión 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

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 descartó 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; No escribiría algo hoy 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 con 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 acaba de empezar en OpenGL, le recomiendo investigar:

  • ARB_vertex_buffer_object (vértices)
  • ARB_vertex_shader/ARB_fragment_shader/ARB_shader_objects spec/GLSL (shaders)

Más avanzado:

  • ARB/EXT_framebuffer_object (representación fuera de la pantalla)

Esta es toda la funcionalidad que se ha rodado en el núcleo, pero puede ser bueno para ver de forma aislada para que pueda obtener una mejor idea de dónde se encuentran sus límites. (La especificación OpenGL central combina a la perfección lo antiguo con lo nuevo, por lo que puede ser muy importante si desea mantenerse en la ruta rápida y evitar el legado y algunas veces implementado en rutas de software).

Hagas lo que hagas, haz Asegúrese de tener los controles apropiados para las extensiones que decida usar, y las excepciones cuando sea necesario. 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.

Cuestiones relacionadas