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 .
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.
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.
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] .
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 .
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] .
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.
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.1Vydáno 2. července 2006.
Přidána podpora pro GLSL verze 1.2
Nová rozšíření:
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.124. 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.23. 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:
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.
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] :
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í:
8. srpna 2011 zveřejnila Khronos Group specifikaci pro OpenGL 4.2 a shader jazyk GLSL 4.2 [10] .
Inovace:
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.4Podporované 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.5Podporované 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.631. č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] .
Apple v červnu 2018 na akci WWDC zavrhl technologie OpenGL a OpenGL ES . [16]
Operační systémy Fuchsia a Stadia nativně podporují pouze Vulkan .
17. září 2021 Valve odstranilo podporu OpenGL z populární hry Dota 2 [17] [18]
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, 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]
Herní engine Unity nepodporuje OpenGL/OpenGL ES pro HDR potrubí [20]
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, 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] .
skupiny Khronos | Normy|
---|---|
Aktivní | |
Neaktivní |