OpenGL

OpenGL (Open Graphics Library) on standardne kirjeldus, mis defineerib mitmekeelse, mitmeplatvormilise programmiliidese (API) 2D- ja 3D-arvutigraafikat kuvavate rakenduste loomiseks. See liides koosneb rohkem kui 250 funktsiooni väljakutsest, mida saab kasutada lihtsate geomeetriliste primitiivide muutmisel keerukateks kolmedimensioonilisteks kujutisteks. OpenGL-i töötas 1992. aastal välja Silicon Graphics Inc. ning seda kasutatakse laialdaselt CAD-is, virtuaalreaalsuses, teaduslikus visualiseerimises, lennusimulatsioonides ja videomängudes. OpenGL-i haldab mittetulunduslik tehnoloogiakonsortsium Khronos Group.

Laiendused

OpenGL-i standard lubab üksikutel tootjatel laienduste kaudu lisada tehnoloogia arenedes täiendavaid funktsioone. Laiendustega võivad kaasneda uued funktsioonid ja konstandid ning need võivad juba olemasolevate OpenGL-i funktsioonide piiranguid vähendada või ära kaotada. Igal tootjal on oma tähtedest koosnev lühend, mida kasutatakse tema poolt loodud uute funktsioonide ja konstantide nimetamisel. Näiteks Nvidia lühendit NV kasutatakse nende loodud suletud funktsioonide (glCombinerParameterfvNV()) ja konstantide (GL_NORMAL_MAP_NV) defineerimiseks.
Kui juhtub, et rohkem kui üks tootja nõustub sama laiendatud funktsioonivalikut rakendama, siis kasutatakse lühendit EXT. Võib ka nii juhtuda, et Architecture Review Board ülendab mingit laiendust; sel juhul hakatakse seda kutsuma standardlaienduseks ja kasutatakse lühendit ARB. Esimeseks ARB laienduseks oli GL_ARB_multitexture, mis lasti välja versioonis 1.2.1. Nüüdseks pole GL_ARB_multitexture enam valikuliselt implementeeritud ARB laiendus, vaid on olnud OpenGL-i programmiliidese põhiosas alates versioonist 1.3.
Enne laienduse kasutamist peab programm kindlaks tegema selle olemasolu ja seejärel kätte saama viidad uutele funktsioonidele, mida laiendus defineerib. See protsess on platvormispetsiifiline ning selle lihtsustamiseks on loodud teegid, näiteks GLEW ja GLEE.
Peaaegu kõikide laienduste spetsifikatsioone võib leida ametlikust laienduste registrist.

Ajalugu

1980. aastatel oli küllaltki keeruline kirjutada tarkvara, mis toimiks paljudel erinevatel graafikariistvaradel. Arendajad pidid looma igale riistvarajupile oma kohandatud liidesed ja draiverid, mis oli aga aeganõudev ning majanduslikult kallis.
1990. aastate algul oli Silicon Graphics (SGI) juhtiv tööjaamade 3D-graafikas. Tema IRIS GL-i programmiliidest peeti tipptasemeliseks ning temast sai tööstuse de facto standard. IRIS GL oli üle avatud standarditel põhinevast PHIGS-ist, sest seda peeti kergemini kasutatavaks ja see toetas kohese režiimiga renderdamist. Sellele vastupidiselt peeti PHIGS-i raskesti kasutatavaks ja funktsioonivaliku poolest iganenuks.
SGI rivaalid (nagu Sun Microsystems, Hewlett-Packard ja IMB), toetudes PHIGS-i standardile tehtud laiendustele, suutsid samuti 3D-riistvara turule tuua. See omakorda nõrgendas SGI turuosa, kuna üha rohkem 3D-graafika riistvara tarnijaid hakkas turule tulema. Püüdes turgu mõjutada, otsustas SGI muuta IrisGL API avatud standardiks.
SGI hinnangul ei olnud IrisGL API ise avamiseks sobiv, kuna sel oli probleeme litsentseerimise ja patendiga. Lisaks olid IrisGL-il API funktsioonid (näiteks akendamine, klaviatuuri ja hiire API), mis polnud 3D-graafika jaoks vajalikud.
Kõigele lisaks oli SGI-l suur hulk tarkvarakliente, keda nad kavatsesid hoida OpenGL API-ks muutmisega mõned aastad lukustatuna SGI (ja IBM-i) riistvara küljes, vähemalt seni, kuni turutoetus OpenGL-ile kasvas. Samal ajal proovis SGI oma kliente edasi oma riistvara peal hoida Iris Inventor ja Iris Performer programmeerimise API-de arendamisega.
Selle tulemisena andis SGI välja OpenGL standardi.
OpenGL standardiseeris ligipääsu riistvarale, lükkas riistvara liidestamisprogrammide draiverite arenduskohustuse riistvaratootjatele ja delegeeris akendamisfunktsioonid alusoperatsioonisüsteemile. Kõigi erinevate riistvara liidestamisprogrammide sel moel sama keelt rääkima saamisel oli märkimisväärne mõju – see andis tarkvara arendajatele kõrgematasemelise platvormi 3D-tarkvara arendamiseks.
1992. aastal juhtis SGI OpenGL ARB loomist, mis on grupp firmasid, mis säilitaksid ja laiendaksid tulevatel aastatel OpenGL spetsifikatsiooni. OpenGL arenes SGI varasemast 3D-liidesest IrisGL-ist (ja on selle stiiliga väga sarnane). Üheks IrisGL-i puuduseks oli, et ta tagas juurdepääsu vaid neile funktsioonidele, mida alusriistvara toetas; teisi funktsioone, mida riistvara ei toetanud, ei saanud kasutada. OpenGL ületas selle probleemi, tagades tarkvaraliselt neid funktsioone, mida riistvara ei toetanud, mis lasi rakendustel kasutada arenenud graafikat suhteliselt madala võimsusega süsteemides.
1994. aastal mõeldi OpenGL++-i väljalaskmise peale, kuid seda ideed ei tehtud kunagi teoks.
1995. aastal lasi Microsoft välja Direct3D, millest kujunes OpenGL-i peamine konkurent. 17. detsembril 1997 alustasid Microsoft ja SGI Fahrenheiti projekti, mis oli nende ühine püüe OpenGL-i ja Direct3D liideste ühendamiseks . Hewlett-Packard ühines projektiga 1998. aastal, kuid SGI finantspiirangute ja Microsofti strateegiliste põhjuste ning üldise tööstuse toetuse puudumise tõttu loobuti sellest ideest 1999. aastal.
31. juulil 2006 teatati, et OpenGL spetsifikatsiooni haldamine antakse üle Khronose grupile.

OpenGL 1.0

Lasti välja 1. juulil 1992.

OpenGL 1.1

Lasti välja 1997.
Versioon 1.1 oli tagasiühilduv versiooni 1.0, mis tähendas, et kõik OpenGL 1.0 spetsifikatsiooni järgi teostatud programmid toimisid muutmata kujul ka 1.1 spetsifikatsiooni järgi. GL-ile lisati palju uusi võimalusi, eriti tekstuuri vastendamiseks, aga ka geomeetria ja fragmentidega töötamiseks.

OpenGL 1.2

Lasti välja 16. märtsil 1998.
Versioon 1.2 oli tagasiühilduv versiooniga 1.1. Selle versiooniga lisati GL-ile mitmeid uusi võimalusi, eriti tekstuuri vastendamiseks ja pikslitöötluskonveierile.

OpenGL 1.2.1

Lasti välja 14. oktoobril 1998.
Tõi sisse ARB laienduste kontseptsiooni. Ainuke selles versioonis defineeritud ARB laiendus oli multitekstuur, mis võimaldas ühe renderduskorraga fragmendile mitut tekstuuri rakendada.

OpenGL 1.3

Lasti välja 14. augustil 2001.
Oli tagasiühilduv kõigi varasemate OpenGL versioonidega. GL-ile lisati mitmeid uusi võimalusi, eriti eelnevalt defineeritud ARB tekstuuri vastendamise laiendusele.

OpenGL 1.4

Lasti välja 24. juulil 2002.
Oli tagasiühilduv kõigi varasemate OpenGL versioonidega. Lisaks paljudele klassikalise fikseeritud funktsioonidega GL konveieri lisavõimalustele, sisaldas versioon 1.4 ka OpenGL ARBi poolt heakskiidu saanud GL_ARB_vertex_program laiendust, mis toetas programmeeritavat otspunktide (vertex) töötlemist.

OpenGL 1.5

Lasti välja 29. juulil 2003.
Oli tagasiühilduv kõigi varasemate OpenGL versioonidega. OpenGL 1.5 tõi endaga kaasa lisavõimalusi klassikalise fikseeritud funktsioonidega GL konveierile ja ARB laienduste kogu, mis sisaldas muuhulgas ka varjustamiskeele GLSL (OpenGL Shading Language) spetsifikatsiooni, GL_ARB_shader_object, GL_ARB_vertex_shader ja GL_ARB_fragment_shader laiendusi, mille abil sai fikseeritud funktsioonidega konveieri asemel kasutada kõrgtasemelist varjustamiskeelt.

OpenGL 2.0

Lasti välja 7. septembril 2004.
Oli tagasiühilduv kõigi varasemate OpenGL versioonidega. OpenGL 2.0 toetas kõrgtasemel programmeeritavaid varjutajaid.

OpenGL 2.1

Lasti välja 2. juulil 2006.
Oli tagasiühilduv kõigi varasemate OpenGL versioonidega. OpenGL 2.0 toetas kõrgtasemel programmeeritavaid varjutajaid. Sisaldas eelmise versiooni parandusi ja mõningaid muudatusi.

OpenGL 3.0

Kasutades versiooni 3.0 täielikku konteksti, oli OpenGL 3.0 tagasiühilduv varasemate GL-i versioonidega. OpenGL 3.0 ettepoole ühilduvat konteksti kasutades polnud paljud OpenGL 2.1-s olevad võimalused kättesaadavad.

OpenGL 3.1

Lasti välja 24. märtsil 2009.
Erinevalt eelmistest versioonidest, pole OpenGL 3.1 tagasiühilduv vanemate variantidega. Versiooni 3.0 käsud ja liidesed, mis leiti olevat ebasoovitatavad, eemaldati sellest GL-i variandist. Ühilduvuse taastamiseks, kui seda vaja läheb, lisati uus laiendus GL_ARB_compatibility. See laiendus tohib esineda ainult 3.1 ja sellest uuemates versioonides.

OpenGL 3.2

Lasti välja 3. augustil 2009.
OpenGL 3.2 spetsifikatsioonist on kaks versiooni: tuumik- ja ühilduvusprofiil. Tuumikprofiil on tagasiühilduv ainult versiooniga 3.1. Ühilduvusprofiil tagab tagasiühilduvuse kõige vanemate GL-versioonidega ja asendab versioonis 3.1 sisse toodud GL_ARB_compatibility laienduse.

OpenGL 3.3

Lasti välja 11. märtsil 2010.
OpenGL 3.3 spetsifikatsioonist on kaks versiooni: tuumik- ja ühilduvusprofiil. Mõlemad profiilid on tagasiühilduvad 3.2 versiooni vastavate profiilidega. Tõi GLSL versiooni 3.30 toe ja uusi laiendusi.

OpenGL 4.0

Lasti välja 11. märtsil 2010.
OpenGL 4.0 spetsifikatsioonist on kaks versiooni: tuumik- ja ühilduvusprofiil. Mõlemad porfiilid on tagasiühilduvad versiooni 3.3 vastavate profiilidega. Tõi GLSL versiooni 4.00 toe ja uusi laiendusi.

OpenGL 4.1

Lasti välja 26. juulil 2010.
OpenGL 4.1 spetsifikatsioonist on kaks versiooni: tuumik- ja ühilduvusprofiil. Mõlemad on tagasiühilduvad versiooni 4.0 vastavate profiilidega. Versioon 4.1 tõi uusi laiendusi ja täiustatud ühilduvuse OpenGL ES 2.0-ga, lisades OpenGL-ile OpenGL ES 2.0 omadusi, mida versioon 4.0 ei sisaldanud.

OpenGL 4.2

Lasti välja 8. augustil 2011. OpenGL 4.2 spetsifikatsioonist on kaks versiooni: tuumik- ja ühilduvusprofiil. Mõlemad on tagasiühilduvad versiooni 4.1 vastavate profiilidega. Versioon 4.2 tõi uusi laiendusi ja võimalusi.
Kõikide versioonide kirjeldused on saadaval OpenGL-i dokumentatsioonis.'
OpenGL 4.5
Lasti välja 11. augustil 2014.