OpenGL

Från Wikipedia, den fria encyklopedin
Hoppa till navigation Hoppa till sökning
OpenGL

OpenGL -logotyp
Grundläggande information

utvecklare Khronos Group
Utgivningsår 1992
Nuvarande version 4.6
(31 juli 2017 [1] )
operativ system plattformsoberoende
programmeringsspråk C.
kategori API
Licens olika [2]
www.opengl.org

OpenGL (Open G raphics L ibrary; German Open Graphics Library) är en specifikation för en plattform och programmeringsgränssnitt för programmering av flera programmeringsgränssnitt (API) för utveckling av 2D- och 3D- datorgrafikapplikationer . OpenGL -standarden beskriver cirka 250 kommandon som tillåter visning av komplexa 3D -scener i realtid . Dessutom kan andra organisationer (mestadels tillverkare av grafikkort ) definiera egna tillägg.

Den Genomförandet av OpenGL API sker vanligen genom systembibliotek , på vissa operativsystem som en del av grafikkortet föraren . Dessa utför kommandon från grafikkortet i enlighet därmed; i synnerhet måste funktioner som inte finns på grafikkortet emuleras av CPU: n .

Efterträdaren till OpenGL är Vulkan .

Programmeringsmodellen

OpenGL grafik pipeline diagram

Många parametrar kan påverka utseendet på gjorda objekt, till exempel kan de vara strukturerade och belysta, sträckta, förskjutna, transparenta eller ogenomskinliga, de kan ha en grov eller slät yta osv.

OpenGL utformades som en tillståndsmaskin som inte tar emot alla nödvändiga parametrar för varje funktionsanrop, men använder samma värden tills motsvarande tillstånd ändras. På så sätt behöver du inte berätta för OpenGL önskad färg för varje hörn , till exempel, utan ställa in en färg en gång, varefter alla efterföljande hörn visas i den här färgen. På samma sätt kan ljuskällor slås på eller av globalt och många andra tillstånd kan ställas in.

Anledningen till denna design är att nästan varje förändring i ritläget innebär omfattande omorganisation av grafikledningen , så det är bättre att undvika detta så länge det är vettigt att göra det. Det skulle också vara tröttsamt för programmeraren att skriva in dussintals parametrar om och om igen. Ofta kan många tusen hörn redigeras innan ett tillstånd måste ändras igen, medan vissa stater till och med aldrig ändras. Till exempel förblir ljuskällorna mestadels desamma för alla objekt i en scen. Många tillstånd behålls åtminstone under hela återgivningen av ett komplett objekt, till exempel flyttas en bil som helhet runt en viss vektor och bryts inte ner i dess enskilda delar och flyttas sedan individuellt. Detta statsbaserade koncept följs också i Direct3D .

Tillägg

En viktig egenskap hos OpenGL är dess utökningsbarhet. Enskilda leverantörer (vanligtvis grafikkortstillverkare) kan lägga till ytterligare tillstånd till OpenGL -tillståndsmaskinen. En procedur i fyra steg följs:

  1. Om en tillverkare vill implementera ett tillägg levererar han en C -huvudfil där han definierar tillägget med nödvändiga konstanter och eventuellt funktionsprototyper. Funktionsnamnen och konstanterna ges ett tillverkarspecifikt suffix (t.ex. NV för Nvidia eller ATI för ATI ).
  2. Om flera tillverkare sedan går med på att erbjuda samma tillägg får funktionsnamnen och konstanterna suffixet EXT.
  3. Om ARB (Architecture Review Board) slutligen går med på att standardisera tillägget får alla namn suffixet ARB.
  4. De flesta av de tillägg som standardiserats av ARB är sedan "core" i följande OpenGL -specifikation, det vill säga att de blir en del av OpenGL själv och inte längre har ett suffix.

Historisk utveckling

OpenGL härstammar från IRIS GL utvecklat av Silicon Graphics (SGI). OpenGL 1.0 -versionen skrevs av Mark Segal och Kurt Akeley [3] . I det så kallade Fahrenheit-projektet försökte Microsoft och SGI att ena sina 3D-standarder, men projektet avbröts på grund av ekonomiska svårigheter från SGI: s sida.

OpenGL -standarden fastställs av OpenGL ARB (Architecture Review Board). ARB har funnits sedan 1992 och består av ett antal företag. Röstande medlemmar är företagen 3DLabs , Apple , AMD / ATI , Dell , IBM , Intel , Nvidia , SGI och Sun (från och med november 2004). Andra inblandade företag är Evans & Sutherland , Imagination Technologies , Matrox , Quantum3D , S3 Graphics , Spinor GmbH , Tungsten Graphics och Xi Graphics . Microsoft , en av de grundande medlemmarna, lämnade ARB i mars 2003.

Nya funktioner i OpenGL introduceras vanligtvis först som tillverkarspecifika tillägg och går sedan igenom tillverkaroberoende tillägg och ARB-tillägg till kärnfunktionalitet. Detta gör det möjligt att använda de senaste möjligheterna för grafisk hårdvara och fortfarande hålla OpenGL tillräckligt abstrakt.

Sedan den 31 juli 2006 har vidareutvecklingen av OpenGL API varit i händerna på Khronos Group .

historia

Legend: Äldre version; stöds inte längre Äldre version; stöds fortfarande Aktuell version Aktuell preliminär version Framtida version
version offentliggörande Beskrivning / ändringar
Äldre version; stöds inte längre: 1.0 Januari 1992 första publikationen
Äldre version; stöds fortfarande: 1.1 Januari 1997
  • Vertex -matriser
  • Texturobjekt
  • Polygonförskjutning
Äldre version; stöds fortfarande: 1.2 16 mars 1998
Äldre version; stöds fortfarande: 1.2.1 14 oktober 1998
  • ARB -tillägg introducerade
  • ARB multitextur
Äldre version; stöds fortfarande: 1.3 14 augusti 2001
  • komprimerade texturer
  • Kubkartor
  • Multitexturing
Äldre version; stöds fortfarande: 1.4 24 juli 2002
  • Djuptexturer (för skuggmappning)
  • automatisk mip-map- generation
  • Dimma koordinater
Äldre version; stöds fortfarande: 1.5 29 juli 2003
  • Buffertobjekt (lagrar data i grafikminnet)
  • Ocklusionsfrågor
Äldre version; stöds fortfarande: 2.0 7 september 2004
  • Shader -program: OpenGL Shading Language
  • Flera renderingsmål
  • Texturer av valfri storlek (högst 2 n för höjd och bredd)
Äldre version; stöds fortfarande: 2.1 2 augusti 2006
  • Pixel -buffertobjekt
  • OpenGL Shading Language 1.20
  • sRGB -texturer
Äldre version; stöds fortfarande: 3,0 "Longs Peak" 11 augusti 2008 [ursprungligen planerade mål, endast delvis genomförda]
  • Kodbasen städad
  • OpenGL Shading Language 1.30
  • Borttagning av äldre problem ( glBegin / glEnd , Fixed-Function-Pipeline, T&L etc.)
  • arkitekturen som helhet (lagermodell) närmar sig DirectX
  • För första gången, så långt som möjligt avstå från uttrycklig nedåtkompatibilitet
Äldre version; stöds fortfarande: 3.1 "Longs Peak Reloaded" 24 mars 2009 [4]
  • Ytterligare borttagning av äldre problem (t.ex. fasta funktionsalternativ, direktläge och färgindexläge), dessa är endast tillgängliga via tillvalet "kompatibilitetstillägg"
  • OpenGL Shading Language 1.40
  • Uniforma buffertobjekt
  • Vertex shader -program tillåter minst 16 texturuppslag
  • Primitiv omstart
  • Instancing
  • CopyBuffer API i samarbete med OpenCL .
Äldre version; stöds fortfarande: 3.2 3 augusti 2009 [5]
  • högre körhastighet
  • förbättrad bildkvalitet
  • accelererad geometribehandling
  • förenklad portning av Direct3D -applikationer
  • OpenGL Shading Language 1.50
  • Geometri -shaders stöds nu också direkt i OpenGL -kärnan vid programmering av grafikrörledningar
  • fem ARB -tillägg
Äldre version; stöds fortfarande: 3.3 11 mars 2010 [6]
  • Integration av OpenCL
  • OpenGL Shading Language 3.30
Äldre version; stöds fortfarande: 4.0 11 mars 2010 [6]
  • Integration av OpenCL
  • Tessellation [7]
  • OpenGL Shading Language 4.00
Äldre version; stöds fortfarande: 4.1 26 juli 2010 [6]
  • Ladda binära skuggprogram för att spara tid
  • 64-bitars flytande punktkomponenter med vertex-shader-ingång för högre precision
  • Flera visningsportar för en renderingsyta
  • OpenGL -skuggningsspråk 4.10
Äldre version; stöds fortfarande: 4.2 8 augusti 2011 [6]
  • OpenGL Shading Language 4.20
Äldre version; stöds fortfarande: 4.3 6 augusti 2012 [6]
  • Beräkna skuggprogram för universella beräkningar
  • OpenGL Shading Language 4.30
  • Plattformstryckskompression enligt ETC2 / EAC
  • Mer stabilitet mellan OpenGL -applikationerna
Äldre version; stöds fortfarande: 4.4 22 juli 2013 [6]
  • Mer kontroll över placeringen av "bufferten" i minnet
  • OpenGL Shading Language 4.40
  • Bind flera OpenGL -objekt till sammanhanget samtidigt
  • Compute shader med variabel arbetsgruppsstorlek
Äldre version; stöds fortfarande: 4.5 11 augusti 2014 [6]
  • Direkt statlig åtkomst (DSA)
  • Spolningskontroll
  • robusthet
  • OpenGL ES 3.1 API och skuggkompatibilitet
  • DX11 -emuleringsfunktioner
Nuvarande version: 4.6 31 juli 2017 [6] [1]
  • Stöd från SPIR-V

Det stora språnget från OpenGL 1.5 till 2.0 kan förklaras med introduktionen av "OpenGL Shading Language". Detta är en så stor förändring och expansion att ARB bestämde sig för att ta detta steg. Khronos -gruppen tillkännagav specifikationen för OpenGL 3.0 den 11 augusti på Siggraph 2008. API: t har omfattande reviderats (bort från den fasta funktionsrörledningen - mot shaders eller program, bort från tillståndsmaskinen - mot ett objektbaserat system). OpenGL är fortfarande nedåtkompatibel, men det finns inte längre några nya funktioner för det gamla API: et. För första gången har den nya OpenGL de kraftfulla geometri -shadersna i 3.0 -modellen.

Med den snabba lanseringen av OpenGL 4.0 och dess funktionsuppsättning - särskilt införandet av tessellation - har Khronos -gruppen kunnat komma ikapp länge och har återigen tävlat med DirectX (11). [Åttonde]

NVIDIA har introducerat flera nya ARB under titlarna OpenGL 2015 och OpenGL 2016. En del av detta blev standard med OpenGL 4.6. Under 2017 och 2018 gjordes ytterligare tillägg, särskilt för VR- och strålspårning, tillgängliga för Pascal och Turing. [9] [10] [11] [12] [13] [14] [15] [16] [17]

Longs Peak och OpenGL 3.0 -kontroversen

Innan OpenGL 3.0 -versionen släpptes den 11 augusti 2008 var denna översyn av API känt under kodnamnet "Longs Peak". Vid tidpunkten för det ursprungliga tillkännagivandet presenterades Longs Peak som den allra första stora och djupgående översynen av API-gränssnittet i OpenGL-historien. Detta bestod av en grundläggande översyn av hur OpenGL fungerar, vilket bör resultera i grundläggande ändringar av API: et. För att säkerställa nedåtkompatibilitet med äldre programvara trots de omfattande förändringar och revolutionerande innovationer som har tillkännagivits bör äldre versioner av API: et fortsätta att vara tillgängliga, men inga nya funktioner bör införlivas. Detta skulle ha tillåtit gammal programkod som t.ex. B. finns i de flesta CAD -applikationer - som har använt sin kodbas nästan oförändrad i decennier - fortsätter att köras med äldre versioner av OpenGL API, medan andra program gradvis skulle ha skrivits om eller överförts till det nya gränssnittet.

Longs Peak skulle ursprungligen släppas i september 2007 under namnet OpenGL 3.0. Men den 30 oktober 2007 meddelade Khronos -gruppen att de hade stött på olika problem som de ville lösa innan de släppte specifikationerna.

Till följd av detta blev publiceringen uppskjuten och informationskällorna upphörde helt. Khronos-gruppen användes för att samordna den vidare utvecklingen, eftersom innovationer och idéer bara kunde genomföras med svårighet och mycket tidskrävande på grund av de många medlemmarna. Efter att ha börjat arbetet strävade hon efter ett tydligt och stramt schema med klart definierade mål och engagerade sig för en mer öppen kommunikation.

De specifikationer som slutligen antogs visade sig vara mycket mindre spektakulära än annonserade. Stora delar av koden behölls och objektläget som presenterades var inte integrerat. Det finns inte heller några kända planer på att skicka in dessa i framtida versioner. I slutändan har API: n förblivit i stort sett densamma, med några tillägg till kärnfunktionen.

Detta nedslående resultat orsakade missnöje bland vissa utvecklargrupper, eftersom de hade hoppats på banbrytande innovationer och en seriös, framtidsinriktad, plattformsoberoende konkurrentprodukt till Microsofts DirectX. I protest hotade några att byta till DirectX i framtiden. Mest besvikelse skylldes på den dåliga eller obefintliga kommunikationen från Khronos sida. En kände sig helt utelåst och lämnade i mörkret. Annan kritik framfördes mot behovet av DirectX 10-kompatibel hårdvara och avsaknaden av geometri-shaders och instanserad rendering som kärnfunktioner.

Andra källor säger att utvecklargemenskapens svar inte har varit så dåligt som ursprungligen rapporterades, med många leverantörer som visade planerat stöd för den nya versionen.

Fördelar och nackdelar med OpenGL jämfört med Direct3D

fördelar
  • Klient-server-modell
  • Draw -samtal är kraftfullare än i Direct3D under vissa omständigheter [18]
  • plattformsoberoende
  • kan byggas ut av tillverkarna själva
  • Det finns ett stort antal tillägg för nya funktioner som ännu inte stöds av standarden
  • de tillgängliga funktionerna beror på GPU: n eller dess drivrutin, inte på operativsystemet [19]
nackdel
  • OpenGL har fortfarande ett delvis föråldrat och mer komplext att använda programmeringsgränssnitt (API), vilket vissa utvecklare anser vara besvärligt. [20] [21]

Gränssnitt till systemet

Eftersom OpenGL är ett rent grafikbibliotek, bryr det sig inte om hanteringen av ritytor (fönster), andra buffertar (t.ex. Z-bufferten eller Stencil-bufferten ) eller renderingskontexter för att använda gränssnittet med flera applikationer på samtidigt för att kunna. Dessa måste göras tillgängliga med hjälp av de avsedda, operativsystemberoende biblioteken.

Det finns flera bibliotek som ansluter OpenGL till det underliggande operativsystemet:

  • AGL och CGL, motsvarande motsvarighet för macOS ,
  • FreeGLUT , ett nyare alternativ till den inte längre utvecklade GLUT,
  • GLFW , ett bibliotek som liknar GLUT, som abstraherar det underliggande operativsystemet,
  • GLUT , ett bibliotek som, baserat på OpenGL, GLU och, beroende på plattformen, GLX, WGL eller AGL, erbjuder ett plattformsoberoende API för input / output, vilket skapar renderingskontexter och liknande,
  • GLX , som utgör gränssnittet mellan X Window System och OpenGL,
  • Med GtkGLExt kan OpenGL-grafik integreras i GTK + -program (plattformsoberoende), [22]
  • LWJGL , gränssnitt för programmering med Java,
  • Qt , kan skapa OpenGL -sammanhang och erbjuder många alternativ för interaktion med sitt eget bibliotek
  • SDL , kan också generera ett OpenGL -sammanhang över plattformar,
  • SFML , använder också ett OpenGL -renderingskontext över plattformar för ritning i Windows,
  • WebKit använder OpenGL för hårdvaruacceleration,
  • WGL, Windows Graphics Library som ansluter OpenGL och Windows .

Kommandosyntax

OpenGL -kommandosyntax

OpenGL -kommandon innehåller ett prefix som anger biblioteket från vilket kommandot kommer, följt av ord som börjar med versaler: [23]

gl * glu * glöd *
Grundläggande kommando för OpenGL -biblioteket OpenGL Utility Library (GLU) -kommando Kommando för OpenGL Utility Toolkit (GLUT)
z. B. glShadeModelO z. B. gluNurbsSurfaceO z. B. glutCreateWindowO

Typiska användningsområden för OpenGL

Tack vare plattformens kontinuitet går program upp till 40 gånger snabbare än för 12 år sedan jämfört med AMD -grafikkort och med upp till 15 gånger mindre förbrukning per åtgärd, utan att behöva ändra programkoden. [25]

Plattformar som stöds

OpenGL stöds av många operativsystem, inklusive de flesta av de ledande:

Open Graphics Library for Embedded Systems (OpenGL ES) är tillgängligt för följande plattformar:

Plattformsoberoende (Windows, Mac OS, Solaris och Linux) OpenGL stöds också av tilläggen JOGL eller LWJGL på Java-plattformen , som fungerar som en omslag mellan Java och den ursprungliga implementeringen av operativsystemet.

WebGL

WebGL är en komponent i webbläsare baserade på OpenGL ES , med hjälp av vilken hårdvaruaccelererad 3D-grafik kan visas direkt.

vulkan

Den 3 mars 2015 presenterades efterträdaren till OpenGL på Game Developers Conference (GDC). Det nya API: t, ursprungligen känt som Next Generation OpenGL eller glNext , kallas Vulkan.

Se även

  • DevIL , ett plattformsoberoende API för att snabbt ladda och spara grafik. Tidigare OpenIL . Fungerar mycket bra med OpenGL, eftersom det är möjligt att ladda en bildfil i en OpenGL -struktur eller att spara skärmdumpar med ett enda funktionssamtal.
  • Direkt rendering infrastruktur
  • OpenGL Utility Library (GLU) standardiserat av ARB och en del av varje OpenGL -implementering.
  • Java 3D , ett bibliotek med Java-klasser för att skapa, manipulera och visa tredimensionell grafik i Java-applikationer och applets. Använder OpenGL eller Direct3D beroende på plattform och implementering.
  • AMD Mantle , ett programmeringsgränssnitt för grafikutmatning som utvecklats av AMD.
  • Öppna Inventor , ett gratis, objektorienterat C ++-programbibliotek för att skapa 3D-grafik.
  • OpenAL , ett plattformsoberoende 3D-ljud-API som är ett slags ljudförlängning till OpenGL och är baserat på OpenGL när det gäller struktur, programmeringsstil och namnkonventioner.
  • Simple DirectMedia Layer (SDL), ett plattformsoberoende API för grafik, ljud och inmatningsenheter inklusive OpenGL-specifik funktionalitet.
  • Vulkan , efterträdare till OpenGL.

litteratur

  • Graham Sellers, Richard S. Wright och Nicholas Haemel: OpenGL Superbible: Comprehensive Tutorial and Reference . Addison-Wesley Longman, Amsterdam 2015, ISBN 978-0-672-33747-5 .
  • Lorenz Burggraf: Nu lär jag mig OpenGL. Det enkla inträdet i gränssnittsprogrammering . Markt + Technik, München 2003, ISBN 3-8272-6237-2 .
  • Dave Shreiner, Graham Sellers, John Kessenich och Bill Licea-Kane: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3 . Addison-Wesley Longman, Amsterdam 2013, ISBN 978-0-321-77303-6 .

webb-länkar

Individuella bevis

  1. a b Khronos släpper OpenGL 4.6 med SPIR-V-stöd. I: khronos.org. 31 juli 2017, åtkomst 7 augusti 2021 .
  2. ^ Sgi.com
  3. OpenGL: s historia - OpenGL Wiki. Hämtad 2 mars 2017 .
  4. OpenGL 3.1 -specifikationer (PDF; 2,2 MB)
  5. opengl.org (PDF) OpenGL Core Specification med ändringar markerade
  6. a b c d e f g h opengl.org
  7. opengl.org
  8. OpenGL 3.3 och 4.0 - hejdå DirectX 11? - Artikel på Golem.de , från 11 mars 2010.
  9. on-demand.gputechconf.com (PDF)
  10. khronos.org (PDF)
  11. khronos.org (PDF)
  12. phoronix.com
  13. utvecklare.nvidia.com
  14. opengl.org
  15. on-demand.gputechconf.com
  16. de.slideshare.net
  17. utvecklare.nvidia.com
  18. nvidia.com Källa: Nvidia
  19. Ta Unreal Engine 4 till OpenGL (PDF) Nvidia Developer. Hämtad 24 augusti 2014.
  20. ^ Saker som gör mig galen om OpenGL . Rich Geldreichs techblogg. Hämtad 24 augusti 2014.
  21. ^ OpenGL är trasig . Hämtad 24 augusti 2014.
  22. GTK + OpenGL -tillägg
  23. ^ Alfred Nischwitz, Max Fischer, Peter Haberacker: Datorgrafik och bildbehandling . Andra upplagan. Vieweg-Verlag , 2007, ISBN 978-3-8348-0186-9 , sid.   48 .
  24. core.ac.uk (PDF)
  25. phoronix.com