OpenGL | |
---|---|
Tipo de | API |
Desarrollador | Silicon Graphics , luego Grupo Khronos |
Escrito en | Lenguaje de sombreado C y OpenGL |
Sistema operativo | Software multiplataforma |
Primera edición | 1 de julio de 1992 [1] |
ultima versión | 4.6 ( 31 de julio de 2017 ) |
Estado | ver Vulcano |
Licencia | CLUF, ACORP |
Sitio web | opengl.org |
Archivos multimedia en Wikimedia Commons |
OpenGL ( Open Graphics Library ) es una especificación que define una interfaz de programación independiente de la plataforma (independiente del lenguaje de programación ) para escribir aplicaciones que utilizan gráficos de computadora bidimensionales y tridimensionales . Desarrollado en EE.UU. y Europa, licenciado bajo el tipo GNU-/EU/.
Incluye más de 300 funciones para dibujar escenas 3D complejas a partir de primitivas simples. Utilizado en la creación de juegos de computadora , CAD , realidad virtual , visualización en investigación científica. En la plataforma Windows , compite con Direct3D .
En un nivel básico, OpenGL es solo una especificación , es decir, un documento que describe un conjunto de características y su comportamiento exacto. En base a esta especificación, los fabricantes de hardware crean implementaciones : bibliotecas de funciones que corresponden al conjunto de funciones de la especificación. La implementación está diseñada para utilizar eficazmente las capacidades del hardware. Si el hardware no permite una función, debe emularse en el software. Los fabricantes de hardware pasan por una serie de pruebas específicas (pruebas de conformidad) antes de que una implementación se clasifique como implementación de OpenGL. Dado que es suficiente que los desarrolladores de software aprendan a usar las funciones descritas en la especificación, su implementación se deja a los desarrolladores de hardware.
Existen implementaciones eficientes de OpenGL para Windows , plataformas Unix y Mac OS . Estas implementaciones generalmente las proporcionan los fabricantes de tarjetas de video y hacen un uso extensivo de las capacidades de estos últimos. También hay implementaciones de código abierto de la especificación OpenGL, una de las cuales es la biblioteca Mesa . Por motivos de licencia, Mesa es una implementación "no oficial" de OpenGL, aunque es totalmente compatible a nivel de código y admite tanto la emulación de software como la aceleración de hardware con los controladores apropiados.
La especificación OpenGL está siendo revisada por el consorcio ARB (Architecture Review Board), que se formó en 1992. El consorcio está formado por empresas interesadas en construir una API accesible y ampliamente aceptada . Según el sitio web oficial de OpenGL, los miembros de la ARB con voto a partir de noviembre de 2004 son los fabricantes de hardware de gráficos profesionales SGI , 3Dlabs , Matrox y Evans & Sutherland (aplicaciones militares), los fabricantes de hardware de gráficos de consumo ATI y NVIDIA , el fabricante de procesadores Intel y los fabricantes y hardware de computadoras de IBM , Apple , Dell , Hewlett-Packard y Sun Microsystems , así como uno de los líderes en la industria de juegos de computadora, id Software . Microsoft , uno de los miembros fundadores del consorcio, se fue en marzo de 2003. Además de los miembros permanentes, cada año se invita a un gran número de otras empresas a formar parte de OpenGL ARB en el plazo de un año. Una cantidad tan grande de empresas involucradas en una amplia gama de intereses ha permitido que OpenGL se convierta en una interfaz de aplicación de propósito general con muchas funciones.
Kurt Akeley y Mark Segal son los autores de la especificación OpenGL original. Chris Frazier editó la versión 1.1. Jon Leech editó las versiones 1.2 a 2.0.
OpenGL se centra en las siguientes dos tareas:
El principio básico de OpenGL es obtener conjuntos de primitivas de gráficos vectoriales en forma de puntos, líneas y triángulos, seguido del procesamiento matemático de los datos recibidos y la construcción de una imagen de mapa de bits en la pantalla y/o en la memoria. Las transformaciones vectoriales y la rasterización se realizan mediante la canalización de gráficos, que es esencialmente un autómata discreto . La gran mayoría de los comandos de OpenGL se dividen en uno de dos grupos: agregan primitivas de gráficos como entrada a la canalización o configuran la canalización para realizar diferentes transformaciones.
OpenGL es una API de procedimiento de bajo nivel que obliga al programador a dictar la secuencia exacta de pasos para construir los gráficos de mapa de bits resultantes (el enfoque imperativo). Esta es la principal diferencia con los enfoques de descriptores, cuando toda la escena se transmite como una estructura de datos (la mayoría de las veces un árbol), que se procesa y construye en la pantalla. Por un lado, el enfoque imperativo requiere que el programador tenga un conocimiento profundo de las leyes de los gráficos tridimensionales y los modelos matemáticos, por otro lado, da la libertad de introducir varias innovaciones.
El estándar OpenGL, con la llegada de nuevas tecnologías, permite a los proveedores individuales agregar funcionalidad a la biblioteca a través del mecanismo de extensión . Las extensiones se distribuyen utilizando dos componentes: un archivo de encabezado que contiene prototipos de nuevas funciones y constantes , y un controlador de dispositivo proporcionado por el desarrollador. Cada fabricante tiene una abreviatura que se utiliza al nombrar sus nuevas funciones y constantes. Por ejemplo, NVIDIA tiene la abreviatura NV , que se usa para nombrar sus nuevas funciones, como , glCombinerParameterfvNV()así como constantes, GL_NORMAL_MAP_NV. Puede suceder que una determinada extensión pueda ser implementada por varios fabricantes. En este caso se utiliza la abreviatura EXT , por ejemplo, glDeleteRenderbuffersEXT. Cuando una extensión es aprobada por el consorcio ARB , adquiere la abreviatura ARB y se convierte en una extensión estándar. Por lo general, las extensiones aprobadas por el consorcio se incluyen en una de las siguientes especificaciones de OpenGL.
La lista de extensiones registradas se puede encontrar en la base de datos oficial de extensiones [2] .
Hay una serie de bibliotecas construidas sobre o además de OpenGL. Por ejemplo, la biblioteca GLU , que es casi una adición estándar a OpenGL y siempre lo acompaña, está construida sobre este último, es decir, utiliza sus funciones para implementar sus capacidades. Otras bibliotecas, como GLUT y SDL , están diseñadas para implementar funciones que no están disponibles en OpenGL. Estas funciones incluyen la creación de una interfaz de usuario (ventanas, botones, menús, etc.), la configuración de un contexto de dibujo (área de dibujo utilizada por OpenGL), el manejo de mensajes de dispositivos de E/S (teclado, mouse, etc.) y el trabajo con archivos. . Por lo general, cada administrador de ventanas tiene su propia biblioteca de extensiones para implementar las funciones anteriores, como WGL en Windows o GLX en el sistema X Window , pero las bibliotecas GLUT y SDL son multiplataforma, lo que facilita la transferencia de aplicaciones escritas a otros. plataformas
Las bibliotecas GLEW (The OpenGL Extension Wrangler Library) y GLEE (The OpenGL Easy Extension library) están diseñadas para facilitar el trabajo con extensiones y diferentes versiones de OpenGL. Esto es especialmente cierto para los programadores de Windows, ya que los archivos de encabezado y biblioteca que se envían con Visual Studio están en el nivel de versión de OpenGL 1.1.
OpenGL tiene solo un conjunto de primitivas geométricas (puntos, líneas, polígonos) a partir de las cuales se crean todos los objetos tridimensionales. A veces, este nivel de detalle no siempre es conveniente al crear escenas. Por lo tanto, las bibliotecas de nivel superior, como Open Inventor y VTK , se han creado sobre OpenGL . Estas bibliotecas le permiten operar con objetos 3D más complejos, lo que facilita y acelera la creación de una escena 3D.
GLM (OpenGL Mathematics) es una biblioteca de utilidades que proporciona a los programadores de C++ clases y funciones para realizar operaciones matemáticas. La biblioteca se puede usar al crear programas 3D usando OpenGL [3] . Una de las características de GLM es que la implementación se basa en la especificación GLSL . El código fuente de GLM utiliza la licencia MIT .
Para confirmar la independencia del lenguaje de programación, se han desarrollado varias opciones para enlazar (enlazar) las funciones de OpenGL o se han portado completamente a otros lenguajes. Un ejemplo es la biblioteca Java 3D , que puede usar la aceleración de hardware OpenGL. El enlace de funciones directas se implementa en la biblioteca de juegos de Java ligero [4] , que tiene un enlace OpenGL directo para Java . Sun también ha lanzado una versión de Java OpenGL (JOGL) que proporciona enlace directo a las funciones de OpenGL C , a diferencia de Java 3D, que no tiene soporte de bajo nivel. El sitio oficial de OpenGL tiene enlaces a enlaces para Java, Fortran 90 , Perl , Pike , Python , Ada , Visual Basic y Pascal [5] . También hay opciones de enlace OpenGL para C++ y C# [6] .
Los gráficos por computadora han encontrado una amplia distribución y aplicación en la vida cotidiana. Los científicos utilizan gráficos por computadora para analizar los resultados de la simulación. Los ingenieros y arquitectos utilizan gráficos 3D para crear modelos virtuales . Los cineastas crean efectos especiales o películas completamente animadas (" Shrek ", " Toy Story ", etc.). En los últimos años también se han generalizado los juegos de ordenador , que aprovechan los gráficos tridimensionales para crear mundos virtuales.
La difusión de los gráficos por computadora vino con su propio conjunto de dificultades. En la década de 1990, desarrollar un producto de software que pudiera ejecutarse en una amplia variedad de hardware de gráficos era una tarea que requería mucho tiempo y dinero. Era necesario crear módulos por separado para cada tipo de adaptadores gráficos , lo que en ocasiones llevaba a la duplicación del mismo código de programa. Esto dificultó enormemente el desarrollo y la difusión de los gráficos por computadora.
Silicon Graphics (SGI) se especializó en la creación de hardware y software de gráficos de alta tecnología. Como líder en gráficos 3D en ese momento, SGI vio problemas y barreras en el crecimiento del mercado. Por ello, se decidió estandarizar el método de acceso al hardware gráfico a nivel de la interfaz del programa .
Así nació la interfaz de programación OpenGL, que estandariza el acceso al hardware de gráficos al transferir la responsabilidad de crear un controlador de hardware al fabricante del dispositivo de gráficos. Esto permitió a los desarrolladores de software utilizar un mayor nivel de abstracción del hardware de gráficos, lo que aceleró enormemente la creación de nuevos productos de software y redujo sus costos.
En 1992, SGI lideró OpenGL ARB , un grupo de empresas que desarrollaba la especificación OpenGL. OpenGL se deriva de la interfaz 3D de SGI, IRIS GL . Una de las limitaciones de IRIS GL era que solo permitía funciones compatibles con el hardware; si la capacidad no se implementó en el hardware, la aplicación no podría usarla. OpenGL supera este problema mediante la implementación de funciones en el software que no están disponibles en el hardware, lo que permite que las aplicaciones utilicen esta interfaz en sistemas de potencia relativamente baja.
En 1995, se lanzó la biblioteca Direct3D de Microsoft . En poco tiempo, Microsoft, SGI y Hewlett-Packard iniciaron un proyecto llamado Fahrenheit, cuyo objetivo era crear una interfaz de programación más general basada en Direct3D y OpenGL. La idea parecía lo suficientemente prometedora para poner orden en el campo de los gráficos 3D interactivos, sin embargo, como resultado de las dificultades financieras de SGI y la falta de apoyo industrial adecuado, el proyecto se abandonó.
En septiembre de 2001, 3DLabs reveló su visión de OpenGL 2.0.
3Dlabs introdujo OpenGL versión 2.0 en respuesta a las preocupaciones sobre la dirección lenta y poco clara del desarrollo de OpenGL. 3Dlabs propuso una serie de adiciones significativas al estándar, la más importante de las cuales fue la adición del lenguaje de sombreado GLSL (OpenGL Shading Language) al núcleo de OpenGL. Esto le permite al programador reemplazar la canalización fija de OpenGL con pequeños programas en un lenguaje especial para crear varios efectos, como mapeo de relieve , mapeo normal, mapeo de paralaje , HDR , etc.
Sin embargo, incluso antes de la introducción del lenguaje GLSL en el estándar OpenGL, era posible desarrollar efectos especiales en lenguajes ensambladores (extensiones vertex_program, fragment_program) y Cg (NVidia C for Graphics). Muchas características propuestas aún no están disponibles en OpenGL 2.0, aunque algunos de ellos han sido implementados como extensiones por muchos proveedores.
OpenGL 2.1Publicado el 2 de julio de 2006.
Se agregó soporte para GLSL versión 1.2
Nuevas extensiones:
El 11 de agosto de 2008, el Grupo Khronos lanzó una nueva versión de la especificación OpenGL [7] .
Tarjetas de video compatibles: serie Radeon HD; Serie GeForce 8, 9, GTX 100, GTX 200, GTX 300 y GTX 400.
OpenGL 3.1El 24 de marzo de 2009, Khronos Group anunció OpenGL 3.1. La nueva versión limpió los componentes que se declararon obsoletos, pero permanecieron en OpenGL 3.0 para suavizar la transición a la nueva versión de la API (los componentes obsoletos se pueden usar en el futuro a través de la extensión GL_ARB_compatibility).
OpenGL 3.2El 3 de agosto de 2009, Khronos Group anunció OpenGL 3.2. La nueva versión continúa el desarrollo del estándar OpenGL para brindar a los desarrolladores de gráficos acceso a la funcionalidad avanzada de GPU.
Tarjetas de video compatibles: serie Radeon HD; Serie GeForce 8000, 9000, GTX 200 y 400.
Innovaciones:
Introducido con OpenGL 4.0 el 11 de marzo de 2010. Le permite acercarse lo más posible a la funcionalidad de OpenGL 4.0 en el hardware de la generación anterior.
El 11 de marzo de 2010, Khronos Group presentó la versión final de la especificación OpenGL 4.0 y el lenguaje de sombreado GLSL 4.0. OpenGL 4.0 es totalmente compatible con versiones anteriores de extensiones de OpenGL, utilizando el modo de compatibilidad introducido en OpenGL 3.2 [8] .
Entre las novedades [9] :
El 26 de julio de 2010, Khronos Group anunció la especificación OpenGL 4.1. La especificación incluye una actualización de GLSL (lenguaje de sombreado GL) a la versión 4.10.
Innovaciones:
Nuevas extensiones:
El 8 de agosto de 2011, el Grupo Khronos publicó la especificación para OpenGL 4.2 y el lenguaje de sombreado GLSL 4.2 [10] .
Innovaciones:
El 6 de agosto de 2012, el Grupo Khronos publicó la especificación OpenGL 4.3 [11] [12] en SIGGRAPH 2012 . Además de las nuevas funciones, OpenGL 4.3 brinda soporte para un nuevo tipo de sombreador a través de la extensión GL_ARB_compute_shader. La nueva versión es retrocompatible con las anteriores.
OpenGL 4.4Tarjetas de video compatibles: AMD/ATi Radeon HD 5000/6000/7000/8000 y 200 series, Nvidia GeForce 400/500/600/700/980 series.
El 22 de julio de 2013, el Grupo Khronos en SIGGRAPH en Anaheim, California, publicó la especificación OpenGL 4.4 [13] .
OpenGL 4.5Tarjetas gráficas compatibles: AMD/ATi Radeon basadas en arquitectura GCN, serie Nvidia GeForce 400/500/600/700/800/900.
El 11 de agosto de 2014, el Grupo Khronos de SIGGRAPH en Vancouver, Canadá, publicó la especificación OpenGL 4.5 [14] .
OpenGL 4.6El 31 de julio de 2017, el Grupo Khronos publicó las especificaciones de OpenGL 4.6. La principal innovación es una representación intermedia portátil de los shaders SPIR-V, desarrollado originalmente para la API de Vulkan [15] .
Apple en junio de 2018 en el evento WWDC desaprobó las tecnologías OpenGL y OpenGL ES . [dieciséis]
Los sistemas operativos Fuchsia y Stadia de forma nativa solo son compatibles con Vulkan .
17 de septiembre de 2021 Valve ha eliminado la compatibilidad con OpenGL del popular juego Dota 2 [17] [18]
Todos los juegos nuevos desde 2016 que usan el motor de juego id Tech 6 usan Vulkan como su interfaz de renderizado .
El motor de juego ID Tech 7 solo es compatible con la especificación Vulkan .
Juegos atípicos, respaldados por Samsung , se encargaron de brindar soporte Vulkan a su motor. Eventualmente quedó claro que la implementación de Vulkan en realidad reemplazaría a OpenGL en todas las plataformas excepto Apple [19]
El motor de juego Unity no es compatible con OpenGL/OpenGL ES para canalización HDR [20]
OpenGL no es compatible con Ray Tracing , una API para la decodificación de video en la GPU a diferencia de Vulkan
Los sombreadores de malla en OpenGL solo son compatibles con nVidia [21]
Anti- aliasing con AMD FidelityFX Super Resolution (FSR) [22] [23] y Nvidia Deep Learning Super Sampling (DLSS) [24] [25] Los algoritmos de aprendizaje profundo no son compatibles con OpenGL
Vulkan, anteriormente conocido como glNext, es una nueva API que cumple con los requisitos de las realidades modernas y elimina los principales inconvenientes de OpenGL. Ofrece una sobrecarga más baja y un control más directo sobre la GPU. Khronos Group lo ha estado desarrollando desde 2014. La versión 1.0 se lanzó el 16 de febrero de 2016 [26] .
del grupo Khronos | Los estándares|
---|---|
Activo | |
Inactivo |
|