Wat is een OpenGL®-schaduwtaal?
De OpenGL®-schaduwtaal (GLSL) is een computerprogrammeertaal die specifiek is ontworpen voor het manipuleren en besturen van driedimensionale (3D) grafische afbeeldingen tijdens het renderingproces direct binnen de grafische verwerkingseenheid (GPU) van een grafische kaart met behulp van OpenGL®-bibliotheken. In essentie geeft OpenGL®-schaduwtaal programmeurs directe toegang tot 3D-geometrie en rendering op het laagst mogelijke niveau zonder daadwerkelijk routinetaalroutines te hoeven schrijven om te kunnen communiceren met GPU-hardware. Door het gebruik van de OpenGL®-schaduwtaal kunnen effecten zoals procedureel gegenereerde texturen en geometrie direct binnen de GPU worden geïmplementeerd en geoptimaliseerd, waardoor het renderingproces wordt versneld. Hiermee kunnen ook complexere functies, zoals animatie of speciale effecten, efficiënt worden geïmplementeerd zonder de overhead van code op een hoger niveau. De arceringstaal wordt door de GPU gecompileerd in uitvoerbare code, wat betekent dat specifieke implementaties en compilers kunnen worden ontworpen voor individuele grafische kaarten, waardoor de prestaties van het gebruik van de verschillende shaders worden verbeterd.
Voor alle praktische doeleinden is de OpenGL®-schaduwtaal een volledig geïmplementeerde programmeertaal die de syntaxis van de C-programmeertaal op bijna alle manieren nabootst, met uitzondering van variabelen van het pointertype en enkele richtlijnen van de preprocessor. Door de gebruiker gedefinieerde functies, variabelen en logische vertakkings- en lusinstructies worden allemaal ondersteund, waardoor volledig gerealiseerde programma's met alleen de arceringstaal kunnen worden geschreven en een abstractieniveau biedt dat draagbaar is over verschillende besturingssystemen en hardwareconfiguraties. Nadat een arceringprogramma is voltooid, wordt het doorgegeven aan de GPU, waar het wordt gecompileerd en uitgevoerd zoals nodig tijdens het renderingproces.
Een programma geschreven in de OpenGL® schaduwtaal wordt uiteindelijk doorgegeven aan de GPU, waar het kan worden gecompileerd door hardware of stuurprogramma's geproduceerd door de fabrikant van de grafische kaart. Dit betekent dat bepaalde verklaringen die in de taal worden gebruikt, hun eigen gecompileerde bytecode kunnen optimaliseren om efficiënt te werken met de specifieke hardwarefuncties van een specifieke grafische kaart. Dit verhoogt de snelheid van uitvoering en kan de basisfunctionaliteit uitbreiden met speciale renderingopties en effecten die uniek kunnen zijn voor een enkele grafische kaart.
Er zijn drie soorten shaders waarmee de OpenGL®-shadingtaal kan worden gebruikt om te schrijven. De eerste staat bekend als een hoekpuntshader en is ontworpen om complexe bewerkingen op afzonderlijke hoekpunten uit te voeren, zoals een punt in de ruimte vertalen, schalen of structureren. De tweede is een geometrie-arcering en kan worden gebruikt om polygonen toe te voegen, te verwijderen of anderszins te manipuleren voordat ze uiteindelijk worden gerasterd. Fragment-shaders, ook wel pixel-shaders genoemd, kunnen worden geschreven om bewerkingen op punten in de 3D-scène uit te voeren wanneer ze worden vertaald in een plat tweedimensionaal (2D) beeld voor weergave op een scherm, zoals lichteffecten of vervormingen.