Utviklet av | Silicon Graphics og Khronos Group |
---|---|
Første versjon | Januar 1994 |
Siste versjon | 4.6 (31. juli 2017) |
Skrevet i | VS |
Type |
Programmeringsgrensesnitt Programvarebibliotek Spesifikasjon |
Nettsted | www.opengl.org |
Kronologi av versjoner
OpenGL ( Åpen G raphics L ibrary ) er et standardisert sett med funksjoner for beregning av 2D eller 3D -bilder lansert av Silicon Graphics i 1992. Dette programmeringsgrensesnitt er tilgjengelig på mange plattformer der det er brukt for applikasjoner som spenner fra spill video til CAD gjennom modellering.
OpenGL lar et program deklarere geometrien til objekter som punkter, vektorer, polygoner, bitmaps og teksturer. OpenGL utfører deretter projeksjonsberegninger for å bestemme skjermbildet, med tanke på avstand, retning, skygger, gjennomsiktighet og innramming.
Grensesnittet har rundt 250 forskjellige funksjoner som kan brukes til å vise komplekse tredimensjonale scener fra enkle geometriske primitiver. På grunn av sin åpenhet, fleksibilitet i bruk og tilgjengelighet på alle plattformer, brukes den av de fleste vitenskapelige, industrielle eller kunstneriske 3D-applikasjoner og visse 2D-vektorapplikasjoner . Dette biblioteket brukes også i videospillindustrien der det ofte er i konkurranse med Microsofts bibliotek : Direct3D . En versjon kalt OpenGL ES er designet spesielt for innebygde applikasjoner (mobiltelefoner, lommedagbøker, spillkonsoller osv.).
OpenGL er en utvikling av IrisGL, 3D API utviklet av Silicon Graphics (SGI). Sistnevnte var vanskelig å utvikle og utvide, og det ble bestemt på Silicon Graphics at OpenGL kunne assimileres med et supersett av IrisGL. De grunnleggende spesifikasjonene og utviklingen ble utført av et team fra Silicon Graphics. Fahrenheit- prosjektet , et initiativ fra Microsoft og Silicon Graphics, forsøkte å forene OpenGL- og Direct3D- grensesnittene . Dette førte opprinnelig til håp om å bringe orden i 3D API-ene, men på grunn av økonomiske begrensninger fra Silicon Graphics måtte prosjektet forlates.
OpenGL-spesifikasjonen overvåkes for tiden av Architecture Review Board (ARB), dannet i 1992 . ARB består av selskaper med en dyp interesse i å bygge en konsekvent og allment tilgjengelig API. Ifølge det offisielle OpenGL-nettstedet er AMD / ATI , Apple , Dell , Evans & Sutherland , Hewlett-Packard , IBM , Intel , Matrox , Nvidia , SGI og Sun blant de stemmeberettigede medlemmene (juni 2002). Microsoft , et av de grunnleggende medlemmene, trakk seg tilbakeMars 2003.
De 29. juli 2003kunngjøres OpenGL 1.5. Samtidig kunngjør ARB spesifikasjonene for et første utkast av OpenGL Shading Language, samt de tre utvidelsene ARB_shader_objects , ARB_vertex_shader og ARB_fragment_shader .
De 7. september 2004kunngjøres OpenGL 2.0. den OpenGL Shading Language ( GLSL , også kalt GLslang ) med en syntaks som ligner på C-språk er inkludert i en endelig versjon.
De 31. juli 2006På Siggraph- konferansen kunngjorde ARB sin beslutning om å overføre kontrollen av OpenGL-spesifikasjonen til Khronos Group , som allerede håndterte forskjellige OpenGL-spesifikasjoner for innebygde systemer og videospillkonsoller, inkludert OpenGL ES . Arkitekturstyret ble oppløst den21. september 2006, men av historiske grunner har akronymet “ARB” blitt beholdt.
De offisielle spesifikasjonene for OpenGL 3.0 ble utgitt 11. august 2008. Opprinnelig skulle OpenGL 3 være en stor forandring, med en fullstendig API-overhaling for å gjøre det mer konkurransedyktig med Direct3D . Det var spesielt et spørsmål om å forlate de foreldede funksjonalitetene som til da bare hadde blitt holdt for å være kompatible med gamle versjoner, bruk av en ny, mer sammenhengende objektmodell som spesielt innkapsler statene osv. Men etter et års forsinkelse og en fullstendig mangel på kommunikasjon fra Khronos-gruppen, ble denne totale overhalingen forlatt til fordel for en trinnvis oppdatering for ganske enkelt å støtte de nyeste grafiske teknologiene . Denne beslutningen skyldtes ønsket om å berolige visse markeder, for eksempel innen CAD , som ikke ønsket å se disse gamle funksjonalitetene forsvinne. Imidlertid vil foreldede funksjoner bli merket som " utfaset " i de nye spesifikasjonene, og kan bli fjernet i fremtidige versjoner.
Spesifikasjonene for OpenGL 3.1 ble utgitt 28. mai 2009. Den fjerner alle funksjonene som ble erklært foreldet i OpenGL 3.0.
Spesifikasjonene for OpenGL 3.2 ble utgitt 3. august 2009. Spesifikasjonene er delt inn i 2; hovedprofil ( kjerneprofil ) og kompatibel profil ( kompatibilitetsprofil ).
Sammen med lanseringen er lanseringen av GLSL 1.50 skyggespråkspesifikasjonen.
OpenGL 3.3-spesifikasjonene ble utgitt 11. mars 2010, de er de siste spesifikasjonene i 3.3-serien. Som med OpenGL 3.2, er det en hovedprofil og en kompatibel profil .
Denne versjonen brukes ofte som en sentral versjon for å nå før du porterer programvare fra OpenGL til Vulkan.
De 11. mars 2010, OpenGL 4.0 kunngjøres, har den som mål å utnytte maskinvaren som er kompatibel med DirectX 11.
Samtidig kunngjøres OpenGL 3.3.
I begynnelsen som ble kunngjort under navnet OpenGL Next , gjennomgår Vulkan viktige konsepter i OpenGL for å tilpasse seg de 25 årene utviklingen av 3D-grafikkprosessorer siden den første versjonen. Kompatibilitet med eldre versjoner er ikke lenger garantert.
De mest bemerkelsesverdige endringene er:
OpenGL-standarden lar forskjellige produsenter legge til ny funksjonalitet i form av utvidelser . En utvidelse er fordelt i to deler: en headerfil som inneholder prototypefunksjonene til utvidelsen og produsentens drivere. Hver av dem har en forkortelse som brukes til å navngi deres nye funksjoner og konstanter. For eksempel er forkortelsen for nVidia ( "NV") brukes for å definere deres proprietære funksjon "glCombinerParameterfvNV ()" og deres konstant "GL_NORMAL_MAP_NV". Det kan hende at mer enn én produsent implementerer den samme funksjonaliteten. I dette tilfellet brukes forkortelsen "EXT". Det kan også skje at ARB formaliserer en utvidelse. Dette blir da en standard og forkortelsen “ARB” brukes. Den første ARB-utvidelsen var GL_ARB_multitexture.
Flere biblioteker er utviklet fra OpenGL for å gi funksjonalitet som ikke er tilgjengelig i selve OpenGL-biblioteket:
Legg spesielt merke til OpenGL Performer- biblioteket , utviklet av Silicon Graphics og tilgjengelig for IRIX , Linux og noen versjoner av Windows , som gjør det mulig å lage gjengivelsesapplikasjoner i sanntid.
Her er et enkelt program, i 2D, som tegner en trekant og lar deg umiddelbart endre fargen ved å trykke på en av tastene r, g, b og den nederst med R, G, B. q-tasten avslutter programmet. Denne, som bruker GLUT for å forenkle programmeringen (tenk å installere den av Synaptic eller andre), er samlet og utført, under Linux eller WSL under Windows 10 , av cc colorswap.c -lglut -lGL -lGLU && ./a.out. OpenGL-biblioteker skal installeres fra repositoriene til din spesielle distribusjon. Målet med koden her er lesbarhet og ikke ytelse.
/* * 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; }Flere OpenGL-implementeringer (utnytter 3D-akselerasjonen fra maskinvaren) finnes for Windows, mange Unix- og Mac OS- arbeidsstasjoner . Disse implementeringene leveres vanligvis av produsenter av grafikkhardware og er nært knyttet til dem. Det er en gratis implementering av dette biblioteket, kalt Mesa , opprettet i 1993 av Brian Paul og bruker samme API, som tillot:
Silicon Graphics policy er å frigjøre den nest siste versjonen av GL, GLs grafikkbibliotek, til det offentlige området . Denne tilnærmingen :
Noen programvare bruker OpenGL til å administrere hele grensesnittet, til og med 2D, for eksempel Blender , Google Earth (OpenGL-versjon), GLtron, XBMC eller SGI- versjonen av X11 .
Rich Geldreich og Joshua Barczak kritiserer på sine personlige blogger OpenGL. Deres klager antyder på den ene siden behovet for en fullstendig overhaling i lys av erfaringene, og på den andre siden behovet for bedre å kontrollere spredningen av portager. Dette er imidlertid høyteknologiske brukere som trenger å bruke de mest avanserte funksjonene til 2014-grafikkort.