OpenGL

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 24. března 2021; kontroly vyžadují 38 úprav .
OpenGL
Typ API
Vývojář Silicon Graphics , poté Khronos Group
Zapsáno v C a stínovací jazyk OpenGL
Operační systém Multiplatformní software
První vydání 1. července 1992 [1]
Nejnovější verze 4.6 ( 31. července 2017 )
Stát viz Vulkán
Licence EULA, ACORP
webová stránka opengl.org
 Mediální soubory na Wikimedia Commons

OpenGL ( Open Graphics Library ) je specifikace, která definuje platformově nezávislé (nezávislé na programovacím jazyce ) programovací rozhraní pro psaní aplikací, které používají dvourozměrnou a trojrozměrnou počítačovou grafiku . Vyvinuto v USA a Evropě, licencováno pod typem GNU-/EU/.

Obsahuje více než 300 funkcí pro kreslení složitých 3D scén z jednoduchých primitiv. Používá se při tvorbě počítačových her , CAD , virtuální realita , vizualizace ve vědeckém výzkumu. Na platformě Windows konkuruje Direct3D .

Specifikace

Na základní úrovni je OpenGL pouze specifikací , tedy dokumentem, který popisuje sadu funkcí a jejich přesné chování. Na základě této specifikace výrobci hardwaru vytvářejí implementace  - knihovny funkcí, které odpovídají sadě funkcí specifikace. Implementace je navržena tak, aby efektivně využívala možnosti hardwaru. Pokud hardware funkci neumožňuje, musí být emulována v softwaru. Výrobci hardwaru procházejí řadou specifických testů (testů shody), než je implementace klasifikována jako implementace OpenGL. Vzhledem k tomu, že vývojářům softwaru stačí naučit se používat funkce popsané ve specifikaci, je jejich implementace ponechána na vývojářích hardwaru.

Efektivní implementace OpenGL existují pro Windows , platformy Unix a Mac OS . Tyto implementace jsou obvykle poskytovány výrobci grafických karet a široce využívají jejich schopností. Existují také open source implementace specifikace OpenGL, jednou z nich je knihovna Mesa . Z licenčních důvodů je Mesa „neoficiální“ implementací OpenGL, i když je plně kompatibilní na úrovni kódu a podporuje jak softwarovou emulaci, tak hardwarovou akceleraci s příslušnými ovladači.

Specifikace OpenGL je revidována konsorciem ARB (Architecture Review Board), které bylo založeno v roce 1992. Konsorcium se skládá ze společností, které mají zájem o vybudování široce uznávaného a dostupného API . Podle oficiální webové stránky OpenGL jsou členy ARB s hlasovacím hlasováním k listopadu 2004 profesionální výrobci grafického hardwaru SGI , 3Dlabs , Matrox a Evans & Sutherland (vojenské aplikace), výrobci spotřebního grafického hardwaru ATI a NVIDIA , výrobce procesorů Intel a počítačů výrobci a počítačový hardware od IBM , Apple , Dell , Hewlett-Packard a Sun Microsystems , stejně jako jeden z lídrů v oboru počítačových her, id Software . Microsoft , jeden ze zakládajících členů konsorcia, odešel v březnu 2003. Kromě stálých členů je každý rok zváno velké množství dalších společností, aby se do jednoho roku staly součástí OpenGL ARB. Takový velký počet společností zapojených do různých zájmů umožnil OpenGL stát se univerzálním aplikačním rozhraním se spoustou funkcí.

Kurt Akeley a Mark Segal jsou autory původní specifikace OpenGL. Chris Frazier upravil verzi 1.1. Jon Leech upravil verze 1.2 až 2.0.

Architektura

OpenGL se zaměřuje na následující dva úkoly:

Základním principem OpenGL je získání sad vektorových grafických primitiv ve formě bodů, čar a trojúhelníků, následuje matematické zpracování přijatých dat a konstrukce bitmapového obrázku na obrazovce a/nebo v paměti. Vektorové transformace a rasterizace jsou prováděny grafickým potrubím, což je v podstatě diskrétní automat . Naprostá většina příkazů OpenGL spadá do jedné ze dvou skupin: buď přidávají grafická primitiva jako vstup do potrubí, nebo konfigurují potrubí pro provádění různých transformací.

OpenGL je nízkoúrovňové procedurální API, které nutí programátora diktovat přesnou sekvenci kroků k vytvoření výsledné bitmapové grafiky (imperativní přístup). To je hlavní rozdíl od deskriptorových přístupů, kdy je celá scéna přenášena jako datová struktura (nejčastěji stromová), která je zpracovávána a sestavována na obrazovce. Na jednu stranu imperativní přístup vyžaduje od programátora hluboké znalosti zákonitostí trojrozměrné grafiky a matematických modelů, na druhou stranu dává svobodu zavádět různé novinky.

Rozšíření

Standard OpenGL s příchodem nových technologií umožňuje jednotlivým prodejcům přidávat funkce do knihovny prostřednictvím mechanismu rozšíření . Rozšíření jsou distribuována pomocí dvou součástí: hlavičkového souboru, který obsahuje prototypy nových funkcí a konstant , a ovladače zařízení dodaného vývojářem. Každý výrobce má svou zkratku, která se používá při pojmenování jeho nových funkcí a konstant. Například NVIDIA má zkratku NV , která se používá při pojmenovávání jejích nových funkcí, jako jsou , glCombinerParameterfvNV()stejně jako konstanty, GL_NORMAL_MAP_NV. Může se stát, že určité rozšíření může implementovat více výrobců. V tomto případě se používá zkratka EXT , například glDeleteRenderbuffersEXT. Když je rozšíření schváleno konsorciem ARB , získává zkratku ARB a stává se standardním rozšířením. Rozšíření schválená konsorciem jsou obvykle zahrnuta v jedné z následujících specifikací OpenGL.

Seznam registrovaných rozšíření lze nalézt v oficiální databázi rozšíření [2] .

Další knihovny

Existuje řada knihoven postavených nad OpenGL nebo navíc k němu. Například knihovna GLU , která je téměř standardním doplňkem OpenGL a vždy jej doprovází, je postavena nad posledně jmenovaným, to znamená, že využívá jeho funkce k implementaci svých schopností. Jiné knihovny, jako je GLUT a SDL , jsou navrženy tak, aby implementovaly funkce, které nejsou dostupné v OpenGL. Mezi tyto funkce patří vytváření uživatelského rozhraní (okna, tlačítka, nabídky atd.), nastavení kreslicího kontextu (kreslicí plocha používaná OpenGL), zpracování zpráv z I/O zařízení (klávesnice, myš atd.) a práce s soubory . Každý správce oken má obvykle svou vlastní knihovnu rozšíření pro implementaci výše uvedených funkcí, jako je WGL na Windows nebo GLX na X Window System , ale knihovny GLUT a SDL jsou multiplatformní, což usnadňuje portování napsaných aplikací na jiné platformy.

Knihovny GLEW (The OpenGL Extension Wrangler Library) a GLEE (The OpenGL Easy Extension library) jsou navrženy tak, aby usnadnily práci s rozšířeními a různými verzemi OpenGL. To platí zejména pro programátory Windows, protože soubory záhlaví a knihovny dodávané se sadou Visual Studio jsou na úrovni verze OpenGL 1.1.

OpenGL má pouze sadu geometrických primitiv (body, čáry, polygony), ze kterých jsou vytvořeny všechny trojrozměrné objekty. Někdy není tato úroveň detailů při vytváření scén vždy vhodná. Proto byly nad OpenGL postaveny knihovny vyšší úrovně, jako je Open Inventor a VTK . Tyto knihovny umožňují pracovat se složitějšími 3D objekty, což usnadňuje a urychluje vytváření 3D scény.

GLM (OpenGL Mathematics) je knihovna nástrojů, která poskytuje programátorům C++ třídy a funkce pro provádění matematických operací. Knihovnu lze použít při vytváření 3D programů pomocí OpenGL [3] . Jednou z charakteristik GLM je, že implementace je založena na specifikaci GLSL . Zdrojový kód GLM používá licenci MIT .

Nezávislost programovacího jazyka

Pro potvrzení nezávislosti programovacího jazyka byly vyvinuty nebo zcela přeneseny různé možnosti vazby (svázání) funkcí OpenGL do jiných jazyků. Jedním z příkladů je Java 3D knihovna , která může využívat hardwarovou akceleraci OpenGL. Přímá vazba funkcí je implementována v Lightweight Java Game Library [4] , která má přímou vazbu OpenGL pro Java . Sun také vydal verzi Java OpenGL (JOGL), která poskytuje přímou vazbu na funkce OpenGL C , na rozdíl od Java 3D, která nemá tak nízkoúrovňovou podporu. Oficiální stránka OpenGL obsahuje odkazy na vazby pro Javu, Fortran 90 , Perl , Pike , Python , Ada , Visual Basic a Pascal [5] . Existují také možnosti vazby OpenGL pro C++ a C# [6] .

Historie

Počítačová grafika našla široké rozšíření a uplatnění v každodenním životě. Vědci používají počítačovou grafiku k analýze výsledků simulace. Inženýři a architekti používají 3D grafiku k vytváření virtuálních modelů . Filmaři vytvářejí speciální efekty nebo plně animované filmy (" Shrek ", " Toy Story " atd.). V posledních letech se rozšířily i počítačové hry , které k vytváření virtuálních světů využívají maximálně trojrozměrnou grafiku.

Rozšíření počítačové grafiky mělo své vlastní potíže. V 90. letech bylo vyvinutí softwarového produktu , který by mohl běžet na široké škále grafického hardwaru, časově i finančně náročné. Bylo nutné vytvořit moduly pro každý typ grafických adaptérů zvlášť , což někdy vedlo ke zdvojení stejného programového kódu. To značně brzdilo rozvoj a šíření počítačové grafiky.

Silicon Graphics (SGI) se specializuje na tvorbu high-tech grafického hardwaru a softwaru. Jako lídr v 3D grafice v té době SGI viděl problémy a překážky v růstu trhu. Proto bylo rozhodnuto standardizovat způsob přístupu ke grafickému hardwaru na úrovni programového rozhraní .

Zrodilo se tak programovací rozhraní OpenGL, které standardizuje přístup ke grafickému hardwaru přesouváním odpovědnosti za vytvoření hardwarového ovladače na výrobce grafického zařízení. To umožnilo vývojářům softwaru používat vyšší úroveň abstrakce od grafického hardwaru, což značně urychlilo tvorbu nových softwarových produktů a snížilo jejich náklady.

V roce 1992 SGI vedl OpenGL ARB  , skupinu společností vyvíjejících specifikaci OpenGL. OpenGL je odvozeno od 3D rozhraní SGI IRIS GL . Jedním z omezení IRIS GL bylo, že umožňovalo pouze funkce podporované hardwarem; pokud tato schopnost nebyla implementována v hardwaru, aplikace ji nemohla použít. OpenGL překonává tento problém implementací funkcí v softwaru, které nejsou dostupné v hardwaru, což umožňuje aplikacím používat toto rozhraní na systémech s relativně nízkou spotřebou.

V roce 1995 byla vydána knihovna Direct3D společnosti Microsoft . Netrvalo dlouho a Microsoft, SGI a Hewlett-Packard zahájily projekt nazvaný Fahrenheit, jehož cílem bylo vytvořit obecnější programovací rozhraní založené na Direct3D a OpenGL. Myšlenka se zdála být dostatečně slibná, aby vnesla pořádek do oblasti interaktivní 3D grafiky, avšak v důsledku finančních potíží SGI a nedostatku řádné průmyslové podpory byl projekt opuštěn.

OpenGL 2.0

V září 2001 společnost 3DLabs odhalila svou vizi OpenGL 2.0.

OpenGL verze 2.0 byla představena společností 3Dlabs v reakci na obavy z pomalého a nejasného směru vývoje OpenGL. Společnost 3Dlabs navrhla řadu významných doplňků standardu, z nichž nejvýznamnější bylo přidání shaderového jazyka GLSL (OpenGL Shading Language) do jádra OpenGL. To umožňuje programátorovi nahradit pevné potrubí OpenGL malými programy ve speciálním jazyce, aby vytvořil různé efekty, jako je bump mapping , normální mapování , paralaxní mapování , HDR atd.

Ještě před zavedením jazyka GLSL do standardu OpenGL však bylo možné vyvinout speciální efekty v jazycích assembleru (rozšíření vertex_program, fragment_program) a Cg (NVidia C for Graphics). Mnoho navrhovaných funkcí ještě není k dispozici v OpenGL 2.0, ačkoli některé z nich byly implementovány jako rozšíření mnoha dodavatelů.

OpenGL 2.1

Vydáno 2. července 2006.

Přidána podpora pro GLSL verze 1.2

Nová rozšíření:

OpenGL 3.0

11. srpna 2008 vydala Khronos Group novou verzi specifikace OpenGL [7] .

Podporované grafické karty: Řada Radeon HD; GeForce 8, 9, GTX 100, GTX 200, GTX 300 a GTX 400 série.

OpenGL 3.1

24. března 2009 Khronos Group oznámila OpenGL 3.1. Nová verze vyčistila komponenty, které byly prohlášeny za zastaralé, ale zůstaly v OpenGL 3.0, aby se usnadnil přechod na novou verzi API (zastaralé komponenty lze v budoucnu použít prostřednictvím rozšíření GL_ARB_compatibility).

OpenGL 3.2

3. srpna 2009 Khronos Group oznámila OpenGL 3.2. Nová verze pokračuje ve vývoji standardu OpenGL, aby umožnila vývojářům grafiky přístup k pokročilým funkcím GPU.

Podporované grafické karty: Řada Radeon HD; GeForce řady 8000, 9000, GTX 200 a 400.

Inovace:

OpenGL 3.3

Představeno s OpenGL 4.0 11. března 2010. Umožňuje co nejvíce se přiblížit funkcionalitě OpenGL 4.0 na hardwaru předchozí generace.

OpenGL 4.0

11. března 2010 Khronos Group předložila konečnou verzi specifikace OpenGL 4.0 a shader jazyka GLSL 4.0. OpenGL 4.0 je plně zpětně kompatibilní se staršími rozšířeními OpenGL pomocí režimu kompatibility zavedeného v OpenGL 3.2 [8] .

Mezi inovacemi [9] :

OpenGL 4.1

26. července 2010 oznámila Khronos Group specifikaci OpenGL 4.1. Specifikace zahrnuje aktualizaci GLSL (GL Shading language) na verzi 4.10.

Inovace:

Nová rozšíření:

OpenGL 4.2

8. srpna 2011 zveřejnila Khronos Group specifikaci pro OpenGL 4.2 a shader jazyk GLSL 4.2 [10] .

Inovace:

OpenGL 4.3

Dne 6. srpna 2012 zveřejnila skupina Khronos na SIGGRAPH 2012 specifikaci OpenGL 4.3 [11] [12] . Kromě nových funkcí přináší OpenGL 4.3 podporu pro nový typ shaderu prostřednictvím rozšíření GL_ARB_compute_shader. Nová verze je zpětně kompatibilní s předchozími.

OpenGL 4.4

Podporované grafické karty: AMD/ATi Radeon HD 5000/6000/7000/8000 a 200 série, Nvidia GeForce 400/500/600/700/980 série.

Dne 22. července 2013 zveřejnila skupina Khronos na SIGGRAPH v Anaheimu v Kalifornii specifikaci OpenGL 4.4 [13] .

OpenGL 4.5

Podporované grafické karty: AMD/ATi Radeon založené na architektuře GCN, řada Nvidia GeForce 400/500/600/700/800/900.

Dne 11. srpna 2014 zveřejnila skupina Khronos na SIGGRAPH ve Vancouveru v Kanadě specifikaci OpenGL 4.5 [14] .

OpenGL 4.6

31. července 2017 skupina Khronos zveřejnila specifikace OpenGL 4.6. Hlavní inovací je přenosná střední reprezentace shaderů SPIR-V, původně vyvinutý pro Vulkan API [15] .

Budoucnost OpenGL

Apple

Apple v červnu 2018 na akci WWDC zavrhl technologie OpenGL a OpenGL ES . [16]

Google

Operační systémy Fuchsia a Stadia nativně podporují pouze Vulkan .

Ventil

17. září 2021 Valve odstranilo podporu OpenGL z populární hry Dota 2 [17] [18]

ID Software

Všechny nové hry od roku 2016 využívající herní engine id Tech 6 používají jako vykreslovací rozhraní Vulkan .

Herní engine ID Tech 7 podporuje pouze specifikaci Vulkan .

Atypické hry

Atypické hry, podporované společností Samsung , se rozhodly přinést podporu Vulkan do svého enginu. Nakonec se ukázalo, že implementace Vulkan skutečně nahradí OpenGL na všech platformách kromě Apple [19]

Jednota

Herní engine Unity nepodporuje OpenGL/OpenGL ES pro HDR potrubí [20]

Nedostatek podpory pro současné grafické technologie

OpenGL nepodporuje Ray Tracing , API pro dekódování videa na GPU na rozdíl od Vulkanu

Mesh Shadery v OpenGL jsou podporovány pouze na nVidia [21]

Anti- aliasing s AMD FidelityFX Super Resolution (FSR) [22] [23] a Nvidia Deep Learning Super Sampling (DLSS) [24] [25] algoritmy hlubokého učení nejsou pro OpenGL podporovány

Vulkan

Vulkan, dříve známý jako glNext, je nové API, které splňuje požadavky moderní reality a odstraňuje hlavní nevýhody OpenGL. Nabízí nižší režii a přímější kontrolu nad GPU. Khronos Group jej vyvíjí od roku 2014. Verze 1.0 byla vydána 16. února 2016 [26] .

Viz také

Poznámky

  1. https://www.khronos.org/opengl/wiki/History_of_OpenGL#OpenGL_1.0_.281992.29
  2. Registr (přesměrování) (downlink) . Datum přístupu: 21. ledna 2006. Archivováno z originálu 5. února 2008. 
  3. GLSL + Volitelné funkce = OpenGL Mathematics (GLM). Matematická knihovna C++ pro 3D grafiku Archivováno 28. února 2009 na Wayback Machine 
  4. LWJGL Archivováno 25. ledna 2006 na Wayback Machine  -  vazba OpenGL pro jazyk Java a další komponenty pro vývoj her
  5. Vazby programovacího jazyka na OpenGL . Získáno 29. října 2008. Archivováno z originálu 2. listopadu 2008.
  6. Exokortex | Počítačová grafika a simulační software (nedostupný odkaz) . Získáno 21. ledna 2006. Archivováno z originálu 28. ledna 2006. 
  7. Skupina Khronos dnes oznámila, že vydala specifikaci OpenGL 3.0  (eng.)  (downlink) . opengl.org (11. srpna 2008). Získáno 5. června 2009. Archivováno z originálu 25. srpna 2011.
  8. Khronos spouští špičkovou akceleraci grafiky napříč platformami s OpenGL 4.0 (odkaz není k dispozici) . Tiskové zprávy Khronos (11. března 2010). Získáno 11. března 2010. Archivováno z originálu 25. srpna 2011. 
  9. Přehled toho, co je nového v OpenGL 4.0 (downlink) . OpenNet (???). Datum přihlášky: ???. Archivováno z originálu 21. ledna 2012. 
  10. Khronos obohacuje multiplatformní 3D grafiku vydáním specifikace OpenGL 4.2 (odkaz není k dispozici) . Khronos Group (8. srpna 2011). Získáno 7. srpna 2012. Archivováno z originálu dne 25. srpna 2011. 
  11. Khronos vydává specifikaci OpenGL 4.3 s významnými vylepšeními . Získáno 10. srpna 2012. Archivováno z originálu 10. srpna 2012.
  12. PCGamer, Khronos vydává OpenGL 4.3 . Získáno 10. srpna 2012. Archivováno z originálu 10. srpna 2012.
  13. Khronos vydává specifikaci OpenGL 4.4 . Získáno 22. července 2013. Archivováno z originálu dne 29. října 2013.
  14. Khronos Group oznamuje klíčové pokroky v ekosystému OpenGL . Získáno 11. srpna 2014. Archivováno z originálu 12. srpna 2014.
  15. Khronos vydává OpenGL 4.6 s podporou SPIR-V . Získáno 1. 8. 2017. Archivováno z originálu 31. 7. 2017.
  16. Apple Inc. Co je nového v iOS – Apple  Developer . developer.apple.com _ - "Aplikace vytvořené pomocí OpenGL ES budou i nadále fungovat v iOS 12, ale OpenGL ES je v iOS 13 zastaralé." Získáno 7. 8. 2018. Archivováno z originálu 8. 8. 2018.
  17. V nadcházejících měsících Dota 2 zruší podporu pro 32bitové systémy, OpenGL a DirectX 9 . Získáno 18. října 2021. Archivováno z originálu dne 18. října 2021.
  18. Valve's Dota 2 pro zrušení podpory pro 32bitové systémy, DirectX 9 a OpenGL . Získáno 18. října 2021. Archivováno z originálu dne 18. října 2021.
  19. Jet Set Vulkan : Zamyšlení nad přesunem na Vulkan . Získáno 18. října 2021. Archivováno z originálu dne 18. října 2021.
  20. HDRP nepodporuje zařízení OpenGL nebo OpenGL ES . Získáno 17. ledna 2022. Archivováno z originálu dne 18. ledna 2022.
  21. Mesh Shaders . Získáno 17. ledna 2022. Archivováno z originálu dne 22. ledna 2022.
  22. AMD FidelityFX Super Resolution . Staženo: 17. května 2022.
  23. AMD FidelityFX™ Super Resolution (FSR) .
  24. NVIDIA DLSS . Získáno 2. března 2022. Archivováno z originálu dne 2. března 2022.
  25. Začínáme s DLSS . Získáno 2. března 2022. Archivováno z originálu dne 2. března 2022.
  26. Khronos vydává specifikaci Vulkan 1.0 . Získáno 25. září 2017. Archivováno z originálu 15. prosince 2017.

Literatura

Odkazy

Lekce, příklady a další zdroje