Desarrollado por | Silicon Graphics y Khronos Group |
---|---|
Primera versión | Enero de 1994 |
Última versión | 4,6 (31 de julio de 2017) |
Escrito en | VS |
Tipo |
Interfaz de programación Biblioteca de software Especificación |
Sitio web | www.opengl.org |
Cronología de versiones
OpenGL ( Open G raphics L ibrary ) es un conjunto estandarizado de funciones para calcular imágenes 2D o 3D lanzado por Silicon Graphics en 1992. Esta interfaz de programación está disponible en muchas plataformas donde se utiliza para aplicaciones que van desde video de juegos hasta CAD pasando por modelado.
OpenGL permite que un programa declare la geometría de objetos como puntos, vectores, polígonos, mapas de bits y texturas. OpenGL luego realiza cálculos de proyección para determinar la imagen de la pantalla, teniendo en cuenta la distancia, la orientación, las sombras, la transparencia y el encuadre.
La interfaz tiene alrededor de 250 funciones diferentes que se pueden usar para mostrar escenas tridimensionales complejas a partir de primitivas geométricas simples. Debido a su apertura, su flexibilidad de uso y su disponibilidad en todas las plataformas, es utilizado por la mayoría de aplicaciones 3D científicas, industriales o artísticas y ciertas aplicaciones vectoriales 2D . Esta biblioteca también se utiliza en la industria de los videojuegos, donde a menudo compite con la biblioteca de Microsoft : Direct3D . Una versión llamada OpenGL ES fue diseñada específicamente para aplicaciones integradas (teléfonos móviles, agendas de bolsillo, consolas de juegos, etc.).
OpenGL es una evolución de IrisGL, API 3D desarrollada por Silicon Graphics (SGI). Siendo este último difícil de desarrollar y ampliar, se decidió en Silicon Graphics que OpenGL podría asimilarse a un superconjunto de IrisGL. Las especificaciones y desarrollos básicos fueron realizados por un equipo de Silicon Graphics. El proyecto Fahrenheit , una iniciativa de Microsoft y Silicon Graphics, intentó unificar las interfaces OpenGL y Direct3D . Esto inicialmente trajo esperanza de poner orden en el mundo de las API 3D, pero debido a las limitaciones financieras de Silicon Graphics, el proyecto tuvo que abandonarse.
La especificación OpenGL está actualmente supervisada por la Junta de Revisión de Arquitectura (ARB), formada en 1992 . El ARB está formado por empresas con un profundo interés en construir una API consistente y ampliamente disponible. Según el sitio web oficial de OpenGL, AMD / ATI , Apple , Dell , Evans & Sutherland , Hewlett-Packard , IBM , Intel , Matrox , Nvidia , SGI y Sun se encuentran entre los miembros votantes (junio de 2002). Microsoft , uno de los miembros fundadores, se retiróMarzo de 2003.
La 29 de julio de 2003Se anuncia OpenGL 1.5. Al mismo tiempo, ARB anuncia las especificaciones para un primer borrador del lenguaje de sombreado OpenGL, así como las tres extensiones ARB_shader_objects , ARB_vertex_shader y ARB_fragment_shader .
La 7 de septiembre de 2004se anuncia OpenGL 2.0. el OpenGL Shading Language ( GLSL , también apodado GLslang ) con una sintaxis similar al lenguaje C se incluye en una versión definitiva.
La 31 de julio de 2006En la conferencia Siggraph , la ARB anunció su decisión de transferir el control de la especificación OpenGL al Grupo Khronos , que ya manejaba varias especificaciones OpenGL para sistemas integrados y consolas de videojuegos, incluido OpenGL ES . La Junta de Revisión de Arquitectura se disolvió el21 de septiembre de 2006, pero por razones históricas se ha mantenido el acrónimo “ARB”.
Las especificaciones oficiales para OpenGL 3.0 se publicaron el 11 de agosto de 2008. Originalmente, se suponía que OpenGL 3 sería un cambio importante, con una revisión completa de la API para hacerlo más competitivo con Direct3D . En particular, se trataba de abandonar funcionalidades obsoletas que, hasta entonces, se habían mantenido solo por compatibilidad con versiones antiguas, el uso de un nuevo modelo de objetos más coherente que encapsula notablemente estados, etc. Sin embargo, después de un año de retraso y una completa falta de comunicación por parte del grupo Khronos, esta revisión total se abandonó en favor de una actualización incremental para simplemente admitir las últimas tecnologías gráficas . Esta decisión obedecería al deseo de tranquilizar a determinados mercados, por ejemplo en CAD , que no querían ver desaparecer estas viejas funcionalidades. Sin embargo, las funciones obsoletas se marcarán como " obsoletas " en las nuevas especificaciones y pueden eliminarse en versiones futuras.
Las especificaciones para OpenGL 3.1 se publicaron el 28 de mayo de 2009. Elimina todas las funciones que se declararon obsoletas en OpenGL 3.0.
Las especificaciones para OpenGL 3.2 se publicaron el 3 de agosto de 2009. Las especificaciones se dividen en 2; perfil principal ( perfil principal ) y perfil compatible ( perfil de compatibilidad ).
Junto con su lanzamiento, está el lanzamiento de la especificación del lenguaje de sombreado GLSL 1.50.
Las especificaciones OpenGL 3.3 se publicaron el 11 de marzo de 2010, son las últimas especificaciones de la serie 3.3. Al igual que con OpenGL 3.2, hay un perfil principal y un perfil compatible .
Esta versión se usa a menudo como una versión fundamental para alcanzar antes de migrar el software de OpenGL a Vulkan.
La 11 de marzo de 2010, Se anuncia OpenGL 4.0, su objetivo es aprovechar al máximo el hardware compatible con DirectX 11.
Al mismo tiempo, también se anuncia OpenGL 3.3.
En un principio anunciado bajo el nombre OpenGL Next , Vulkan está revisando conceptos importantes de OpenGL para adaptarse a los 25 años de evolución de los procesadores gráficos 3D desde la primera versión. Ya no se garantiza la compatibilidad con versiones anteriores.
Los cambios más notables son:
El estándar OpenGL permite a diferentes fabricantes agregar nuevas funcionalidades en forma de extensiones . Una extensión se distribuye en 2 partes: un archivo de encabezado que contiene las funciones prototipo de la extensión y los controladores del fabricante. Cada uno de ellos tiene una abreviatura 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 fabricante implemente la misma funcionalidad. En este caso, se utiliza la abreviatura "EXT". También puede suceder que la ARB formalice una prórroga. Esto luego se convierte en un estándar y se utiliza la abreviatura "ARB". La primera extensión ARB fue GL_ARB_multitexture.
Varias bibliotecas se desarrollan a partir de OpenGL para proporcionar una funcionalidad que no está disponible en la propia biblioteca de OpenGL:
Nótese en particular la biblioteca OpenGL Performer , desarrollada por Silicon Graphics y disponible para IRIX , Linux y algunas versiones de Windows , que permite la creación de aplicaciones de renderizado en tiempo real.
Aquí hay un programa simple, en 2D, dibujando un triángulo y permitiendo modificar instantáneamente su color presionando una de las teclas r, g, by la de abajo con R, G, B. La tecla q sale del programa. Este, que usa GLUT para simplificar la programación (piense en instalarlo por Synaptic u otro), es compilado y ejecutado, bajo Linux o WSL bajo Windows 10 , por cc colorswap.c -lglut -lGL -lGLU && ./a.out. Las bibliotecas OpenGL deben instalarse desde los repositorios de su distribución particular. El objetivo del código aquí es la legibilidad y no el rendimiento.
/* * colorswap.c - Options -lglut -lGL -lGLU : * cc colorswap.c -lglut -lGL -lGLU && ./a.out * * Donnez le focus à la fenêtre, puis pressez : * R G B ou Y pour couleur du fond * r g b ou y pour celle de l'encre * q pour quitter. * * Programme écrit sous OpenSuSE avec Geany sous * Sony Satellite G50 bootant Linux d'un SSD USB3 * en inhibant le secure boot et en donnant la * priorité de boot à l'USB. */ #include <GL/glut.h> int firstPass = 1; // simule le « once » d'Eiffel // Fonction associée (« callback ») à la fenêtre. // Elle redessine tout quand on redimensionne. void Rafraichir(void) { glClear(GL_COLOR_BUFFER_BIT); // Effacer la surface graphique if (firstPass) { glColor3f(0, 0, 1.0); // Encre bleue au départ firstPass = 0; } // Dessiner un triangle glBegin(GL_POLYGON); // Commencer un polygone glVertex2i(100, 100); // Coordonnées des trois points glVertex2i(400, 100); glVertex2i(250, 400); glEnd(); // Fermer le polygone glFlush(); // Dessiner le polygone } // Action sur frappe d'une touche au clavier void Clavier(unsigned char key, int x, int y) { switch(key) { case 'q' : exit(0); // q => « quitter » case 'R' : glClearColor(1, 0, 0, 0); break; // R G B : couleur fond case 'G' : glClearColor(0, 1, 0, 0); break; case 'B' : glClearColor(0, 0, 1, 0); break; case 'Y' : glClearColor(1, 1, 0, 0); break; // Y : jaune case 'r' : glColor3f(1, 0, 0); break; // r g b : couleur encre case 'g' : glColor3f(0, 1, 0); break; case 'b' : glColor3f(0, 0, 1); break; case 'y' : glColor3f(1, 1, 0); break; // y ; jaune } Rafraichir(); // Affichage } int main(int argc, char *argv[]) { int win; // Identificateur de fenêtre (une seule) glutInit(&argc, argv); // initialise GLUT glutInitDisplayMode(GLUT_RGB); // On travaille en RGB glutInitWindowSize(500,400); // 500px large, 400px haut win = glutCreateWindow("Pressez r/g/b/y/R/G/B/Y/q"); // Ordres maintenant exécutés dans la fenêtre « win » glClearColor(0.9, 0.9, 0.2, 0); // Jaune gluOrtho2D(0,600,0,600); // On garde ces coordonnées glutDisplayFunc(Rafraichir); // Callback de la fenêtre glutKeyboardFunc(Clavier); // Callback du clavier glutMainLoop(); // Boucle infinie /* Le programme n'atteint jamais ce point */ return 0; }Existen varias implementaciones de OpenGL (que aprovechan la aceleración 3D proporcionada por el hardware) para Windows, muchas estaciones Unix y Mac OS . Estas implementaciones las proporcionan generalmente los fabricantes de hardware de gráficos y están estrechamente relacionadas con ellos. Existe una implementación gratuita de esta biblioteca, denominada Mesa , creada en 1993 por Brian Paul y utilizando la misma API, que permitía:
La política de Silicon Graphics es lanzar la penúltima versión de GL, la biblioteca de gráficos de GL, al dominio público cada vez . Este enfoque :
Algunos programas usan OpenGL para administrar toda su interfaz, incluso 2D, como Blender , Google Earth (versión OpenGL), GLtron, XBMC o la versión SGI de X11 .
Rich Geldreich y Joshua Barczak, en sus blogs personales, critican OpenGL. Sus quejas sugieren, por un lado, la necesidad de una revisión completa a la luz de la experiencia adquirida y, por otro, la necesidad de controlar mejor la dispersión de los porteos. Sin embargo, se trata de usuarios de alta tecnología que necesitan utilizar las funciones más avanzadas de las tarjetas gráficas de 2014.