Opracowany przez | Silicon Graphics i Khronos Group |
---|---|
Pierwsza wersja | Styczeń 1994 |
Ostatnia wersja | 4,6 (31 lipca 2017 r.) |
Napisane w | VS |
Rodzaj |
Interfejs programowania Biblioteka oprogramowania Specyfikacja |
Stronie internetowej | www.opengl.org |
Chronologia wersji
OpenGL ( Otwórz G grafik ę L ibrary ) jest standaryzowany zestaw funkcji do obliczania 2D lub 3D obrazów uruchamianych przez Silicon Graphics w roku 1992. Ten interfejs programowania jest dostępny na wiele platform, gdzie jest używany do zastosowań, począwszy od gier wideo do CAD poprzez modelowanie.
OpenGL umożliwia programowi deklarowanie geometrii obiektów jako punktów, wektorów, wielokątów, bitmap i tekstur. OpenGL wykonuje następnie obliczenia projekcji w celu określenia obrazu ekranu, biorąc pod uwagę odległość, orientację, cienie, przezroczystość i kadrowanie.
Interfejs ma około 250 różnych funkcji, które można wykorzystać do wyświetlania złożonych scen trójwymiarowych z prostych geometrycznych prymitywów. Ze względu na swoją otwartość, elastyczność użytkowania i dostępność na wszystkich platformach, jest używany przez większość naukowych, przemysłowych lub artystycznych aplikacji 3D oraz niektóre aplikacje wektorowe 2D . Ta biblioteka jest również wykorzystywana w branży gier wideo, gdzie często konkuruje z biblioteką Microsoft : Direct3D . Wersja o nazwie OpenGL ES została zaprojektowana specjalnie dla aplikacji pokładowych (telefony komórkowe, pamiętniki kieszonkowe, konsole do gier itp.).
OpenGL to ewolucja IrisGL, 3D API opracowanego przez Silicon Graphics (SGI). Ten ostatni, trudny do opracowania i rozszerzenia, w Silicon Graphics zdecydowano, że OpenGL może być utożsamiany z nadzbiorem IrisGL. Podstawowe specyfikacje i zmiany zostały wykonane przez zespół z Silicon Graphics. Projekt Fahrenheit , inicjatywa Microsoft i Silicon Graphics, próbowała ujednolicić interfejsy OpenGL i Direct3D . Początkowo przyniosło to nadzieję na uporządkowanie świata interfejsów API 3D, ale ze względu na ograniczenia finansowe ze strony Silicon Graphics projekt musiał zostać porzucony.
Specyfikacja OpenGL jest obecnie nadzorowana przez Architecture Review Board (ARB), utworzoną w 1992 roku . ARB tworzą firmy, które są głęboko zainteresowane budowaniem spójnego i powszechnie dostępnego API. Według oficjalnej strony OpenGL, wśród głosujących członków znalazły się AMD/ATI , Apple , Dell , Evans & Sutherland , Hewlett-Packard , IBM , Intel , Matrox , Nvidia , SGI i Sun (czerwiec 2002). Microsoft , jeden z członków założycieli, wycofał sięMarzec 2003.
29 lipca 2003 r.zapowiedziany jest OpenGL 1.5. W tym samym czasie ARB ogłasza specyfikacje dla pierwszego szkicu OpenGL Shading Language oraz trzech rozszerzeń ARB_shader_objects , ARB_vertex_shader i ARB_fragment_shader .
7 września 2004 r.ogłoszono OpenGL 2.0. OpenGL Shading Language ( GLSL , również nazywany GLslang ) o składni podobnej do języka C jest zawarta w ostatecznej wersji.
31 lipca 2006 r.Na konferencji Siggraph ARB ogłosiła decyzję o przekazaniu kontroli nad specyfikacją OpenGL firmie Khronos Group , która już obsługiwała różne specyfikacje OpenGL dla systemów wbudowanych i konsol do gier wideo , w tym OpenGL ES . Rada Rewizyjna Architektury została rozwiązana w dniu21 września 2006 r., ale ze względów historycznych akronim „ARB” został zachowany.
Oficjalne specyfikacje OpenGL 3.0 zostały wydane 11 sierpnia 2008 roku. Pierwotnie OpenGL 3 miał być poważną zmianą, z całkowitą przebudową API, aby uczynić go bardziej konkurencyjnym w stosunku do Direct3D . Chodziło w szczególności o porzucenie przestarzałych funkcjonalności, które do tej pory utrzymywano tylko ze względu na kompatybilność ze starymi wersjami, zastosowanie nowego, bardziej spójnego modelu obiektowego, który w szczególności zawiera stany itp. Jednak po rocznym opóźnieniu i całkowitym braku komunikacji ze strony grupy Khronos zrezygnowano z tego całkowitego remontu na rzecz aktualizacji przyrostowej, aby po prostu wspierać najnowsze technologie graficzne . Ta decyzja byłaby spowodowana chęcią uspokojenia niektórych rynków, na przykład CAD , które nie chciały, aby te stare funkcjonalności zniknęły. Jednak w nowych specyfikacjach przestarzałe funkcje będą oznaczone jako „ przestarzałe ” i mogą zostać usunięte w przyszłych wersjach.
Specyfikacje dla OpenGL 3.1 zostały wydane 28 maja 2009. Usuwa wszystkie funkcje, które zostały uznane za przestarzałe w OpenGL 3.0.
Specyfikacje dla OpenGL 3.2 zostały wydane 3 sierpnia 2009. Specyfikacje są podzielone na 2; profil główny ( profil podstawowy ) i profil kompatybilny ( profil kompatybilności ).
Wraz z jego wydaniem zostaje wydana specyfikacja języka shaderów GLSL 1.50.
Specyfikacje OpenGL 3.3 zostały wydane 11 marca 2010 roku i są ostatnimi specyfikacjami z serii 3.3. Podobnie jak w OpenGL 3.2, istnieje profil główny i profil kompatybilny .
Ta wersja jest często używana jako kluczowa wersja przed przeniesieniem oprogramowania z OpenGL do Vulkan.
11 marca 2010, zapowiadany jest OpenGL 4.0, którego celem jest pełne wykorzystanie sprzętu zgodnego z DirectX 11.
Jednocześnie zapowiadany jest również OpenGL 3.3.
Na początku ogłaszany pod nazwą OpenGL Next , Vulkan dokonuje przeglądu ważnych koncepcji OpenGL, aby dostosować się do 25 lat ewolucji procesorów graficznych 3D od czasu pierwszej wersji. Kompatybilność ze starszymi wersjami nie jest już gwarantowana.
Najważniejsze zmiany to:
Standard OpenGL umożliwia różnym producentom dodawanie nowych funkcji w postaci rozszerzeń . Rozszerzenie jest dystrybuowane w 2 częściach: plik nagłówkowy, który zawiera prototypowe funkcje rozszerzenia oraz sterowniki producenta. Każdy z nich posiada skrót, którym określa się ich nowe funkcje i stałe. Na przykład skrót od nVidia („NV”) jest używany do zdefiniowania ich zastrzeżonej funkcji „glCombinerParameterfvNV()” i ich stałej „GL_NORMAL_MAP_NV”. Może się zdarzyć, że więcej niż jeden producent wdraża tę samą funkcjonalność. W takim przypadku używany jest skrót „EXT”. Może się również zdarzyć, że ARB sformalizuje przedłużenie. Staje się to wtedy standardem i używany jest skrót „ARB”. Pierwszym rozszerzeniem ARB było GL_ARB_multitexture.
Kilka bibliotek zostało opracowanych z OpenGL w celu zapewnienia funkcjonalności, która nie jest dostępna w samej bibliotece OpenGL:
Zwróć uwagę w szczególności na bibliotekę OpenGL Performer , opracowaną przez Silicon Graphics i dostępną dla IRIX , Linux i niektórych wersji Windows , która umożliwia tworzenie aplikacji renderujących w czasie rzeczywistym.
Oto prosty program w 2D, rysujący trójkąt i pozwalający na natychmiastową modyfikację jego koloru przez naciśnięcie jednego z klawiszy r, g, b oraz tego na dole z R, G, B. Klawisz q zamyka program. Ten, który używa GLUT do uproszczenia programowania (pomyśl o zainstalowaniu go przez Synaptic lub inny), jest kompilowany i uruchamiany pod Linuksem lub WSL pod Windows 10 przez cc colorswap.c -lglut -lGL -lGLU && ./a.out. Biblioteki OpenGL mają być instalowane z repozytoriów danej dystrybucji. Celem kodu jest tutaj czytelność, a nie wydajność.
/* * 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; }Kilka implementacji OpenGL (wykorzystujących akcelerację 3D zapewnianą przez sprzęt) istnieje dla Windows, wielu stacji roboczych Unix i Mac OS . Te implementacje są zazwyczaj dostarczane przez producentów sprzętu graficznego i są z nimi ściśle powiązane. Istnieje darmowa implementacja tej biblioteki o nazwie Mesa , stworzona w 1993 roku przez Briana Paula i wykorzystująca to samo API, co umożliwiło:
Polityką Silicon Graphics jest udostępnienie przedostatniej wersji GL, biblioteki graficznej GL, do domeny publicznej . To podejście :
Niektóre oprogramowanie wykorzystuje OpenGL zarządzać całą swoją interfejs, nawet 2D, takich jak Blender , Google Earth (wersja OpenGL), GLtron, XBMC , lub SGI wersję z X11 .
Rich Geldreich i Joshua Barczak na swoich osobistych blogach krytykują OpenGL. Ich skargi sugerują z jednej strony potrzebę gruntownej przebudowy w świetle nabytych doświadczeń, z drugiej zaś potrzebę lepszej kontroli rozproszenia przeniesień. Są to jednak użytkownicy zaawansowani technicznie, którzy muszą korzystać z najbardziej zaawansowanych funkcji kart graficznych z 2014 roku.