OpenGL

API de gráficos multiplataforma

OpenGL
Autor(es) original(es)Gráficos de silicio
Desarrollador(es)Grupo Khronos
(anteriormente ARB )
Lanzamiento inicial30 de junio de 1992 ; hace 32 años ( 30 de junio de 1992 )
Versión estable
4.6 [1]  / 31 de julio de 2017 ; hace 7 años ( 31 de julio de 2017 )
Escrito enC [2]
SucesorVulcano
TipoAPI de gráficos 3D
Licencia
  • Licencia de código abierto para el uso de la Implementación de muestra (SI): Esta es una Licencia de Software Libre B modelada en base a las licencias BSD, X y Mozilla.
  • Licencia de marca comercial para nuevos licenciatarios que desean utilizar la marca comercial y el logotipo de OpenGL y reclamar conformidad. [3]
Sitio webopengl.org

OpenGL ( Open Graphics Library [4] ) es una interfaz de programación de aplicaciones (API) multiplataforma y multilenguaje para renderizar gráficos vectoriales 2D y 3D . La API se utiliza normalmente para interactuar con una unidad de procesamiento gráfico (GPU) para lograr una renderización acelerada por hardware .

Silicon Graphics, Inc. (SGI) comenzó a desarrollar OpenGL en 1991 y lo lanzó el 30 de junio de 1992. [5] [6] Se utiliza para una variedad de aplicaciones, incluido el diseño asistido por computadora (CAD), los videojuegos , la visualización científica , la realidad virtual y la simulación de vuelo . Desde 2006, OpenGL ha sido administrado por el consorcio tecnológico sin fines de lucro Khronos Group . [7]

Diseño

Una ilustración del proceso de canalización de gráficos

La especificación OpenGL describe una interfaz de programación de aplicaciones (API) abstracta para dibujar gráficos 2D y 3D. Está diseñada para implementarse en su mayor parte o en su totalidad mediante aceleración de hardware, como una GPU , aunque es posible que la API se implemente en su totalidad en software que se ejecuta en una CPU .

La API se define como un conjunto de funciones que pueden ser llamadas por el programa cliente, junto con un conjunto de constantes enteras con nombre (por ejemplo, la constante GL_TEXTURE_2D, que corresponde al número decimal 3553). Aunque las definiciones de funciones son superficialmente similares a las del lenguaje de programación C , son independientes del lenguaje. Como tal, OpenGL tiene muchos enlaces de lenguaje , algunos de los más notables son el enlace de JavaScript WebGL (API, basada en OpenGL ES 2.0 , para renderizado 3D desde un navegador web ); los enlaces de C WGL , GLX y CGL ; el enlace de C proporcionado por iOS ; y los enlaces de Java y C proporcionados por Android .

Además de ser independiente del lenguaje, OpenGL también es multiplataforma. La especificación no dice nada sobre el tema de la obtención y gestión de un contexto OpenGL, dejando esto como un detalle del sistema de ventanas subyacente . Por la misma razón, OpenGL se ocupa exclusivamente de la representación, y no proporciona API relacionadas con la entrada, el audio o las ventanas.

Desarrollo

OpenGL ya no se encuentra en desarrollo activo, mientras que entre 2001 y 2014, la especificación OpenGL se actualizaba principalmente de forma anual, con dos lanzamientos (3.1 y 3.2) en 2009 y tres (3.3, 4.0 y 4.1) en 2010, la última especificación OpenGL 4.6 se lanzó en 2017, después de una pausa de tres años, y se limitó a la inclusión de once extensiones ARB y EXT existentes en el perfil principal. [8]

El desarrollo activo de OpenGL se abandonó en favor de la API Vulkan , lanzada en 2016 y con el nombre en código glNext durante el desarrollo inicial. En 2017, Khronos Group anunció que OpenGL ES no tendría nuevas versiones [9] y desde entonces se ha concentrado en el desarrollo de Vulkan y otras tecnologías. [10] [11] Como resultado, ciertas capacidades ofrecidas por las GPU modernas, por ejemplo, el trazado de rayos , no son compatibles con el estándar OpenGL. Sin embargo, se puede proporcionar compatibilidad con funciones más nuevas a través de las extensiones OpenGL específicas del proveedor. [12] [13]

El Grupo Khronos publica nuevas versiones de las especificaciones OpenGL, cada una de las cuales amplía la API para admitir varias funciones nuevas. Los detalles de cada versión se deciden por consenso entre los miembros del Grupo, incluidos fabricantes de tarjetas gráficas, diseñadores de sistemas operativos y empresas de tecnología en general como Mozilla y Google . [14]

Además de las características requeridas por la API principal, los proveedores de unidades de procesamiento gráfico (GPU) pueden proporcionar funcionalidad adicional en forma de extensiones . Las extensiones pueden introducir nuevas funciones y nuevas constantes, y pueden relajar o eliminar restricciones sobre las funciones OpenGL existentes. Los proveedores pueden usar extensiones para exponer API personalizadas sin necesidad de soporte de otros proveedores o del Grupo Khronos en su conjunto, lo que aumenta enormemente la flexibilidad de OpenGL. Todas las extensiones se recopilan en el Registro OpenGL y están definidas por él. [15]

Cada extensión está asociada a un identificador corto, basado en el nombre de la empresa que la desarrolló. Por ejemplo, el identificador de NvidiaGL_NV_half_float es NV, que es parte del nombre de la extensión , la constante GL_HALF_FLOAT_NVy la función glVertex2hNV(). [16] Si varios proveedores acuerdan implementar la misma funcionalidad utilizando la misma API, se puede lanzar una extensión compartida, utilizando el identificador EXT. En tales casos, también podría suceder que el Comité de Revisión de Arquitectura del Grupo Khronos dé a la extensión su aprobación explícita, en cuyo caso se utiliza el identificador ARB. [17]

Las características introducidas por cada nueva versión de OpenGL generalmente se forman a partir de las características combinadas de varias extensiones ampliamente implementadas, especialmente extensiones de tipo ARB o EXT.

Documentación

La Junta de Revisión de Arquitectura OpenGL publicó una serie de manuales junto con la especificación que se han actualizado para seguir los cambios en la API. Estos manuales se conocen comúnmente por los colores de sus portadas:

El libro rojo
Guía de programación OpenGL, novena edición. ISBN  978-0-134-49549-1
Guía oficial para aprender OpenGL, versión 4.5 con SPIR-V
El libro naranja
Lenguaje de sombreado OpenGL, 3.ª edición. ISBN 0-321-63763-1 
Un tutorial y libro de referencia para GLSL .

Libros históricos (pre-OpenGL 2.0):

El Libro Verde
Programación OpenGL para el sistema X Window. ISBN 978-0-201-48359-8 
Un libro sobre la interfaz X11 y OpenGL Utility Toolkit (GLUT).
El libro azul
Manual de referencia de OpenGL, cuarta edición. ISBN 0-321-17383-X 
Esencialmente una copia impresa de las páginas del manual de Unix (man) para OpenGL.
Incluye un diagrama desplegable del tamaño de un póster que muestra la estructura de una implementación idealizada de OpenGL.
El libro Alfa (cubierta blanca)
Programación OpenGL para Windows 95 y Windows NT. ISBN 0-201-40709-4 
Un libro sobre la interfaz de OpenGL con Microsoft Windows.

La documentación de OpenGL también es accesible a través de su página web oficial. [18]

Bibliotecas asociadas

Las primeras versiones de OpenGL se lanzaron con una biblioteca complementaria llamada OpenGL Utility Library (GLU). Proporcionaba funciones simples y útiles que probablemente no se admitirían en el hardware contemporáneo, como la creación de teselas y la generación de mapas MIP y formas primitivas . La especificación GLU se actualizó por última vez en 1998 y depende de funciones de OpenGL que ahora están obsoletas .

Conjuntos de herramientas de contexto y de ventanas

Dado que la creación de un contexto OpenGL es un proceso bastante complejo y que varía entre sistemas operativos , la creación automática de un contexto OpenGL se ha convertido en una característica común de varias bibliotecas de desarrollo de juegos e interfaz de usuario , incluidas SDL , Allegro , SFML , FLTK y Qt . Se han diseñado algunas bibliotecas únicamente para producir una ventana compatible con OpenGL. La primera de estas bibliotecas fue OpenGL Utility Toolkit (GLUT), posteriormente sustituida por freeglut . GLFW es una alternativa más nueva. [19]

  • Estos kits de herramientas están diseñados para crear y administrar ventanas OpenGL y administrar entradas, pero poco más allá de eso. [20]
  • GLFW : un controlador de ventanas y teclado-ratón-joystick multiplataforma; está más orientado a los juegos
  • freeglut – Un manejador de ventanas y teclado-mouse multiplataforma; su API es un superconjunto de la API GLUT, y es más estable y actualizada que GLUT
  • OpenGL Utility Toolkit (GLUT): un antiguo controlador de ventanas que ya no recibe mantenimiento.
  • Varias "bibliotecas multimedia" pueden crear ventanas OpenGL, además de entradas, sonido y otras tareas útiles para aplicaciones tipo juego.
  • Allegro 5 : una biblioteca multimedia multiplataforma con una API C enfocada en el desarrollo de juegos
  • Simple DirectMedia Layer (SDL): una biblioteca multimedia multiplataforma con una API C
  • SFML : una biblioteca multimedia multiplataforma con una API de C++ y múltiples enlaces a lenguajes como C#, Java, Haskell y Go
  • Kits de herramientas de widgets
  • FLTK : una pequeña biblioteca de widgets C++ multiplataforma
  • Qt : un conjunto de herramientas de widgets C++ multiplataforma. Proporciona muchos objetos auxiliares OpenGL que incluso eliminan la diferencia entre GL de escritorio y OpenGL ES.
  • wxWidgets : un kit de herramientas para widgets C++ multiplataforma

Bibliotecas de carga de extensiones

Dada la gran carga de trabajo que implica la identificación y carga de extensiones OpenGL, se han diseñado algunas bibliotecas que cargan automáticamente todas las extensiones y funciones disponibles. Algunos ejemplos son OpenGL Easy Extension Library (GLEE), OpenGL Extension Wrangler Library (GLEW) y glbinding . La mayoría de los enlaces de lenguaje, como JOGL y PyOpenGL, también cargan automáticamente las extensiones.

Implementaciones

Captura de pantalla de glxinfo, que muestra información de la implementación de Mesa de OpenGL en un sistema

Mesa 3D es una implementación de código abierto de OpenGL. Puede realizar renderizado de software puro y también puede utilizar aceleración de hardware en BSD , Linux y otras plataformas aprovechando la infraestructura de renderizado directo . A partir de la versión 20.0, implementa la versión 4.6 del estándar OpenGL.

Historia

En la década de 1980, desarrollar software que pudiera funcionar con una amplia gama de hardware gráfico era un verdadero desafío. Los desarrolladores de software escribían interfaces y controladores personalizados para cada pieza de hardware, lo que resultaba costoso y multiplicaba los esfuerzos.

A principios de los años 90, Silicon Graphics (SGI) era líder en gráficos 3D para estaciones de trabajo. Su API IRIS GL [21] [22] se convirtió en el estándar de la industria, más utilizado que el PHIGS basado en estándares abiertos . [ cita requerida ] Esto se debió a que se consideraba que IRIS GL era más fácil de usar, [ ¿ por quién? ] y porque admitía la representación en modo inmediato . Por el contrario, PHIGS se consideraba difícil de usar y obsoleto en funcionalidad.

Los competidores de SGI (incluidos Sun Microsystems , Hewlett-Packard e IBM ) también pudieron sacar al mercado hardware 3D compatible con extensiones realizadas al estándar PHIGS, lo que presionó a SGI para que abriera el código fuente de una versión de IRIS GL como estándar público llamado OpenGL .

Sin embargo, SGI tenía muchos clientes para los que el cambio de IRIS GL a OpenGL exigiría una inversión significativa. Además, IRIS GL tenía funciones API que no eran relevantes para los gráficos 3D. Por ejemplo, incluía una API de ventanas, teclado y ratón, en parte porque se desarrolló antes del X Window System y NeWS de Sun. Y las bibliotecas de IRIS GL no eran adecuadas para la apertura debido a problemas de licencias y patentes [ se necesita más explicación ] . Estos factores exigieron que SGI siguiera dando soporte a las API de programación avanzadas y propietarias de Iris Inventor e Iris Performer mientras el soporte de mercado para OpenGL maduraba.

Una de las restricciones de IRIS GL era que sólo proporcionaba acceso a las características admitidas por el hardware subyacente. Si el hardware gráfico no admitía una característica de forma nativa, la aplicación no podía utilizarla. OpenGL superó este problema proporcionando implementaciones de software de características no admitidas por el hardware, lo que permitía a las aplicaciones utilizar gráficos avanzados en sistemas de potencia relativamente baja. OpenGL estandarizó el acceso al hardware, delegó la responsabilidad del desarrollo de los programas de interfaz de hardware ( controladores de dispositivos ) a los fabricantes de hardware y delegó las funciones de ventanas al sistema operativo subyacente. Con tantos tipos diferentes de hardware gráfico, lograr que todos hablaran el mismo idioma de esta manera tuvo un impacto notable al proporcionar a los desarrolladores de software una plataforma de nivel superior para el desarrollo de software 3D.

En 1992, [23] SGI lideró la creación del OpenGL Architecture Review Board (OpenGL ARB), el grupo de empresas que mantendría y ampliaría la especificación OpenGL en el futuro.

En 1994, SGI jugó con la idea de lanzar algo llamado “ OpenGL++ ”, que incluía elementos como una API de gráficos de escena (probablemente basada en su tecnología Performer ). La especificación circuló entre algunas partes interesadas, pero nunca se convirtió en un producto. [24]

En 1996, Microsoft lanzó Direct3D , que eventualmente se convirtió en el principal competidor de OpenGL. Más de 50 desarrolladores de juegos firmaron una carta abierta a Microsoft, publicada el 12 de junio de 1997, solicitando a la compañía que apoyara activamente OpenGL. [25] El 17 de diciembre de 1997, [26] Microsoft y SGI iniciaron el proyecto Fahrenheit , que fue un esfuerzo conjunto con el objetivo de unificar las interfaces OpenGL y Direct3D (y agregar también una API de gráficos de escena). En 1998, Hewlett-Packard se unió al proyecto. [27] Inicialmente mostró cierta promesa de poner orden en el mundo de las API de gráficos de computadora 3D interactivos, pero debido a restricciones financieras en SGI, razones estratégicas en Microsoft y una falta general de apoyo de la industria, fue abandonado en 1999. [28]

En julio de 2006, la Junta de Revisión de Arquitectura OpenGL votó para transferir el control del estándar API OpenGL al Grupo Khronos. [29] [30]

Apoyo de la industria

En junio de 2018, Apple dejó obsoletas las API de OpenGL en todas sus plataformas ( iOS , macOS y tvOS ), alentando encarecidamente a los desarrolladores a utilizar su API Metal patentada , que se introdujo en 2014. [31]

id Software ha estado usando OpenGL en sus juegos comenzando con GLQuake (un puerto de Quake a OpenGL con algunas modificaciones) lanzado en 1997. [32] El primer motor con licencia de la compañía con soporte OpenGL fue el motor Quake II , también conocido como id Tech 2. [ 33] En 2016, lanzaron una actualización para id Tech 6 que agregó soporte para Vulkan, un sucesor de OpenGL. ID Tech 7 eliminó el soporte para OpenGL. [34]

En marzo de 2023, Valve eliminó la compatibilidad con OpenGL de Dota 2. [ 35]

Khronos ha dejado de proporcionar soporte en OpenGL para una serie de tecnologías gráficas modernas, por ejemplo, Ray Tracing , decodificación de video en GPU , algoritmo anti-aliasing con aprendizaje profundo : AMD FidelityFX Super Resolution (FSR) [36] [37] y Nvidia DLSS. [38] [39]

Atypical Games, con el apoyo de Samsung, actualizó su motor de juego para utilizar Vulkan, en lugar de OpenGL, en todas las plataformas que no sean de Apple. [40]

El sistema operativo Fuchsia de Google utiliza Vulkan como API gráfica nativa y requiere una GPU compatible con Vulkan. Fuchsia pretende admitir OpenGL sobre Vulkan mediante la capa de traducción ANGLE. [41]

Historial de versiones

La primera versión de OpenGL, la versión 1.0, fue publicada el 30 de junio de 1992 por Mark Segal y Kurt Akeley . Desde entonces, OpenGL se ha ampliado ocasionalmente mediante la publicación de una nueva versión de la especificación. Estas versiones definen un conjunto básico de características que todas las tarjetas gráficas que cumplen con las especificaciones deben soportar y sobre las que se pueden escribir nuevas extensiones con mayor facilidad. Cada nueva versión de OpenGL tiende a incorporar varias extensiones que tienen un amplio apoyo entre los proveedores de tarjetas gráficas, aunque los detalles de esas extensiones pueden cambiar.

Historial de versiones de OpenGL
VersiónFecha de lanzamientoCaracterísticas
1.14 de marzo de 1997 [42] [43]Objetos de textura, matrices de vértices
1.216 de marzo de 1998Texturas 3D, BGRA y formatos de píxeles empaquetados , [44] introducción del subconjunto de imágenes útil para aplicaciones de procesamiento de imágenes
1.2.114 de octubre de 1998Un concepto de extensiones ARB
1.314 de agosto de 2001Multitexturización , multimuestreo, compresión de texturas
1.424 de julio de 2002Texturas de profundidad, GLSlang [45]
1.529 de julio de 2003Consultas de oclusión de objetos de búfer de vértices (VBO) [46]
2.07 de septiembre de 2004GLSL 1.1, MRT , texturas que no son potencias de dos, sprites puntuales, [47] Plantilla de dos caras [46]
2.12 de julio de 2006GLSL 1.2, objeto de búfer de píxeles (PBO), texturas sRGB [46]
3.011 de agosto de 2008GLSL 1.3, matrices de texturas, renderizado condicional, objeto de búfer de trama (FBO) [48]
3.124 de marzo de 2009GLSL 1.4, Creación de instancias, Objeto de búfer de textura, Objeto de búfer uniforme, Reinicio primitivo [49]
3.23 de agosto de 2009GLSL 1.5, Geometry Shader, Texturas multimuestreadas [50]
3.311 de marzo de 2010GLSL 3.30, incorpora tantas funciones como sea posible de la especificación OpenGL 4.0
4.011 de marzo de 2010GLSL 4.00, teselación en GPU, sombreadores con precisión de 64 bits [51]
4.126 de julio de 2010GLSL 4.10, salidas de depuración fáciles de usar para desarrolladores, compatibilidad con OpenGL ES 2.0 [52]
4.28 de agosto de 2011 [53]GLSL 4.20, sombreadores con contadores atómicos, instancias de retroalimentación de transformación de dibujo, empaquetado de sombreadores, mejoras de rendimiento
4.36 de agosto de 2012 [54]GLSL 4.30, sombreadores computacionales que aprovechan el paralelismo de la GPU, objetos de búfer de almacenamiento de sombreadores, compresión de texturas ETC2/EAC de alta calidad, mayor seguridad de la memoria, una extensión de robustez para múltiples aplicaciones, compatibilidad con OpenGL ES 3.0 [55]
4.422 de julio de 2013 [56]GLSL 4.40, control de ubicación de búfer, consultas asincrónicas eficientes, diseño de variables de sombreado, enlace eficiente de múltiples objetos, portabilidad optimizada de aplicaciones Direct3D, extensión de textura sin enlace, extensión de textura dispersa [56]
4.511 de agosto de 2014 [15] [57]GLSL 4.50, acceso directo al estado (DSA), control de vaciado, robustez, compatibilidad con API y sombreadores OpenGL ES 3.1, funciones de emulación DX11
4.631 de julio de 2017 [8] [58]GLSL 4.60, procesamiento de geometría y ejecución de sombreado más eficientes, más información, contexto sin error, fijación de desplazamiento de polígono, SPIR-V, filtrado anisotrópico

OpenGL 2.0

Fecha de lanzamiento : 7 de septiembre de 2004

OpenGL 2.0 fue concebido originalmente por 3Dlabs para abordar las preocupaciones de que OpenGL estaba estancado y carecía de una dirección fuerte. [59] 3Dlabs propuso una serie de adiciones importantes al estándar. La mayoría de ellas fueron, en ese momento, rechazadas por la ARB o nunca se materializaron en la forma que 3Dlabs propuso. Sin embargo, su propuesta de un lenguaje de sombreado de estilo C finalmente se completó, lo que resultó en la formulación actual del Lenguaje de sombreado OpenGL ( GLSL o GLslang). Al igual que los lenguajes de sombreado tipo ensamblaje que estaba reemplazando, permitió reemplazar el vértice de función fija y la tubería de fragmentos con sombreadores , aunque esta vez escritos en un lenguaje de alto nivel similar a C.

El diseño de GLSL se caracterizó por hacer relativamente pocas concesiones a los límites del hardware disponible en ese momento. Esto se remonta a la tradición anterior de OpenGL de establecer un objetivo ambicioso y con visión de futuro para los aceleradores 3D en lugar de simplemente seguir el estado del hardware disponible en ese momento. La especificación final de OpenGL 2.0 [60] incluye soporte para GLSL.

Longs Peak y OpenGL 3.0

Antes del lanzamiento de OpenGL 3.0, la nueva revisión tenía el nombre en clave Longs Peak . En el momento de su anuncio original, Longs Peak se presentó como la primera revisión importante de la API en la vida de OpenGL. Consistía en una revisión del modo en que funciona OpenGL, que requería cambios fundamentales en la API.

El borrador introdujo un cambio en la gestión de objetos. El modelo de objetos GL 2.1 se construyó sobre el diseño basado en estados de OpenGL. Es decir, para modificar un objeto o usarlo, es necesario vincular el objeto al sistema de estados y luego realizar modificaciones en el estado o realizar llamadas a funciones que utilicen el objeto vinculado.

Debido a que OpenGL utiliza un sistema de estados, los objetos deben ser mutables. Es decir, la estructura básica de un objeto puede cambiar en cualquier momento, incluso si el flujo de renderizado utiliza ese objeto de forma asincrónica. Un objeto de textura se puede redefinir de 2D a 3D. Esto requiere que cualquier implementación de OpenGL agregue un grado de complejidad a la gestión interna de objetos.

Con la API de Longs Peak, la creación de objetos se volvería atómica , utilizando plantillas para definir las propiedades de un objeto que se crearía con una llamada de función. El objeto podría entonces usarse inmediatamente en varios subprocesos. Los objetos también serían inmutables; sin embargo, su contenido podría cambiar y actualizarse. Por ejemplo, una textura podría cambiar su imagen, pero su tamaño y formato no podrían cambiarse.

Para permitir la compatibilidad con versiones anteriores, la antigua API basada en estados seguiría estando disponible, pero no se expondría ninguna funcionalidad nueva a través de la antigua API en versiones posteriores de OpenGL. Esto habría permitido que las bases de código heredadas, como la mayoría de los productos CAD , siguieran ejecutándose mientras se podía escribir otro software en función de la nueva API o trasladarla a ella.

En un principio, Longs Peak debía finalizarse en septiembre de 2007 bajo el nombre de OpenGL 3.0, pero el Grupo Khronos anunció el 30 de octubre que se había topado con varios problemas que deseaba solucionar antes de publicar la especificación. [61] Como resultado, la especificación se retrasó y el Grupo Khronos entró en un silencio mediático hasta el lanzamiento de la especificación final de OpenGL 3.0.

La especificación final resultó ser mucho menos revolucionaria que la propuesta de Longs Peak. En lugar de eliminar todo el modo inmediato y la funcionalidad fija (modo no shader), la especificación los incluyó como características obsoletas. El modelo de objetos propuesto no se incluyó, y no se han anunciado planes para incluirlo en futuras revisiones. Como resultado, la API permaneció en gran parte igual con unas pocas extensiones existentes que se promovieron a funcionalidad principal. Entre algunos grupos de desarrolladores, esta decisión causó algo de alboroto, [62] con muchos desarrolladores profesando que cambiarían a DirectX en protesta. La mayoría de las quejas giraban en torno a la falta de comunicación por parte de Khronos con la comunidad de desarrollo y el descarte de múltiples características que fueron vistas favorablemente por muchos. Otras frustraciones incluyeron el requisito de hardware de nivel DirectX 10 para usar OpenGL 3.0 y la ausencia de shaders de geometría y renderizado instanciado como características principales.

Otras fuentes informaron que la reacción de la comunidad no fue tan severa como se presentó originalmente, [63] y muchos proveedores mostraron su apoyo a la actualización. [64] [65]

OpenGL 3.0

Fecha de lanzamiento : 11 de agosto de 2008

OpenGL 3.0 introdujo un mecanismo de desuso para simplificar las futuras revisiones de la API. Algunas funciones, marcadas como desuso, podían deshabilitarse por completo solicitando un contexto compatible con versiones posteriores del sistema de ventanas. Sin embargo, se podía seguir accediendo a las funciones de OpenGL 3.0 junto con estas funciones desuso, solicitando un contexto completo .

Las características obsoletas incluyen:

  • Todo el procesamiento de vértices y fragmentos con funciones fijas
  • Representación en modo directo, utilizando glBegin y glEnd
  • Listas de visualización
  • Objetivos de reproducción de color indexado
  • Lenguaje de sombreado OpenGL , versiones 1.10 y 1.20

OpenGL 3.1

Fecha de lanzamiento : 24 de marzo de 2009

OpenGL 3.1 eliminó por completo todas las funciones que quedaron obsoletas en la versión 3.0, con la excepción de las líneas anchas. A partir de esta versión, no es posible acceder a nuevas funciones mediante un contexto completo , ni acceder a funciones obsoletas mediante un contexto compatible con versiones posteriores . Se hace una excepción a la regla anterior si la implementación admite la extensión ARB_compatibility, pero esto no está garantizado.

Soporte de hardware: Mesa admite ARM Panfrost con la versión 21.0.

OpenGL 3.2

Fecha de lanzamiento : 3 de agosto de 2009

OpenGL 3.2 se basó en los mecanismos de desuso introducidos por OpenGL 3.0, al dividir la especificación en un perfil central y un perfil de compatibilidad . Los contextos de compatibilidad incluyen las API de función fija eliminadas anteriormente, equivalentes a la extensión ARB_compatibility lanzada junto con OpenGL 3.1, mientras que los contextos centrales no. OpenGL 3.2 también incluyó una actualización a la versión 1.50 de GLSL.

OpenGL 3.3

Fecha de lanzamiento: 11 de marzo de 2010

Mesa admite el software Driver SWR, softpipe y para tarjetas Nvidia más antiguas con NV50.

OpenGL 4.0

Fecha de lanzamiento : 11 de marzo de 2010

OpenGL 4.0 se lanzó junto con la versión 3.3. Fue diseñado para hardware compatible con Direct3D 11.

Al igual que en OpenGL 3.0, esta versión de OpenGL contiene una gran cantidad de extensiones bastante intrascendentes, diseñadas para exponer en profundidad las capacidades del hardware de clase Direct3D 11. A continuación, se enumeran solo las extensiones más influyentes.

Soporte de hardware: Nvidia GeForce serie 400 y más nuevas, AMD Radeon HD serie 5000 y más nuevas (sombreadores FP64 implementados por emulación en algunas GPU TeraScale), Intel HD Graphics en procesadores Intel Ivy Bridge y más nuevas. [66]

OpenGL 4.1

Fecha de lanzamiento : 26 de julio de 2010

Soporte de hardware: Nvidia GeForce serie 400 y más nuevas, AMD Radeon HD serie 5000 y más nuevas (sombreadores FP64 implementados por emulación en algunas GPU TeraScale), Intel HD Graphics en procesadores Intel Ivy Bridge y más nuevas. [66]

  • El "tamaño máximo de textura" mínimo es 16 384 × 16 384 para las GPU que implementan esta especificación. [67]

OpenGL 4.2

Fecha de lanzamiento: 8 de agosto de 2011 [53]

  • Soporte para sombreadores con contadores atómicos y operaciones de carga-almacenamiento-lectura-modificación-escritura atómicas en un nivel de una textura
  • Dibujar múltiples instancias de datos capturados a partir del procesamiento de vértices de GPU (incluida la teselación) para permitir que los objetos complejos se reposicionen y repliquen de manera eficiente
  • Soporte para modificar un subconjunto arbitrario de una textura comprimida, sin tener que volver a descargar toda la textura a la GPU para lograr mejoras significativas en el rendimiento

Soporte de hardware: Nvidia GeForce serie 400 y posteriores, AMD Radeon HD serie 5000 y posteriores (sombreadores FP64 implementados por emulación en algunas GPU TeraScale) y gráficos Intel HD en procesadores Intel Haswell y posteriores. [66] (Linux Mesa: Ivy Bridge y posteriores)

OpenGL 4.3

Fecha de lanzamiento: 6 de agosto de 2012 [54]

  • Computar sombreadores que aprovechan el paralelismo de la GPU dentro del contexto de la canalización de gráficos
  • Objetos de búfer de almacenamiento de sombreadores, que permiten a los sombreadores leer y escribir objetos de búfer como la carga/almacenamiento de imágenes de 4.2, pero a través del lenguaje en lugar de llamadas de función.
  • Consultas de parámetros de formato de imagen
  • Compresión de texturas ETC2/EAC como función estándar
  • Compatibilidad total con las API de OpenGL ES 3.0
  • Capacidades de depuración para recibir mensajes de depuración durante el desarrollo de la aplicación
  • Vistas de textura para interpretar texturas de diferentes maneras sin replicación de datos
  • Mayor seguridad de la memoria y robustez para múltiples aplicaciones

Soporte de hardware: AMD Radeon HD serie 5000 y posteriores (sombreadores FP64 implementados por emulación en algunas GPU TeraScale), Intel HD Graphics en procesadores Intel Haswell y posteriores. [66] (Linux Mesa: Ivy Bridge sin texturizado de esténcil, Haswell y posteriores), Nvidia GeForce serie 400 y posteriores. VIRGL Emulation para máquinas virtuales admite 4.3+ con Mesa 20.

OpenGL 4.4

Fecha de lanzamiento: 22 de julio de 2013 [56]

  • Controles de uso de objetos de búfer reforzados
  • Consultas asincrónicas en objetos de búfer
  • Expresión de más controles de diseño de variables de interfaz en sombreadores
  • Vinculación eficiente de múltiples objetos simultáneamente

Soporte de hardware: AMD Radeon HD serie 5000 y más nuevas (shaders FP64 implementados por emulación en algunas GPU TeraScale), Intel HD Graphics en procesadores Intel Broadwell y más nuevas (Linux Mesa: Haswell y más nuevas), [68] Nvidia GeForce serie 400 y más nuevas, [69] Tegra K1 .

OpenGL 4.5

Fecha de lanzamiento: 11 de agosto de 2014 [15] [57]

  • Acceso directo al estado (DSA): los accesores de objetos permiten consultar y modificar el estado sin vincular los objetos a los contextos, para una mayor eficiencia y flexibilidad de las aplicaciones y el middleware. [70]
  • Control de vaciado: las aplicaciones pueden controlar el vaciado de comandos pendientes antes del cambio de contexto, lo que permite aplicaciones multiproceso de alto rendimiento;
  • Robustez: proporciona una plataforma segura para aplicaciones como navegadores WebGL, incluida la prevención de un reinicio de la GPU que afecte a otras aplicaciones en ejecución;
  • Compatibilidad con API y sombreadores de OpenGL ES 3.1: para permitir el desarrollo y la ejecución sencillos de las últimas aplicaciones OpenGL ES en sistemas de escritorio.

Soporte de hardware: AMD Radeon HD serie 5000 y más nuevas (sombreadores FP64 implementados por emulación en algunas GPU TeraScale), Intel HD Graphics en procesadores Intel Broadwell y más nuevos (Linux Mesa: Haswell y más nuevos), Nvidia GeForce serie 400 y más nuevas, [69] Tegra K1 y Tegra X1. [71] [72]

OpenGL 4.6

Fecha de lanzamiento: 31 de julio de 2017 [15] [8] [58]

Soporte de hardware: AMD Radeon HD serie 7000 y más nuevas (sombreadores FP64 implementados por emulación en algunas GPU TeraScale), Intel Haswell y más nuevas, Nvidia GeForce serie 400 y más nuevas. [69]

Soporte del controlador:

  • Mesa 19.2 en Linux es compatible con OpenGL 4.6 para Intel Broadwell y versiones posteriores. [73] Mesa 20.0 es compatible con GPU AMD Radeon, [74] mientras que la compatibilidad con Nvidia Kepler+ está en proceso. Zink como controlador de emulación con 21.1 y el controlador de software LLVMpipe también son compatibles con Mesa 21.0.
  • Controlador de gráficos AMD Adrenalin 18.4.1 en Windows 7 SP1 , 10 versión 1803 (actualización de abril de 2018) para AMD Radeon HD 7700+, HD 8500+ y posteriores. Publicado en abril de 2018. [75] [76]
  • Controlador de gráficos Intel 26.20.100.6861 en Windows 10. Publicado en mayo de 2019. [77] [78]
  • Controlador de gráficos NVIDIA GeForce 397.31 para Windows 7 , 8 , 10 x86 de 64 bits únicamente, sin compatibilidad con 32 bits . Publicado en abril de 2018 [79]

Implementaciones alternativas

Apple desaprobó OpenGL en iOS 12 y macOS 10.14 Mojave a favor de Metal , pero todavía está disponible a partir de macOS 14 Sonoma (incluso en dispositivos Apple Silicon ). [80] La última versión compatible con OpenGL es la 4.1 de 2011. [81] [82] Una biblioteca propietaria de Molten (autores de MoltenVK ) llamada MoltenGL, puede traducir llamadas OpenGL a Metal. [83]

Existen varios proyectos que intentan implementar OpenGL sobre Vulkan. El backend Vulkan para ANGLE de Google logró la conformidad con OpenGL ES 3.1 en julio de 2020. [84] El proyecto Mesa3D también incluye un controlador de este tipo, llamado Zink . [85]

Windows 11 en Arm de Microsoft agregó soporte para OpenGL 3.3 a través de GLon12, una implementación de OpenGL de código abierto sobre DirectX 12 a través de Mesa Gallium . [86] [87] [88]

Vulcano

Vulkan, anteriormente llamada "Next Generation OpenGL Initiative" (glNext), [89] [90] es un esfuerzo de rediseño desde cero para unificar OpenGL y OpenGL ES en una API común que no será compatible con versiones anteriores de OpenGL existentes. [91] [92] [93]

La versión inicial de la API de Vulkan se lanzó el 16 de febrero de 2016.

Véase también

Referencias

  1. ^ "Khronos lanza OpenGL 4.6 con soporte SPIR-V".
  2. ^ Lextrait, Vincent (enero de 2010). "The Programming Languages ​​Beacon, v10.0". Archivado desde el original el 30 de mayo de 2012. Consultado el 14 de marzo de 2010 .
  3. ^ "Productos: Software: OpenGL: Licencias y logotipos". SGI. Archivado desde el original el 1 de noviembre de 2012. Consultado el 7 de noviembre de 2012 .
  4. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 4.0 (Perfil básico). 11 de marzo de 2010.
  5. ^ "SGI – Descripción general de OpenGL". Archivado desde el original el 31 de octubre de 2004. Consultado el 16 de febrero de 2007 .
  6. ^ Peddie, Jon (julio de 2012). "¿Quién es la más bella de todas?". Computer Graphics World . Consultado el 30 de mayo de 2018 .
  7. ^ "OpenGL ARB cederá el control de la especificación OpenGL a Khronos Group". The Khronos Group . 31 de julio de 2006 . Consultado el 18 de marzo de 2021 .
  8. ^ abc "Khronos lanza OpenGL 4.6 con soporte SPIR-V". The Khronos Group Inc. 31 de julio de 2017. Consultado el 31 de julio de 2017 .
  9. ^ "El futuro de OpenGL (discusión en el foro)". Khronos Group . 2020.
  10. ^ "Archivos de noticias de Khronos". Grupo Khronos . 28 de noviembre de 2022.
  11. ^ "Blog de Khronos". Grupo Khronos . 28 de noviembre de 2022.
  12. ^ "Trazado de rayos GLSL_NV".
  13. ^ "Sombreador de malla GL_NV_".
  14. ^ "Descripción general y preguntas frecuentes sobre la membresía de Khronos". Khronos.org . Consultado el 7 de noviembre de 2012 .
  15. ^ abcd «Khronos OpenGL Registry». Khronos Group . Consultado el 31 de julio de 2017 .
  16. ^ "NV_half_float". Registro OpenGL . Grupo Khronos.
  17. ^ "Cómo crear extensiones de API de Khronos". Khronos Group . Consultado el 31 de julio de 2017 .
  18. ^ "OpenGL: la base de la industria para gráficos de alto rendimiento". The Khronos Group . 19 de julio de 2011 . Consultado el 18 de marzo de 2021 .
  19. ^ "Una lista de alternativas a GLUT, mantenida por". Khronos Group . Consultado el 2 de mayo de 2013 .
  20. ^ "Kits de herramientas y API relacionados". www.opengl.org . OpenGL . Consultado el 8 de octubre de 2014 .
  21. ^ "IRIS GL, propiedad de SGI".
  22. ^ Kilgard, Mark (2008). "Prehistoria de OpenGL: IRIS GL (diapositiva)". www.slideshare.net .
  23. ^ "Creación del ARB OpenGL". Archivado desde el original el 22 de febrero de 2007 . Consultado el 16 de febrero de 2007 .
  24. ^ "Fin de OpenGL++". Grupo Khronos.
  25. ^ "Los principales desarrolladores de juegos piden a Microsoft que apoye activamente OpenGL". Next Generation . N.º 32. Imagine Media . Agosto de 1997. pág. 17.
  26. ^ "Anuncio de Fahrenheit". Archivado desde el original el 27 de septiembre de 2007.
  27. ^ "Miembros de Fahrenheit. 1998". Computergram International . 1998. Archivado desde el original el 5 de octubre de 2007.
  28. ^ "El fin de Fahrenheit". The Register .
  29. ^ "OpenGL ARB cederá el control de la especificación OpenGL al Grupo Khronos". Nota de prensa de Khronos. 31 de julio de 2006.
  30. ^ "OpenGL ARB pasará el control de la especificación OpenGL a Khronos Group". Archivo de AccessMyLibrary.
  31. ^ Smith, Ryan (5 de junio de 2018). "Apple desestima OpenGL en todos los sistemas operativos; insta a los desarrolladores a utilizar Metal". www.anandtech.com . Purch . Consultado el 5 de junio de 2018 .
  32. ^ "GLQuake". Wiki de Quake .
  33. ^ "Licencias de tecnología: id Tech 2". Archivado desde el original el 8 de noviembre de 2009. Consultado el 17 de septiembre de 2008 .
  34. ^ "Doom Wiki: id Tech 7" . Consultado el 26 de octubre de 2021 .
  35. ^ Dawe, Liam (7 de marzo de 2023). "Dota 2 elimina la compatibilidad con OpenGL, el nuevo héroe Muerta ya está disponible y se espera una gran actualización en abril". GamingOnLinux . Consultado el 26 de marzo de 2023 .
  36. ^ "AMD FidelityFX Super Resolution" . Consultado el 17 de mayo de 2022 .
  37. ^ "Superresolución (FSR) de AMD FidelityFX".
  38. ^ "NVIDIA DLSS".
  39. ^ "Introducción a DLSS". Junio ​​de 2021.
  40. ^ "Jet Set Vulkan: Reflexiones sobre la mudanza a Vulkan".
  41. ^ "Magma: descripción general". fuchsia.dev . Consultado el 26 de marzo de 2023 .
  42. ^ Kilgard, Mark J. (2001). Programación OpenGL para el sistema X Window . Programación gráfica (6.ª edición impresa). Boston, Mass., Múnich: Addison-Wesley. pág. 6. ISBN 978-0-201-48359-8.
  43. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 1.1. 4 de marzo de 1997.
  44. ^ Astle, Dave (1 de abril de 2003). "Más allá de OpenGL 1.1 para Windows". gamedev.net . Consultado el 15 de noviembre de 2007 .
  45. ^ Isorna, JM (2015). Simulación visual de materiales: teoría, técnicas, análisis de casos. UPC Grau. Arquitectura, urbanismo y edificación (en español). Universitat Politècnica de Catalunya. pag. 191.ISBN 978-84-9880-564-2. Recuperado el 21 de agosto de 2019 .
  46. ^ abc "El sistema de gráficos OpenGL: una especificación" (PDF) . 2.1. 1 de diciembre de 2006.
  47. ^ "Punto primitivo".
  48. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 3.0. 23 de septiembre de 2008.
  49. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 3.1. 28 de mayo de 2009.
  50. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 3.2 (Perfil principal). 7 de diciembre de 2009.
  51. ^ "Khronos presenta aceleración de gráficos multiplataforma de vanguardia con OpenGL 4.0". 11 de marzo de 2010.
  52. ^ "Khronos impulsa la evolución de los gráficos 3D multiplataforma con el lanzamiento de la especificación OpenGL 4.1". 26 de julio de 2010.
  53. ^ ab "Khronos enriquece los gráficos 3D multiplataforma con el lanzamiento de la especificación OpenGL 4.2". 8 de agosto de 2011.
  54. ^ ab "Khronos lanza la especificación OpenGL 4.3 con importantes mejoras". 6 de agosto de 2012.
  55. ^ "Khronos lanza la especificación OpenGL 4.3 con importantes mejoras". 6 de agosto de 2012.
  56. ^ abc "Khronos lanza la especificación OpenGL 4.4". 22 de julio de 2013.
  57. ^ ab "Khronos Group anuncia avances clave en el ecosistema OpenGL – Comunicado de prensa de Khronos Group". The Khronos Group Inc. 10 de agosto de 2014. Consultado el 17 de abril de 2015 .
  58. ^ ab Kessenich, John; Baldwin, Dave. "El lenguaje de sombreado OpenGL, versión 4.60.7". The Khronos Group Inc. Consultado el 21 de agosto de 2019 .
  59. ^ Abi-Chahla, Fedy (16 de septiembre de 2008). "OpenGL 3 (3DLabs y la evolución de OpenGL)". Tom's Hardware . Consultado el 24 de octubre de 2010 .
  60. ^ "El sistema de gráficos OpenGL: una especificación" (PDF) . 2.0. 22 de octubre de 2004.
  61. ^ "OpenGL ARB anuncia una actualización de OpenGL 3.0". 30 de octubre de 2007. Consultado el 31 de octubre de 2007 .
  62. ^ "Se lanzó OpenGL 3.0 y los desarrolladores están furiosos - Slashdot". Tech.slashdot.org . Consultado el 7 de noviembre de 2012 .
  63. ^ "OpenGL BOF salió bien, no se vieron horquillas".
  64. ^ "El estándar de la industria para gráficos de alto rendimiento". OpenGL. 18 de agosto de 2008. Consultado el 31 de julio de 2017 .
  65. ^ "NVIDIA ahora ofrece un controlador OpenGL 3.0 preliminar".
  66. ^ abcd "Controlador de gráficos Intel Iris y HD para Windows 7/8/8.1 de 64 bits". Centro de descargas de Intel . Archivado desde el original el 2 de abril de 2015.
  67. ^ "Tamaño máximo de textura esperado - Programación de gráficos y GPU". GameDev.net .
  68. ^ "CPU Intel Skylake-S y chipsets de la serie 100 detallados en una aparente filtración". NDTV Gadgets . 17 de abril de 2015.
  69. ^ abc Larabel, Michael (31 de julio de 2017). "NVIDIA lanza el controlador Linux 381.26.11 con soporte para OpenGL 4.6". Phoronix .
  70. ^ "Se lanzó OpenGL 4.5, con una de las mejores características de Direct3D". Ars Technica . 11 de agosto de 2014 . Consultado el 17 de abril de 2015 .
  71. ^ "SG4121: Actualización de OpenGL para GPU NVIDIA". Ustream . Archivado desde el original el 17 de mayo de 2015 . Consultado el 17 de abril de 2015 .
  72. ^ Kilgard, Mark (12 de agosto de 2014). «Actualización de OpenGL 4.5 para GPU NVIDIA» . Consultado el 17 de abril de 2015 .
  73. ^ Larabel, Michael (21 de agosto de 2019). "El controlador OpenGL Linux de Intel ahora tiene soporte para OpenGL 4.6 en Mesa 19.2". Phoronix .
  74. ^ Larabel, Michael (27 de noviembre de 2019). "El controlador RadeonSI de AMD finalmente habilita OpenGL 4.6". Phoronix .
  75. ^ "Lanzamiento del controlador gráfico AMD Adrenalin 18.4.1 (OpenGL 4.6, Vulkan 1.1.70) – Geeks3D". www.geeks3d.com . Consultado el 10 de mayo de 2018 .
  76. ^ "Notas de la versión de Radeon Software Adrenalin Edition 18.4.1". support.amd.com . Consultado el 10 de mayo de 2018 .
  77. ^ "Lanzamiento del controlador de gráficos Intel 25.20.100.6861 (OpenGL 4.6 + Vulkan 1.1.103) | Geeks3D". 16 de mayo de 2019. Consultado el 16 de mayo de 2019 .
  78. ^ "Controladores DCH de Windows 10". Centro de descargas de Intel . Consultado el 21 de agosto de 2019 .
  79. ^ "Lanzamiento del controlador gráfico NVIDIA GeForce 397.31 (OpenGL 4.6, Vulkan 1.1, RTX, CUDA 9.2) – Geeks3D". www.geeks3d.com . 25 de abril de 2018 . Consultado el 10 de mayo de 2018 .
  80. ^ "Documentación para desarrolladores de Apple". developer.apple.com .
  81. ^ Cunningham, Andrew (7 de octubre de 2019). «macOS 10.15 Catalina: la reseña de Ars Technica». Ars Technica .
  82. ^ Axon, Samuel (6 de junio de 2018). «El fin del soporte de OpenGL, además de otras actualizaciones que Apple no compartió en la presentación principal». Ars Technica . Consultado el 19 de octubre de 2020 .
  83. ^ "Vulkan y OpenGL ES más rápido en iOS y macOS". Molten . Consultado el 19 de octubre de 2020 .
  84. ^ Los autores del proyecto ANGLE (14 de octubre de 2020). «google/angle: una implementación compatible con OpenGL ES para Windows, Mac, Linux, iOS y Android». GitHub . Consultado el 17 de diciembre de 2020 .
  85. ^ "Zink". Documentación más reciente de la biblioteca de gráficos 3D de Mesa .
  86. ^ "Estado de Windows en Arm64: una perspectiva de alto nivel". Chips and Cheese . 13 de marzo de 2022 . Consultado el 23 de octubre de 2023 .
  87. ^ "Presentación de OpenCL y OpenGL en DirectX". Collabora | Consultoría de código abierto . Consultado el 23 de octubre de 2023 .
  88. ^ "Análisis profundo de las capas de OpenGL sobre DirectX". Collabora | Consultoría de código abierto . Consultado el 23 de octubre de 2023 .
  89. ^ Dingman, Hayden (3 de marzo de 2015). "Conoce Vulkan, la poderosa tecnología de juegos independiente de la plataforma que apunta a DirectX 12". PC World . Consultado el 3 de marzo de 2015 .
  90. ^ Bright, Peter (3 de marzo de 2015). "Khronos presenta Vulkan: OpenGL creado para sistemas modernos". Ars Technica . Consultado el 3 de marzo de 2015 .
  91. ^ "Khronos anuncia la iniciativa OpenGL de próxima generación". AnandTech . Consultado el 20 de agosto de 2014 .
  92. ^ "Se lanzó OpenGL 4.5, se reveló el OpenGL de próxima generación: un asesino de Mantle multiplataforma, un competidor de DX12" . Consultado el 20 de agosto de 2014 .
  93. ^ "Khronos publica sus diapositivas sobre OpenGL-Next". Phoronix . Consultado el 22 de agosto de 2014 .

Lectura adicional

  • Sitio web oficial
  • Descripción general de OpenGL y Wiki de OpenGL.org con más información sobre los enlaces del lenguaje OpenGL
  • Sitio web OpenGL de SGI
  • Grupo Khronos, Inc.
Obtenido de "https://es.wikipedia.org/w/index.php?title=OpenGL&oldid=1251938897"