OpenGL

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 24-én felülvizsgált verziótól ; az ellenőrzések 38 szerkesztést igényelnek .
OpenGL
Típusú API
Fejlesztő Silicon Graphics , majd Khronos Group
Beírva C és OpenGL árnyékolási nyelv
Operációs rendszer Többplatformos szoftver
Első kiadás 1992. július 1. [1]
legújabb verzió 4.6 ( 2017. július 31. )
Állapot lásd Vulcan
Engedély EULA, ACORP
Weboldal opengl.org
 Médiafájlok a Wikimedia Commons oldalon

Az OpenGL ( Open Graphics Library ) egy olyan specifikáció, amely platformfüggetlen ( programozási nyelvtől független ) programozási felületet határoz meg olyan alkalmazások írásához, amelyek kétdimenziós és háromdimenziós számítógépes grafikát használnak . Az USA-ban és Európában kifejlesztett, GNU-/EU/ típusú licenccel.

Több mint 300 funkciót tartalmaz összetett 3D jelenetek rajzolásához egyszerű primitívekből. Használt számítógépes játékok , CAD , virtuális valóság , vizualizáció a tudományos kutatásban. Windows platformon versenyez a Direct3D -vel .

Specifikáció

Alapszinten az OpenGL csak egy specifikáció , azaz egy dokumentum, amely leírja a szolgáltatások halmazát és azok pontos viselkedését. Ezen specifikáció alapján a hardvergyártók implementációkat hoznak létre  - olyan függvénykönyvtárakat, amelyek megfelelnek a specifikáció funkciókészletének. A megvalósítás célja a hardver képességeinek hatékony kihasználása. Ha a hardver nem tesz lehetővé egy szolgáltatást, akkor azt szoftveresen emulálni kell. A hardvergyártók egy sor speciális teszten (megfelelőségi teszten) mennek keresztül, mielőtt egy implementációt OpenGL-megvalósításnak minősítenek. Mivel a szoftverfejlesztőknek elegendő megtanulniuk a specifikációban leírt funkciók használatát, ezek megvalósítását a hardverfejlesztőkre bízzuk.

Az OpenGL hatékony megvalósításai léteznek Windows , Unix platformokon és Mac OS rendszeren . Ezeket a megvalósításokat általában a videokártya-gyártók biztosítják, és széles körben használják ki az utóbbi képességeit. Az OpenGL specifikációnak vannak nyílt forráskódú implementációi is, amelyek közül az egyik a Mesa könyvtár . Licencelési okokból a Mesa az OpenGL "nem hivatalos" megvalósítása, bár kódszinten teljesen kompatibilis, és támogatja a szoftver emulációt és a hardveres gyorsítást is a megfelelő illesztőprogramokkal.

Az OpenGL specifikációt az 1992-ben alakult ARB (Architecture Review Board) konzorcium felülvizsgálja. A konzorcium egy széles körben elfogadott és hozzáférhető API felépítésében érdekelt cégekből áll . Az OpenGL hivatalos weboldala szerint 2004 novemberében az ARB szavazati joggal rendelkező tagjai a professzionális grafikus hardvergyártók SGI , 3Dlabs , Matrox és Evans & Sutherland (katonai alkalmazások), fogyasztói grafikus hardvergyártó ATI és NVIDIA , processzorgyártó Intel és számítógép. gyártók és számítógépes hardverek az IBM , az Apple , a Dell , a Hewlett-Packard és a Sun Microsystems , valamint a számítógépes játékipar egyik vezető vállalata, az id Software . A Microsoft , a konzorcium egyik alapító tagja 2003 márciusában kilépett. Az állandó tagokon kívül számos más cég is meghívást kap minden évben, hogy egy éven belül csatlakozzanak az OpenGL ARB-hez. A sokféle érdeklődési körrel foglalkozó vállalat ilyen nagy száma lehetővé tette, hogy az OpenGL általános célú alkalmazási felületté váljon, számos funkcióval.

Kurt Akeley és Mark Segal az eredeti OpenGL specifikáció szerzői. Chris Frazier szerkesztette az 1.1-es verziót. Jon Leech szerkesztette az 1.2–2.0 verziókat.

Építészet

Az OpenGL a következő két feladatra összpontosít:

Az OpenGL alapelve a vektorgrafikus primitívek készleteinek beszerzése pontok, vonalak és háromszögek formájában, majd ezt követi a kapott adatok matematikai feldolgozása és bitmap kép felépítése a képernyőn és/vagy a memóriában. A vektortranszformációkat és a raszterezést a grafikus pipeline végzi, amely lényegében egy diszkrét automata . Az OpenGL-parancsok túlnyomó többsége két csoportba sorolható: vagy grafikus primitíveket adnak hozzá a folyamathoz, vagy beállítják a folyamatot különböző átalakítások végrehajtására.

Az OpenGL egy alacsony szintű procedurális API, amely arra kényszeríti a programozót, hogy diktálja a lépések pontos sorrendjét az eredményül kapott bittérképes grafika elkészítéséhez (a kötelező megközelítés). Ez a fő különbség a leíró megközelítésekhez képest, amikor a teljes jelenet adatstruktúraként (leggyakrabban faként) kerül továbbításra, amelyet a képernyőn dolgoznak fel és építenek fel. Az imperatív megközelítés egyrészt megköveteli a programozótól a háromdimenziós grafika és a matematikai modellek törvényszerűségének mélyreható ismeretét, másrészt szabadságot ad különféle újítások bevezetésére.

Kiterjesztések

Az OpenGL-szabvány az új technológiák megjelenésével lehetővé teszi az egyes szállítók számára, hogy a bővítési mechanizmuson keresztül funkcionalitást adjanak a könyvtárhoz . A bővítmények két összetevőből oszlanak meg: egy fejlécfájllal, amely új függvények és állandók prototípusait tartalmazza , valamint egy , a fejlesztő által biztosított eszközillesztőt . Minden gyártónak van egy rövidítése, amelyet az új függvények és állandók elnevezésekor használnak. Például az NVIDIA az NV rövidítéssel rendelkezik , amelyet az új jellemzők, például a , glCombinerParameterfvNV()valamint az állandók elnevezésére használnak GL_NORMAL_MAP_NV. Előfordulhat, hogy egy bizonyos kiterjesztést több gyártó is megvalósíthat. Ebben az esetben az EXT rövidítést használjuk , például glDeleteRenderbuffersEXT. Amikor az ARB konzorcium jóváhagyja a kiterjesztést, az felveszi az ARB rövidítést , és szabványos kiterjesztéssé válik. A konzorcium által jóváhagyott bővítmények általában az alábbi OpenGL-specifikációk egyikében szerepelnek.

A regisztrált mellékek listája a hivatalos kiterjesztési adatbázisban [2] található .

További könyvtárak

Számos könyvtár épült az OpenGL tetejére vagy kiegészítésére. Utóbbira épül például az OpenGL szinte szabványos kiegészítőjeként mindig kísérő GLU -könyvtár , azaz funkcióival valósítja meg képességeit. Más könyvtárakat, például a GLUT -t és az SDL -t az OpenGL-ben nem elérhető funkciók megvalósítására tervezték. Ezek közé tartozik a felhasználói felület létrehozása (ablakok, gombok, menük stb.), a rajzkontextus beállítása (az OpenGL által használt rajzterület), az I/O eszközökről (billentyűzet, egér stb.) érkező üzenetek kezelése, valamint a fájlokat. Általában minden ablakkezelőnek saját kiterjesztési könyvtára van a fenti szolgáltatások megvalósításához, mint például a WGL Windows rendszeren vagy a GLX az X Window System rendszeren , de a GLUT és SDL könyvtárak többplatformosak, ami megkönnyíti az írott alkalmazások másokhoz való portolását. platformok.

A GLEW (The OpenGL Extension Wrangler Library) és GLEE (The OpenGL Easy Extension library) könyvtárakat úgy tervezték, hogy megkönnyítsék a kiterjesztésekkel és az OpenGL különböző verzióival való munkát. Ez különösen igaz a Windows programozókra, mivel a Visual Studióval szállított fejléc- és könyvtárfájlok az OpenGL 1.1 verzió szintjén vannak.

Az OpenGL csak geometriai primitívek halmazát (pontok, vonalak, sokszögek) tartalmazza, amelyekből az összes háromdimenziós objektum létrejön. Néha ez a részletgazdagság nem mindig kényelmes jelenetek készítésekor. Ezért a magasabb szintű könyvtárak, például az Open Inventor és a VTK az OpenGL tetejére épültek . Ezek a könyvtárak lehetővé teszik bonyolultabb 3D objektumokkal való működést, ami megkönnyíti és gyorsabbá teszi a 3D jelenetek létrehozását.

A GLM (OpenGL Mathematics) egy segédprogramkönyvtár, amely a C++ programozók számára osztályokat és függvényeket biztosít matematikai műveletek végrehajtásához. A könyvtár használható 3D programok OpenGL használatával [3] . A GLM egyik jellemzője, hogy a megvalósítás a GLSL specifikáción alapul . A GLM forráskódja az MIT licencet használja .

Programozási nyelv függetlenség

A programozási nyelv függetlenségének megerősítésére különféle lehetőségeket fejlesztettek ki az OpenGL függvények kötésére (kötésére), vagy teljesen átültettük más nyelvekre. Példa erre a Java 3D könyvtár , amely képes OpenGL hardveres gyorsítást használni. A közvetlen függvénykötés a Lightweight Java Game Library -ben [4] valósult meg , amely közvetlen OpenGL-kötéssel rendelkezik Java számára . A Sun kiadta a Java OpenGL (JOGL) olyan verzióját is, amely közvetlen kötést biztosít az OpenGL C függvényeihez, ellentétben a Java 3D-vel, amely nem rendelkezik ilyen alacsony szintű támogatással. A hivatalos OpenGL webhely hivatkozásokat tartalmaz Java, Fortran 90 , Perl , Pike , Python , Ada , Visual Basic és Pascal [5] kötésekre . A C++ és a C# számára is vannak OpenGL-kötési lehetőségek [6] .

Történelem

A számítógépes grafika széles körben elterjedt és alkalmazható a mindennapi életben. A tudósok számítógépes grafikát használnak a szimulációs eredmények elemzésére. A mérnökök és építészek 3D grafikát használnak virtuális modellek létrehozásához . A filmesek speciális effektusokat vagy teljesen animációs filmeket készítenek (" Shrek ", " Toy Story " stb.). Az utóbbi években a számítógépes játékok is széles körben elterjedtek, a háromdimenziós grafikát kihasználva virtuális világokat hozhatnak létre.

A számítógépes grafika elterjedése megvolt a maga nehézségeivel. Az 1990-es években egy olyan szoftvertermék kifejlesztése , amely sokféle grafikus hardveren futhatott, idő- és költségigényes törekvés volt. Minden típusú grafikus adapterhez külön kellett modulokat létrehozni , ami néha ugyanazon programkód megkettőzéséhez vezetett. Ez nagymértékben hátráltatta a számítógépes grafika fejlődését és elterjedését.

A Silicon Graphics (SGI) csúcstechnológiás grafikus hardverek és szoftverek létrehozására szakosodott. A 3D grafika akkoriban vezető szereplőjeként az SGI problémákat és akadályokat látott a piac növekedésében. Ezért úgy döntöttek, hogy szabványosítják a grafikus hardverhez való hozzáférés módját a programfelület szintjén .

Így született meg az OpenGL programozói felület, amely a grafikus hardverekhez való hozzáférést szabványosítja azáltal, hogy a hardver meghajtó létrehozásának felelősségét a grafikus eszköz gyártójára hárítja. Ez lehetővé tette a szoftverfejlesztők számára, hogy magasabb szintű absztrakciót alkalmazzanak a grafikus hardvertől, ami nagymértékben felgyorsította az új szoftvertermékek létrehozását és csökkentette azok költségeit.

1992- ben az SGI vezette az OpenGL ARB  vállalatcsoportot, amely az OpenGL specifikációt fejleszti. Az OpenGL az SGI 3D interfészéből, az IRIS GL -ből származik . Az IRIS GL egyik korlátja az volt, hogy csak a hardver által támogatott funkciókat engedélyezte; ha a képesség nem volt hardverben implementálva, az alkalmazás nem tudta használni. Az OpenGL kiküszöböli ezt a problémát azáltal, hogy olyan funkciókat valósít meg szoftverekben, amelyek hardverben nem érhetők el, lehetővé téve az alkalmazások számára, hogy viszonylag alacsony fogyasztású rendszereken használják ezt az interfészt.

1995 - ben adták ki a Microsoft Direct3D könyvtárát . Nemsokára a Microsoft, az SGI és a Hewlett-Packard elindította a Fahrenheit nevű projektet, amelynek célja egy általánosabb, Direct3D és OpenGL alapú programozási felület létrehozása volt. Az ötlet elég ígéretesnek tűnt ahhoz, hogy rendet teremtsen az interaktív 3D grafika területén, azonban az SGI pénzügyi nehézségei és a megfelelő ipari támogatás hiánya miatt a projektet félbehagyták.

OpenGL 2.0

2001 szeptemberében a 3DLabs felfedte az OpenGL 2.0-val kapcsolatos elképzelését.

Az OpenGL 2.0-s verzióját a 3Dlabs vezette be, válaszul az OpenGL fejlesztés lassú és homályos irányával kapcsolatos aggodalmakra. A 3Dlabs számos jelentős kiegészítést javasolt a szabványhoz, amelyek közül a legjelentősebb a GLSL (OpenGL Shading Language) shader nyelv hozzáadása volt az OpenGL maghoz. Ez lehetővé teszi a programozó számára, hogy a rögzített OpenGL folyamatot kis programokkal cserélje le egy speciális nyelven, hogy különféle effektusokat hozzon létre, mint például bump leképezés , normál leképezés , parallaxis leképezés , HDR stb.

Azonban már a GLSL nyelv OpenGL szabványba való bevezetése előtt is lehetőség nyílt speciális effektusok fejlesztésére assembly nyelveken (kiterjesztések vertex_program, fragment_program) és Cg (NVidia C for Graphics). Sok javasolt szolgáltatás még nem érhető el az OpenGL 2.0-ban, bár néhányat számos gyártó bővítményként implementált.

OpenGL 2.1

Megjelenés: 2006. július 2.

Támogatás hozzáadva a GLSL 1.2-es verziójához

Új bővítmények:

OpenGL 3.0

2008. augusztus 11- én a Khronos Group kiadta az OpenGL specifikáció új verzióját [7] .

Támogatott videokártyák: Radeon HD sorozat; GeForce 8, 9, GTX 100, GTX 200, GTX 300 és GTX 400 sorozat.

OpenGL 3.1

2009. március 24-én a Khronos Group bejelentette az OpenGL 3.1-et. Az új verzió megtisztította az elavultnak nyilvánított összetevőket, de az OpenGL 3.0-ban maradt, hogy zökkenőmentesen áttérhessen az API új verziójára (az elavult összetevők a jövőben használhatók a GL_ARB_compatibility bővítményen keresztül).

OpenGL 3.2

2009. augusztus 3-án a Khronos Group bejelentette az OpenGL 3.2-t. Az új verzió folytatja az OpenGL szabvány fejlesztését, hogy a grafikus fejlesztők hozzáférjenek a fejlett GPU-funkciókhoz.

Támogatott videokártyák: Radeon HD sorozat; GeForce 8000, 9000, GTX 200 és 400 sorozat.

Innovációk:

OpenGL 3.3

2010. március 11-én mutatták be az OpenGL 4.0-val. Lehetővé teszi, hogy a lehető legközelebb kerüljön az OpenGL 4.0 funkcióihoz az előző generációs hardveren.

OpenGL 4.0

2010. március 11-én a Khronos Group benyújtotta az OpenGL 4.0 specifikáció és a GLSL 4.0 shader nyelv végleges verzióját. Az OpenGL 4.0 teljesen visszafelé kompatibilis a régebbi OpenGL-bővítményekkel, az OpenGL 3.2-ben bevezetett kompatibilitási mód használatával [8] .

Az újítások között [9] :

OpenGL 4.1

2010. július 26-án a Khronos Group bejelentette az OpenGL 4.1 specifikációt. A specifikáció tartalmazza a GLSL (GL Shading Language) frissítését a 4.10-es verzióra.

Innovációk:

Új bővítmények:

OpenGL 4.2

2011. augusztus 8-án a Khronos Group közzétette az OpenGL 4.2 és a GLSL 4.2 shader nyelv specifikációját [10] .

Innovációk:

OpenGL 4.3

2012. augusztus 6-án a Khronos Group közzétette az OpenGL 4.3 specifikációt [11] [12] a SIGGRAPH 2012-ben . Az új funkciókon túl az OpenGL 4.3 új típusú shader támogatást is nyújt a GL_ARB_compute_shader bővítményen keresztül. Az új verzió visszafelé kompatibilis a korábbiakkal.

OpenGL 4.4

Támogatott videokártyák: AMD/ATi Radeon HD 5000/6000/7000/8000 és 200 sorozat, Nvidia GeForce 400/500/600/700/980 sorozat.

2013. július 22-én a kaliforniai anaheimi SIGGRAPH Khronos Group közzétette az OpenGL 4.4 specifikációt [13] .

OpenGL 4.5

Támogatott grafikus kártyák: GCN architektúrán alapuló AMD/ATi Radeon, Nvidia GeForce 400/500/600/700/800/900 sorozat.

2014. augusztus 11-én a kanadai vancouveri SIGGRAPH Khronos Group közzétette az OpenGL 4.5 specifikációt [14] .

OpenGL 4.6

2017. július 31-én a Khronos Group közzétette az OpenGL 4.6 specifikációit. A fő újítás a SPIR-V shaderek hordozható közbenső reprezentációja, amelyet eredetileg a Vulkan API -hoz fejlesztettek ki [15] .

Az OpenGL jövője

Apple

Az Apple 2018 júniusában a WWDC eseményen leállította az OpenGL és az OpenGL ES technológiákat . [16]

Google

A Fuchsia és a Stadia operációs rendszerek natívan csak a Vulkant támogatják .

Szelep

2021. szeptember 17. A Valve eltávolította az OpenGL támogatását a népszerű Dota 2 játékból [17] [18]

ID Software

2016 óta az id Tech 6 játékmotort használó összes új játék a Vulkan -t használja renderelő felületként .

Az ID Tech 7 játékmotor csak a Vulkan specifikációt támogatja .

Atipikus játékok

A Samsung által támogatott Atypical Games magára vállalta, hogy Vulkan támogatást hoz a motorjába. Végül világossá vált, hogy a Vulkan implementáció az Apple kivételével minden platformon felváltja az OpenGL-t [19]

Unity

A Unity játékmotor nem támogatja az OpenGL/OpenGL ES-t HDR - folyamathoz [20]

A jelenlegi grafikus technológiák támogatásának hiánya

Az OpenGL nem támogatja a Ray Tracing -et , egy API -t a GPU -n történő videodekódoláshoz, ellentétben a Vulkannal

Az OpenGL hálós árnyékolóit csak az nVidia támogatja [21]

Az élsimítás az AMD FidelityFX Super Resolution (FSR) [22] [23] és az Nvidia Deep Learning Super Sampling (DLSS) [24] [25] mélytanulási algoritmusaival az OpenGL nem támogatja

Vulkan

A Vulkan, korábbi nevén glNext, egy új API, amely megfelel a modern valóság követelményeinek, és kiküszöböli az OpenGL fő hátrányait. Alacsonyabb terhelést és közvetlenebb vezérlést kínál a GPU felett. A Khronos Group 2014 óta fejleszti. Az 1.0-s verzió 2016. február 16-án jelent meg [26] .

Lásd még

Jegyzetek

  1. https://www.khronos.org/opengl/wiki/History_of_OpenGL#OpenGL_1.0_.281992.29
  2. Registry (átirányítás) (downlink) . Hozzáférés dátuma: 2006. január 21. Az eredetiből archiválva : 2008. február 5.. 
  3. GLSL + Opcionális szolgáltatások = OpenGL Mathematics (GLM). C++ matematikai könyvtár 3D grafikához Archiválva : 2009. február 28. a Wayback Machine -nél 
  4. LWJGL archiválva : 2006. január 25. a Wayback Machine -nél  –  OpenGL-kötés a Java nyelvhez és más játékfejlesztési összetevőkhöz
  5. Programozási nyelv kötések az OpenGL-hez . Letöltve: 2008. október 29. Az eredetiből archiválva : 2008. november 2..
  6. Exocortex | Számítógépes grafikai és szimulációs szoftver (nem elérhető link) . Letöltve: 2006. január 21. Az eredetiből archiválva : 2006. január 28.. 
  7. A Khronos Group ma bejelentette, hogy kiadta az OpenGL 3.0 specifikációt  (eng.)  (downlink) . opengl.org (2008. augusztus 11.). Letöltve: 2009. június 5. Az eredetiből archiválva : 2011. augusztus 25..
  8. A Khronos élvonalbeli, többplatformos grafikus gyorsítást tesz lehetővé OpenGL 4.0-val (a hivatkozás nem elérhető) . Khronos sajtóközlemények (2010. március 11.). Letöltve: 2010. március 11. Az eredetiből archiválva : 2011. augusztus 25.. 
  9. Áttekintés az OpenGL 4.0 (lefelé irányuló kapcsolat) újdonságairól . OpenNet (???). A jelentkezés kelte: ???. Archiválva az eredetiből 2012. január 21-én. 
  10. A Khronos az OpenGL 4.2 specifikáció kiadásával gazdagítja a többplatformos 3D grafikát (hivatkozás nem érhető el) . Khronos Group (2011. augusztus 8.). Letöltve: 2012. augusztus 7. Az eredetiből archiválva : 2011. augusztus 25.. 
  11. A Khronos kiadta az OpenGL 4.3 specifikációt jelentősebb fejlesztésekkel . Letöltve: 2012. augusztus 10. Az eredetiből archiválva : 2012. augusztus 10..
  12. A PCGamer, a Khronos kiadja az OpenGL 4.3-at . Letöltve: 2012. augusztus 10. Az eredetiből archiválva : 2012. augusztus 10..
  13. A Khronos kiadta az OpenGL 4.4 specifikációját . Letöltve: 2013. július 22. Az eredetiből archiválva : 2013. október 29.
  14. A Khronos Group bejelenti az OpenGL ökoszisztéma legfontosabb fejlesztéseit . Letöltve: 2014. augusztus 11. Az eredetiből archiválva : 2014. augusztus 12..
  15. A Khronos kiadja az OpenGL 4.6-ot SPIR-V támogatással . Letöltve: 2017. augusztus 1. Az eredetiből archiválva : 2017. július 31.
  16. Apple Inc. Az iOS újdonságai – Apple  Developer . developer.apple.com _ - "Az OpenGL ES használatával készült alkalmazások továbbra is futnak az iOS 12-ben, de az OpenGL ES elavult az iOS 13-ban." Letöltve: 2018. augusztus 7. Az eredetiből archiválva : 2018. augusztus 8..
  17. A következő hónapokban a Dota 2 megszünteti a 32 bites rendszerek, az OpenGL és a DirectX 9 támogatását . Letöltve: 2021. október 18. Az eredetiből archiválva : 2021. október 18..
  18. A Valve Dota 2-je megszünteti a 32 bites rendszerek, a DirectX 9 és az OpenGL támogatását . Letöltve: 2021. október 18. Az eredetiből archiválva : 2021. október 18..
  19. Jet Set Vulkan : A Vulkan felé való költözés elmélkedése . Letöltve: 2021. október 18. Az eredetiből archiválva : 2021. október 18..
  20. A HDRP nem támogatja az OpenGL vagy az OpenGL ES eszközöket . Letöltve: 2022. január 17. Az eredetiből archiválva : 2022. január 18..
  21. Hálós árnyékolók . Letöltve: 2022. január 17. Az eredetiből archiválva : 2022. január 22.
  22. AMD FidelityFX szuperfelbontás . Letöltve: 2022. május 17.
  23. AMD FidelityFX™ Super Resolution (FSR) .
  24. NVIDIA DLSS . Letöltve: 2022. március 2. Az eredetiből archiválva : 2022. március 2.
  25. A DLSS használatának megkezdése . Letöltve: 2022. március 2. Az eredetiből archiválva : 2022. március 2.
  26. A Khronos kiadja a Vulkan 1.0 specifikációját . Letöltve: 2017. szeptember 25. Az eredetiből archiválva : 2017. december 15.

Irodalom

Linkek

Leckék, példák és további források