**OpenGL** (*Open Graphics Library*) er en API-spesifikasjon for utvikling av 2D- og 3D-datagrafikk. Formålet med OpenGL er, i likhet med Direct3D, å skjule kompleksiteten ved å kommunisere med ulike skjermkort. OpenGL er plattformuavhengig og fungerer på blant annet Apple Macintosh, Linux, Solaris, Windows og PlayStation.

OpenGL ble laget av Silicon Graphics i 1992, står for Open Graphics Library, og er basert på et eldre grafikkbibliotek ved navn IRIS GL, laget av det samme selskapet. OpenGL er ikke en implementasjon, men en spesifikasjon, det vil si at OpenGL i seg selv, kun er en oppskrift på hvordan man skal lage et grafikk-API, uten vekt på om det skal være nødvendig med hardware akselerasjon, eller om det skal kjøre på ren software. I tillegg skal det være like egnet til 2D-grafikk, som 3D-grafikk, selv om dette ikke er tilfellet i praksis da OpenGl sjelden blir brukt til ren 2D-grafikk.

OpenGL i Windows
----------------

I Windows til og med XP, er OpenGL 1.1 implementert i software. Det vil si at hvis OpenGL hardware ikke er tilgjengelig, vil OpenGL kun bruke prosessoren til å tegne grafikk, og kun OpenGL 1.1-funksjoner vil være tilgjengelig. I Windows Vista er OpenGL 1.4 implementert software. Intels Windows-drivere for Haswell-baserte grafikkort støtter versjoner 4.2 og utover.

OpenGL-utvidelser
-----------------

OpenGL bruker et utvidelsessystem kalt extensions. Dette gjør at OpenGL lett kan utvides med funksjoner som implementasjonen støtter, uten at brukeren trenger å oppgradere OpenGL. OpenGL-utvidelser begynner med bokstavene GL, deretter fulgt av en understrek, og koden til utvikleren. For Nvidia er dette NV, for ATI er det ATI, og for Architecture Review Board, ARB. Generelt støttede utvidelser får navnet EXT.
Et eksempel på dette kan være utvidelsen
`GL_EXT_TEXTURE_3D`
Denne utvidelsen muliggjør teksturer med tre dimensjoner.
Utvidelser hentes på forskjellig måte i forskjellig operativsystemer. I Windows bruker man en funksjon ved nanv wglGetProcAddress som henter en peker til en funksjon gitt ved navn, for eksempel
`GLTEXIMAGE3DEXTPROC glTexImage3D = (GLTEXIMAGE3DEXTPROC)wglGetProcAddress("glTexImage3DEXT");`
Først må man sjekke om utvidelsen er støttet. Den eneste måten å gjøre det på, er å hente ut en streng med tekst som inneholder alle støttede utvidelser, adskilt med mellomrom ved hjelp av glGetString-funksjonen.
`char* supported_ext = glGetString(GL_EXTENSIONS);`
Deretter må man lete etter utvidelsen i denne teksten.

OpenGL i bruk
-------------

OpenGL ble før mye brukt til CAD-programmer og lignende. Dette gjelder også den dag i dag, selv om Direct3D har tatt over stadig mer av markedet. OpenGL er strengt prosedyrebasert, men en halvveis objektorientert form (gjennom vanlige prosedyrer) har blitt mer vanlig i det siste, blant annet med GL\_ARB\_shader\_objects-utvidelsen som kom i OpenGL 1.5. OpenGL er et API som er forholdsvis lett å lære seg, men siden det er veldig grunnleggende krever det mye jobb for å lage en effektiv grafikkmotor. I motsetning til OpenGL, er Direct3D objektorientert, og alle klasser man trenger følger med. 

OpenGL krever at brukeren har tilgang til pekere, noe som kan gjøre bruken av teksturer eller Vertex Array utfordrende i enkelte språk, dog sjelden umulig. Fordelen med OpenGLs funksjon, er at alt den går ut ifra at implementasjonen er skrevet i C, som er støttet av nær sagt alle eksterne språk. Dette har gjort at såkalte wrappers, eller implementeringer av OpenGL, har skjedd i nærmest alle språk, i motsetning til Direct3D, som krever at programmet skrives enten i C++, eller et av .NET-språkene ved bruk av Managed DirectX. Visual Basic 6.0 hadde også et eget Direct3D-bibliotek.

Versjoner
---------

Open GL 1.x
Den første versjonen (1.0) ble lansert i januar 1992. OpenGL 1.1 ble offentliggjort en 4. mars 1997. Siste utgave av 1-serien (ver. 1.5) fant sted den 29. juli 2003.

Open GL 2.x
OpenGL 2.0 ble gjort offentlig den 7. september 2004. Siste versjon i serien var 2.1 fra juli 2006.

Open GL 3.x
OpenGL 3.0 ble annonsert den 9. september 2007 og var ganske omstridt, siden den bygget på en helt ny arkitektur. Den 30. oktober kunngjorde Khronos-gruppen at lanseringen var utsatt. Den ble endelig presentert den 11. august 2008. Siste versjon var 3.3 fra 11. mars 2010.

Open GL 4.x
OpenGL 4.0 ble offentlig den 11. mars 2011. Spesifikasjonen dekker maskinvare som støtter Direct 3D opp til versjon 11. Versjon 4.4 støttes av Nvidia GeForce 400-serien og nyere, og av AMD Radeon HD 5000-serien og nyere.

Per august 2016 er siste utgave versjon 4.5. På dette tidspunktet omfatter den grafikkortene i Nvidia GeForce 400-serien og nyere, samt Tegra K1 og Tegra X1 fra samme produsent.

Vulkan

Utdypende artikkel: Vulkan (API)

Vulkan (tidligere kalt GL Next, også kalt OpenGL Vulkan) er et initiativ for å gjenforene Open GL- og Open GL ES-spesifikasjonene med et felles programmeringsgrensesnitt (API), og den første versjonen ble lansert den 16. februar 2016. Denne versjonen er ikke bakoverkompatibel med OpenGL.

Referanser
----------

1. ↑  .
2. ↑  .

Eksterne lenker
---------------

* (en) Offisielt nettsted Rediger på Wikidata

* (en) OpenGL – kategori av bilder, video eller lyd på Commons Rediger på Wikidata

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | Encyclopædia Britannica **·** NKC
 |