OpenGL

ohjelmointirajapinta
(Ohjattu sivulta OpenGL ES)

OpenGL (Open Graphics Library) on laitteistoriippumaton ohjelmointirajapinta interaktiivisen tietokonegrafiikan tuottamiseen. Se koostuu muutamasta sadasta funktiosta, joita voidaan käyttää monimutkaisten kolmiulotteisten mallien tai yksinkertaisten muotojen piirtämiseen. OpenGL on yleinen tietokoneavusteisessa suunnittelussa (CAD) ja muissa visualisoinneissa. OpenGL on myös käytössä videopeliteollisuudessa, jossa se kilpailee Microsoftin Direct3D:n kanssa.

OpenGL
Kehittäjä Silicon Graphics / Khronos
Kehityshistoria
Ensijulkaisu 1.0 / tammikuu 1992[1]
Vakaa versio 4.6 ()[2]
Tiedot
Alusta useita
Lisenssi useita
Aiheesta muualla
opengl.org

OpenGL on tilakone joka koostuu asiakkaasta (client) ja palvelimesta (server). Asiakas on rakennettu CPU:lla ajettavaan OpenGL-rajapintaan ja palvelin tarkoittaa näytönohjaimen ajurin ohjaamia GPU:n varsinaisia suoritusyksiköitä. Käyttöjärjestelmän OpenGL-pino voi olla näytönohjaimen valmistajan tarjoama (kuten Windowsissa), erillinen komponentti (esimerkiksi Mesa 3D Linuxissa) tai osa käyttöjärjestelmää (OS X).

OpenGL on pelkkä grafiikkakirjasto, eli siltä puuttuu kokonaan esimerkiksi kyky lukea käyttäjän syötettä, hallita ikkunoita, ladata kuvaformaatteja, jne. Näiden asioiden hoitamiseen on tehty useita erillisiä rajapintoja. Näitä ovat mm. GLUT, GLFW, SDL, GLM ja SFML.

Historia muokkaa

Silicon Graphics kehitti ja julkaisi OpenGL:n version 1.0 tammikuussa vuonna 1992 IRIS GL:n korvaajaksi.[1] Tehokkaimmat laitteistotason OpenGL-toteutukset löytyivätkin pitkään SGI:n omista grafiikkatyöasemista. Myöhemmin 3Dlabs vaikutti merkittävästi OpenGL 2.0:aan (2004), joka toi kirjastoon mahdollisuuden käyttää shader-ohjelmia, joihin moderni grafiikkaohjelmointi laajalti perustuu (alkeellinen shader-tuki oli olemassa jo OpenGL 1.4:ssä laajennusten kautta). Syyskuussa 2006 OpenGL:n päävastuu siirtyi SGI:ltä Khronos Groupin alaisuuteen.

OpenGL:ää on pidetty hyvin suunniteltuna ja se on pysynyt pitkiä aikoja samanlaisena. Suurimmat muutokset ovat olleet 2.0:n tuoma uusi lähestymistapa ja 3.x-versioissa vanhojen toiminnallisuuksien karsiminen (deprekointi). OpenGL 4.5 julkaistiin 11. elokuuta 2014.[3] OpenGL 4.6 julkaistiin heinäkuussa 2017 ja sisälsi SPIR-V-tuen.[4] Uusien grafiikkakorttien ominaisuuksiin, joita ei vielä ole sisällytetty OpenGL:ään, pääsee käsiksi OpenGL:n laitteistokohtaisilla laajennuksilla (extensions). Niitä käyttämällä laitteistoriippumattomuus kuitenkin menetetään.

Apple on merkinnyt OpenGL ja OpenCL tuen vanhentuneeksi macOS Mojave- ja iOS 12-versioista lähtien tavoitteena siirtää ohjelmointi Applen omalle Metal-rajapinnalle.[5] Mesa 3D:n Zink-kerroksen avulla OpenGL on mahdollinen Vulkan-rajapinnan päällä.[6] Vulkan-tuki on mahdollinen macOS:llä MoltenVK-kirjaston avulla.[7]

Varjostimet muokkaa

Varjostimet ovat näytönohjaimessa ajettavia ohjelmia jotka mahdollistavat grafiikan manipuloinnin erittäin korkealla suorituskyvyllä. Varjostimia ajetaan useita rinnakkain ja niille voidaan kuljettaa erilaisia parametreja pääohjelmasta. Kulmapistevarjostin muokkaa kulmapisteitä halutuilla laskutoimituksilla ja pikselivarjostin muokkaa rasteroidun pikselin arvoa. OpenGL sisältää OpenGL Shading Language (GLSL) -kielen, joka syntaksiltaan muistuttaa C-ohjelmointikieltä, joskin yksinkertaisempana. Varjostimet kääntyvät "lennossa" OpenGL-ajurilla silloin, kun ne halutaan ottaa käyttöön.

OpenGL ES muokkaa

OpenGL ES (Embedded Systems) on sulautetuille järjestelmille räätälöity pelkistetty toteutus OpenGL:stä. Se mahdollistaa yksinkertaisemman näytönohjainpiirin suunnittelun, joka auttaa pienentämään virrankulutusta ja vähentämään laitteen hintaa. OpenGL ES:ää käytetään esimerkiksi älypuhelimissa, tableteissa, kannettavissa pelikoneissa ja monissa muissa kohteissa jossa täysveristä OpenGL-toteutusta ei tarvita. OpenGL ES:lle kirjoitettu koodi on yhteensopivaa tavallisen OpenGL:n kanssa.

OpenGL SC muokkaa

OpenGL SC (Safety Critical) on turvakriittisiin järjestelmiin suunnattu versio, joka pohjautuu OpenGL ES:ään.[8] SC-versio sertifioi osan OpenGL ES:stä käytettäväksi DO178-B (ilmailu), ISO-26262 (autoteollisuus) ja ISO 61508 (teollisuusautomaatio) -standardoiduissa kohteissa.[9] SC-versiosta on poistettu ES-version toimintoja, jotka eivät ole yhteensopivia deterministisien turvakriittisten järjestelmien tarpeiden kanssa.[8] Vulkan SC on Vulkaniin perustuva seuraaja.[10]

Esimerkki muokkaa

OpenGL-esimerkki, joka piirtää polygonin näytölle. Huomaa, että ikkunointijärjestelmän käyttö on GLUT-kirjastoa apuna käyttäen eikä osa OpenGL:ää.[11]

#include <GL/glut.h>
#include <stdlib.h>

/* alustustoimintoja */
void init(void)
{
     glClearColor(0.0, 0.0, 0.0, 0.0); /* tyhjennysväri (taustaväri) */
     glMatrixMode(GL_PROJECTION);
     glLoadIdentity();
     glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

/* piirtää valkoisen neliön */
void display(void)
{
     glClear(GL_COLOR_BUFFER_BIT);
     glColor3f(1.0, 1.0, 1.0);
     glBegin(GL_POLYGON);
         glVertex3f(0.25, 0.25, 0.0);
         glVertex3f(0.75, 0.25, 0.0);
         glVertex3f(0.75, 0.75, 0.0);
         glVertex3f(0.25, 0.75, 0.0);
     glEnd();
     glFlush();
}

int main(int argc, char **argv)
{
     glutInit(&argc, argv);
     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
     glutInitWindowSize(250, 250);
     glutInitWindowPosition(100, 100);
     glutCreateWindow("hello");
     init();
     glutDisplayFunc(display);
     glutMainLoop();
     return 0;
}

Katso myös muokkaa

Lähteet muokkaa

  1. a b Graham Singer: The History of the Modern Graphics Processor 27.3.2013. Techspot. Viitattu 8.6.2018.
  2. https://www.khronos.org/news/press/khronos-releases-opengl-4.6-with-spir-v-support. Tieto on haettu Wikidatasta.
  3. What's New in OpenGL 4.5 opengl.org. 11.8.2014. OpenGL. Arkistoitu 1.7.2017. Viitattu 17.2.2015. (englanniksi)
  4. Khronos Releases OpenGL 4.6 with SPIR-V Support khronos.org. 31.7.2017. Viitattu 2.12.2020. (englanniksi) 
  5. The end of OpenGL support, plus other updates Apple didn’t share at the keynote arstechnica.com. 6.6.2018. Viitattu 2.12.2020. (englanniksi) 
  6. Zink seeing macOS support for OpenGL on Vulkan then MoltenVK on metal – Phoronix oltnews.com. 2020. Viitattu 2.12.2020. (englanniksi) 
  7. Vulkan is coming to macOS and iOS, but no thanks to Apple 26.2.2018. Ars Technica. Viitattu 27.2.2018.
  8. a b OpenGL SC (PDF) 19.4.2016. Khronos. Viitattu 14.8.2018.
  9. OpenGL SC (PDF) kdab.com. Viitattu 14.8.2018.
  10. Vulkan SC Overview khronos.org. Viitattu 2.12.2020. (englanniksi) 
  11. Woo, Mason & Neider, Jackie & Davis, Tom & Shreiner, Dave: OpenGL Programming Guide, s. 18–19. Third Edition. Addison-Wesley, 1999. ISBN 0201604582.

Kirjallisuutta muokkaa

Aiheesta muualla muokkaa

 
Commons
Wikimedia Commonsissa on kuvia tai muita tiedostoja aiheesta OpenGL.