OpenGL

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 24 martie 2021; verificările necesită 38 de modificări .
OpenGL
Tip de API
Dezvoltator Silicon Graphics , apoi Khronos Group
Scris in C și OpenGL Shading Language
Sistem de operare Software multiplatformă
Prima editie 1 iulie 1992 [1]
ultima versiune 4.6 ( 31 iulie 2017 )
Stat vezi Vulcan
Licență EULA, ACORP
Site-ul web opengl.org
 Fișiere media la Wikimedia Commons

OpenGL ( Open Graphics Library ) este o specificație care definește o interfață de programare independentă de platformă (independentă de limbajul de programare ) pentru scrierea aplicațiilor care utilizează grafică computerizată bidimensională și tridimensională . Dezvoltat în SUA și Europa, licențiat sub tipul GNU-/EU/.

Include peste 300 de funcții pentru desenarea scenelor 3D complexe din primitive simple. Folosit în crearea de jocuri pe calculator , CAD , realitate virtuală , vizualizare în cercetarea științifică. Pe platforma Windows , concurează cu Direct3D .

Specificație

La un nivel de bază, OpenGL este doar o specificație , adică un document care descrie un set de caracteristici și comportamentul lor exact. Pe baza acestei specificații, producătorii de hardware creează implementări  - biblioteci de funcții care corespund setului de funcții din specificație. Implementarea este concepută pentru a utiliza eficient capacitățile hardware-ului. Dacă hardware-ul nu permite o caracteristică, aceasta trebuie să fie emulată în software. Producătorii de hardware trec printr-o serie de teste specifice (teste de conformitate) înainte ca o implementare să fie clasificată ca implementare OpenGL. Deoarece este suficient ca dezvoltatorii de software să învețe cum să folosească funcțiile descrise în specificație, implementarea lor este lăsată în seama dezvoltatorilor de hardware.

Există implementări eficiente ale OpenGL pentru platformele Windows , Unix și Mac OS . Aceste implementări sunt de obicei furnizate de producătorii de plăci video și folosesc pe scară largă capacitățile acestora din urmă. Există, de asemenea, implementări open source ale specificației OpenGL, dintre care una este biblioteca Mesa . Din motive de licențiere, Mesa este o implementare „neoficială” a OpenGL, deși este pe deplin compatibilă la nivel de cod și acceptă atât emularea software, cât și accelerarea hardware cu driverele adecvate.

Specificația OpenGL este revizuită de consorțiul ARB (Architecture Review Board), care a fost format în 1992. Consorțiul este format din companii interesate să construiască un API larg acceptat și accesibil . Potrivit site-ului web oficial OpenGL, membrii ARB cu vot cu vot din noiembrie 2004 sunt producători profesioniști de hardware grafică SGI , 3Dlabs , Matrox și Evans & Sutherland (aplicații militare), producători de hardware grafică de consum ATI și NVIDIA , producător de procesoare Intel și computere. producători și hardware de computer de la IBM , Apple , Dell , Hewlett-Packard și Sun Microsystems , precum și unul dintre liderii din industria jocurilor pe computer, id Software . Microsoft , unul dintre membrii fondatori ai consorțiului, a plecat în martie 2003. Pe lângă membrii permanenți, un număr mare de alte companii sunt invitate în fiecare an să devină parte a OpenGL ARB în decurs de un an. Un număr atât de mare de companii implicate într-o gamă diversă de interese a permis OpenGL să devină o interfață de aplicație de uz general, cu o mulțime de caracteristici.

Kurt Akeley și Mark Segal sunt autorii specificației originale OpenGL. Chris Frazier a editat versiunea 1.1. Jon Leech a editat versiunile 1.2 până la 2.0.

Arhitectură

OpenGL se concentrează pe următoarele două sarcini:

Principiul de bază al OpenGL este obținerea de seturi de primitive grafice vectoriale sub formă de puncte, linii și triunghiuri, urmate de prelucrarea matematică a datelor primite și construirea unei imagini bitmap pe ecran și/sau în memorie. Transformările vectoriale și rasterizarea sunt efectuate de conducta grafică, care este în esență un automat discret . Marea majoritate a comenzilor OpenGL se încadrează în unul dintre cele două grupuri: fie adaugă primitive grafice ca intrare în conductă, fie configurează conducta pentru a efectua diferite transformări.

OpenGL este un API procedural de nivel scăzut care forțează programatorul să dicteze secvența exactă de pași pentru a construi grafica bitmap rezultată (abordarea imperativă). Aceasta este principala diferență față de abordările cu descriptori, când întreaga scenă este transmisă ca o structură de date (cel mai adesea un arbore), care este procesată și construită pe ecran. Pe de o parte, abordarea imperativă cere programatorului să aibă o cunoaștere profundă a legilor graficii tridimensionale și ale modelelor matematice, pe de altă parte, îi oferă libertatea de a introduce diverse inovații.

Extensii

Standardul OpenGL, odată cu apariția noilor tehnologii, permite furnizorilor individuali să adauge funcționalități bibliotecii prin mecanismul de extensie . Extensiile sunt distribuite folosind două componente: un fișier antet care conține prototipuri de funcții și constante noi și un driver de dispozitiv furnizat de dezvoltator. Fiecare producător are o abreviere care este utilizată atunci când își denumește noile funcții și constante. De exemplu, NVIDIA are abrevierea NV , care este folosită atunci când se numesc noile caracteristici, cum ar fi , glCombinerParameterfvNV()precum și constantele, GL_NORMAL_MAP_NV. Se poate întâmpla ca o anumită extensie să poată fi implementată de mai mulți producători. În acest caz, se folosește abrevierea EXT , de exemplu, glDeleteRenderbuffersEXT. Când o extensie este aprobată de consorțiul ARB , aceasta dobândește abrevierea ARB și devine o extensie standard. De obicei, extensiile aprobate de consorțiu sunt incluse în una dintre următoarele specificații OpenGL.

Lista extensiilor înregistrate poate fi găsită în baza de date oficială a extensiilor [2] .

Biblioteci suplimentare

Există o serie de biblioteci construite pe deasupra sau pe lângă OpenGL. De exemplu, biblioteca GLU , care este aproape o completare standard la OpenGL și o însoțește întotdeauna, este construită peste acesta din urmă, adică își folosește funcțiile pentru a-și implementa capacitățile. Alte biblioteci, cum ar fi GLUT și SDL , sunt concepute pentru a implementa caracteristici care nu sunt disponibile în OpenGL. Aceste caracteristici includ crearea unei interfețe cu utilizatorul (ferestre, butoane, meniuri etc.), configurarea unui context de desen (zona de desen utilizată de OpenGL), gestionarea mesajelor de la dispozitivele I/O (tastatură, mouse etc.) și lucrul cu fisiere.. De obicei, fiecare manager de ferestre are propria bibliotecă de extensii pentru a implementa caracteristicile de mai sus, cum ar fi WGL pe Windows sau GLX pe X Window System , dar bibliotecile GLUT și SDL sunt multi-platformă, ceea ce facilitează portarea aplicațiilor scrise către alte platforme.

Bibliotecile GLEW (Biblioteca OpenGL Extension Wrangler) și GLEE (Biblioteca OpenGL Easy Extension) sunt concepute pentru a facilita lucrul cu extensii și versiuni diferite ale OpenGL. Acest lucru este valabil mai ales pentru programatorii Windows, deoarece antetul și fișierele de bibliotecă livrate cu Visual Studio sunt la nivelul versiunii OpenGL 1.1.

OpenGL are doar un set de primitive geometrice (puncte, linii, poligoane) din care sunt create toate obiectele tridimensionale. Uneori, acest nivel de detaliu nu este întotdeauna convenabil atunci când creați scene. Prin urmare, biblioteci de nivel superior, cum ar fi Open Inventor și VTK , au fost construite pe OpenGL . Aceste biblioteci vă permit să operați cu obiecte 3D mai complexe, ceea ce face mai ușor și mai rapid crearea unei scene 3D.

GLM (OpenGL Mathematics) este o bibliotecă de utilitate care oferă programatorilor C++ clase și funcții pentru a efectua operații matematice. Biblioteca poate fi folosită atunci când se creează programe 3D folosind OpenGL [3] . Una dintre caracteristicile GLM este că implementarea se bazează pe specificația GLSL . Codul sursă GLM utilizează licența MIT .

Independenta limbajului de programare

Pentru a confirma independența limbajului de programare, diferite opțiuni pentru legarea (legarea) funcțiilor OpenGL au fost dezvoltate sau portate complet în alte limbaje. Un exemplu este biblioteca Java 3D , care poate folosi accelerarea hardware OpenGL. Legarea directă a funcției este implementată în Biblioteca de jocuri Java Lightweight [4] , care are legătură directă OpenGL pentru Java . Sun a lansat, de asemenea, o versiune de Java OpenGL (JOGL) care oferă legare directă la funcțiile OpenGL C , spre deosebire de Java 3D, care nu are un astfel de suport la nivel scăzut. Site-ul oficial OpenGL are link-uri către legături pentru Java, Fortran 90 , Perl , Pike , Python , Ada , Visual Basic și Pascal [5] . Există, de asemenea, opțiuni de legare OpenGL pentru C++ și C# [6] .

Istorie

Grafica pe computer și-a găsit o largă distribuție și aplicare în viața de zi cu zi. Oamenii de știință folosesc grafica pe computer pentru a analiza rezultatele simulării. Inginerii și arhitecții folosesc grafica 3D pentru a crea modele virtuale . Realizatorii de film creează efecte speciale sau filme complet animate (" Shrek ", " Toy Story " etc.). În ultimii ani, jocurile pe calculator s-au răspândit și ele, profitând la maximum de grafica tridimensională pentru a crea lumi virtuale.

Răspândirea graficii pe computer a venit cu propriul set de dificultăți. În anii 1990, dezvoltarea unui produs software care să poată rula pe o mare varietate de hardware grafic a fost un efort care consuma mult timp și costuri. A fost necesar să se creeze module separat pentru fiecare tip de adaptoare grafice , ceea ce a dus uneori la duplicarea aceluiași cod de program. Acest lucru a împiedicat foarte mult dezvoltarea și răspândirea graficii pe computer.

Silicon Graphics (SGI) specializată în crearea de hardware și software grafic de înaltă tehnologie. Ca lider în grafica 3D la acea vreme, SGI a văzut probleme și bariere în creșterea pieței. Prin urmare, s-a decis standardizarea metodei de acces la hardware-ul grafic la nivelul interfeței programului .

Astfel, a luat naștere interfața de programare OpenGL, care standardizează accesul la hardware-ul grafic, transferând responsabilitatea creării unui driver hardware către producătorul dispozitivului grafic. Acest lucru a permis dezvoltatorilor de software să utilizeze un nivel mai ridicat de abstractizare din hardware-ul grafic, ceea ce a accelerat foarte mult crearea de noi produse software și a redus costurile acestora.

În 1992, SGI a condus OpenGL ARB  , un grup de companii care dezvolta specificația OpenGL. OpenGL este derivat din interfața 3D a SGI, IRIS GL . Una dintre limitările IRIS GL a fost că permitea doar funcții acceptate de hardware; dacă capacitatea nu a fost implementată în hardware, aplicația nu ar putea să o folosească. OpenGL depășește această problemă prin implementarea unor caracteristici în software care nu sunt disponibile în hardware, permițând aplicațiilor să utilizeze această interfață pe sisteme cu putere relativ scăzută.

În 1995, a fost lansată biblioteca Microsoft Direct3D . În scurt timp, Microsoft, SGI și Hewlett-Packard au început un proiect numit Fahrenheit, care urmărea să creeze o interfață de programare mai generală bazată pe Direct3D și OpenGL. Ideea părea suficient de promițătoare pentru a aduce ordine în domeniul graficii 3D interactive, totuși, ca urmare a dificultăților financiare la SGI și a lipsei suportului industrial adecvat, proiectul a fost abandonat.

OpenGL 2.0

În septembrie 2001, 3DLabs și-a dezvăluit viziunea pentru OpenGL 2.0.

Versiunea OpenGL 2.0 a fost introdusă de 3Dlabs ca răspuns la preocupările legate de direcția lentă și neclară a dezvoltării OpenGL. 3Dlabs a propus o serie de completări semnificative la standard, dintre care cea mai semnificativă a fost adăugarea limbajului shader GLSL (OpenGL Shading Language) la nucleul OpenGL. Acest lucru permite programatorului să înlocuiască conducta fixă ​​OpenGL cu programe mici într-un limbaj special pentru a crea diverse efecte, cum ar fi maparea cu bump , maparea normală , maparea paralaxă , HDR etc.

Cu toate acestea, chiar înainte de introducerea limbajului GLSL în standardul OpenGL, a fost posibil să se dezvolte efecte speciale în limbaje de asamblare (extensiile vertex_program, fragment_program) și Cg (NVidia C for Graphics). Multe caracteristici propuse nu sunt încă disponibile în OpenGL 2.0, deși unele dintre ele au fost implementate ca extensii de mulți furnizori.

OpenGL 2.1

Lansat pe 2 iulie 2006.

S-a adăugat suport pentru GLSL versiunea 1.2

Extensii noi:

OpenGL 3.0

Pe 11 august 2008, grupul Khronos a lansat o nouă versiune a specificației OpenGL [7] .

Plăci video acceptate: seria Radeon HD; Seria GeForce 8, 9, GTX 100, GTX 200, GTX 300 și GTX 400.

OpenGL 3.1

Pe 24 martie 2009, Khronos Group a anunțat OpenGL 3.1. Noua versiune a curățat componentele care au fost declarate învechite, dar au rămas în OpenGL 3.0 pentru a ușura tranziția la noua versiune a API (componentele învechite pot fi utilizate în viitor prin extensia GL_ARB_compatibility).

OpenGL 3.2

Pe 3 august 2009, Khronos Group a anunțat OpenGL 3.2. Noua versiune continuă dezvoltarea standardului OpenGL pentru a oferi dezvoltatorilor de grafică acces la funcționalitatea GPU avansată.

Plăci video acceptate: seria Radeon HD; Seria GeForce 8000, 9000, GTX 200 și 400.

Inovații:

OpenGL 3.3

Introdus cu OpenGL 4.0 pe 11 martie 2010. Vă permite să vă apropiați cât mai mult de funcționalitatea OpenGL 4.0 pe hardware-ul generației anterioare.

OpenGL 4.0

Pe 11 martie 2010, Khronos Group a trimis versiunea finală a specificației OpenGL 4.0 și limbajul shader GLSL 4.0. OpenGL 4.0 este complet compatibil cu extensiile OpenGL mai vechi, folosind modul de compatibilitate introdus în OpenGL 3.2 [8] .

Printre inovații [9] :

OpenGL 4.1

Pe 26 iulie 2010, Khronos Group a anunțat specificația OpenGL 4.1. Specificația include o actualizare la GLSL (GL Shading language) la versiunea 4.10.

Inovații:

Extensii noi:

OpenGL 4.2

Pe 8 august 2011, Khronos Group a publicat specificația pentru OpenGL 4.2 și limbajul shader GLSL 4.2 [10] .

Inovații:

OpenGL 4.3

Pe 6 august 2012, Khronos Group a publicat specificația OpenGL 4.3 [11] [12] la SIGGRAPH 2012 . Pe lângă noile funcții, OpenGL 4.3 oferă suport pentru un nou tip de shader prin extensia GL_ARB_compute_shader. Noua versiune este compatibilă cu cele anterioare.

OpenGL 4.4

Plăci video acceptate: seriale AMD/ATi Radeon HD 5000/6000/7000/8000 și 200, seria Nvidia GeForce 400/500/600/700/980.

Pe 22 iulie 2013, grupul Khronos de la SIGGRAPH din Anaheim, California, a publicat specificația OpenGL 4.4 [13] .

OpenGL 4.5

Plăci grafice acceptate: AMD/ATi Radeon bazat pe arhitectura GCN, seria Nvidia GeForce 400/500/600/700/800/900.

Pe 11 august 2014, grupul Khronos de la SIGGRAPH din Vancouver, Canada a publicat specificația OpenGL 4.5 [14] .

OpenGL 4.6

La 31 iulie 2017, grupul Khronos a publicat specificațiile OpenGL 4.6. Principala inovație este o reprezentare intermediară portabilă a shaderelor SPIR-V, dezvoltat inițial pentru Vulkan API [15] .

Viitorul OpenGL

Apple

Apple în iunie 2018, la evenimentul WWDC , a depreciat tehnologiile OpenGL și OpenGL ES . [16]

Google

Sistemele de operare Fuchsia și Stadia acceptă nativ doar Vulkan .

Supapă

17 septembrie 2021 Valve a eliminat suportul pentru OpenGL din popularul joc Dota 2 [17] [18]

Software ID

Toate jocurile noi din 2016 care utilizează motorul de joc id Tech 6 folosesc Vulkan ca interfață de randare .

Motorul de joc ID Tech 7 acceptă doar specificația Vulkan .

Jocuri atipice

Atypical Games, susținut de Samsung , și-a asumat responsabilitatea de a oferi suport Vulkan motorului lor. În cele din urmă, a devenit clar că implementarea Vulkan va înlocui de fapt OpenGL pe toate platformele, cu excepția Apple [19]

Unitate

Motorul de joc Unity nu acceptă OpenGL/OpenGL ES pentru pipeline HDR [20]

Lipsa suportului pentru tehnologiile grafice actuale

OpenGL nu acceptă Ray Tracing , un API pentru decodarea video pe GPU , spre deosebire de Vulkan

Mesh Shaders în OpenGL sunt acceptate numai pe nVidia [21]

Anti- aliasing cu AMD FidelityFX Super Resolution (FSR) [22] [23] și Nvidia Deep Learning Super Sampling (DLSS) [24] [25] algoritmii de învățare profundă nu sunt acceptați pentru OpenGL

Vulkan

Vulkan, cunoscut anterior ca glNext, este un nou API care îndeplinește cerințele realităților moderne și elimină principalele dezavantaje ale OpenGL. Oferă o supraîncărcare mai mică și un control mai direct asupra GPU-ului. Khronos Group îl dezvoltă din 2014. Versiunea 1.0 a fost lansată pe 16 februarie 2016 [26] .

Vezi și

Note

  1. https://www.khronos.org/opengl/wiki/History_of_OpenGL#OpenGL_1.0_.281992.29
  2. Registry (redirecționare) (downlink) . Data accesului: 21 ianuarie 2006. Arhivat din original la 5 februarie 2008. 
  3. GLSL + Caracteristici opționale = OpenGL Mathematics (GLM). O bibliotecă de matematică C++ pentru grafică 3D Arhivată la 28 februarie 2009 la Wayback Machine 
  4. LWJGL Arhivat pe 25 ianuarie 2006 la Wayback Machine  -  Legarea OpenGL pentru limbajul Java și alte componente pentru dezvoltarea jocului
  5. Legături de limbaj de programare la OpenGL . Consultat la 29 octombrie 2008. Arhivat din original pe 2 noiembrie 2008.
  6. Exocortex | Software de grafică și simulare pe computer (link indisponibil) . Consultat la 21 ianuarie 2006. Arhivat din original la 28 ianuarie 2006. 
  7. Grupul Khronos a anunțat astăzi că a lansat specificația OpenGL 3.0  (ing.)  (downlink) . opengl.org (11 august 2008). Consultat la 5 iunie 2009. Arhivat din original pe 25 august 2011.
  8. Khronos dezlănțuiește o accelerație grafică de ultimă oră, cross-platformă cu OpenGL 4.0 (link nu este disponibil) . Comunicate de presă Khronos (11 martie 2010). Preluat la 11 martie 2010. Arhivat din original la 25 august 2011. 
  9. Prezentare generală a noutăților în OpenGL 4.0 (downlink) . OpenNet (???). Data cererii: ???. Arhivat din original pe 21 ianuarie 2012. 
  10. Khronos îmbogățește grafica 3D multiplatformă cu lansarea specificației OpenGL 4.2 (link nu este disponibil) . Grupul Khronos (8 august 2011). Preluat la 7 august 2012. Arhivat din original la 25 august 2011. 
  11. Khronos lansează specificația OpenGL 4.3 cu îmbunătățiri majore . Preluat la 10 august 2012. Arhivat din original la 10 august 2012.
  12. PCGamer, Khronos lansează OpenGL 4.3 . Preluat la 10 august 2012. Arhivat din original la 10 august 2012.
  13. Khronos lansează specificațiile OpenGL 4.4 . Preluat la 22 iulie 2013. Arhivat din original la 29 octombrie 2013.
  14. Khronos Group anunță progrese cheie în ecosistemul OpenGL . Preluat la 11 august 2014. Arhivat din original la 12 august 2014.
  15. Khronos lansează OpenGL 4.6 cu suport SPIR-V . Preluat la 1 august 2017. Arhivat din original la 31 iulie 2017.
  16. Apple Inc. Ce este nou în iOS - Apple  Developer . developer.apple.com _ - „Aplicațiile create folosind OpenGL ES vor continua să ruleze în iOS 12, dar OpenGL ES este depreciat în iOS 13.” Preluat la 7 august 2018. Arhivat din original la 8 august 2018.
  17. În lunile următoare, Dota 2 va elimina suportul pentru sistemele pe 32 de biți, OpenGL și DirectX 9 . Preluat la 18 octombrie 2021. Arhivat din original la 18 octombrie 2021.
  18. Dota 2 de la Valve va renunța la suportul pentru sistemele pe 32 de biți, DirectX 9 și OpenGL . Preluat la 18 octombrie 2021. Arhivat din original la 18 octombrie 2021.
  19. Jet Set Vulkan: Reflectând asupra trecerii la Vulkan . Preluat la 18 octombrie 2021. Arhivat din original la 18 octombrie 2021.
  20. HDRP nu acceptă dispozitivele OpenGL sau OpenGL ES . Preluat la 17 ianuarie 2022. Arhivat din original la 18 ianuarie 2022.
  21. Mesh Shaders . Preluat la 17 ianuarie 2022. Arhivat din original la 22 ianuarie 2022.
  22. Super Rezoluție AMD FidelityFX . Preluat: 17 mai 2022.
  23. AMD FidelityFX™ Super Resolution (FSR) .
  24. NVIDIA DLSS . Preluat la 2 martie 2022. Arhivat din original la 2 martie 2022.
  25. Noțiuni introductive cu DLSS . Preluat la 2 martie 2022. Arhivat din original la 2 martie 2022.
  26. Khronos lansează specificația Vulkan 1.0 . Consultat la 25 septembrie 2017. Arhivat din original la 15 decembrie 2017.

Literatură

Link -uri

Lecții, exemple și resurse suplimentare