Mis on OpenGL®-i varjutuskeel?

OpenGL®-i varjutuskeel (GLSL) on arvutiprogrammeerimiskeel, mis on loodud spetsiaalselt kolmemõõtmelise (3D) graafika manipuleerimiseks ja juhtimiseks renderdamisprotsessi ajal otse graafikakaardi graafilises töötlusüksuses (GPU), kasutades OpenGL®-i teeke. Põhimõtteliselt annab OpenGL®-i varjutuskeel programmeerijatele otsese juurdepääsu 3D-geomeetriale ja renderdamisele madalaimal võimalikul tasemel, ilma et peaks GPU riistvaraga liidestamiseks tegelikult koostama montaažikeele rutiine. OpenGL®-i varjutuskeele abil saab selliseid efekte nagu protseduuriliselt loodud tekstuurid ja geomeetria rakendada ja optimeerida otse GPU-s, mis kiirendab renderdusprotsessi. Samuti võimaldab see tõhusalt rakendada keerukamaid funktsioone, nagu animatsioon või eriefektid, ilma kõrgema taseme koodita. Varjutuskeele kompileerib GPU käivitatavaks koodiks, mis tähendab, et üksikute graafikakaartide jaoks saab kujundada konkreetsed teostused ja kompilaatorid, suurendades erinevate varjutajate kasutamisest tulenevat jõudluse kasvu.

Kõigil praktilistel eesmärkidel on OpenGL®-i varjutuskeel täielikult rakendatud programmeerimiskeel, mis jäljendab C-programmeerimiskeele süntaksit peaaegu igal viisil, välja arvatud osuti tüüpi muutujad ja mõned eelprotsessori direktiivid. Kasutaja määratletud funktsioonid, muutujad ning loogilised hargnemis- ja silmuslaused on kõik toetatud, võimaldades täielikult realiseeritud programme kirjutada ainult varjundikeelega ja pakkudes abstraktsioonitaset, mis on kaasaskantav erinevates operatsioonisüsteemides ja riistvarakonfiguratsioonides. Kui varjutusprogramm on lõpetatud, edastatakse see GPU-le, kus see koostatakse ja renderdamisprotsessi käigus vajadusel käivitatakse.

OpenGL®-i varjutuskeeles kirjutatud programm edastatakse lõpuks GPU-le, kus seda saab kompileerida graafikakaardi tootja toodetud riistvara või draiverite abil. See tähendab, et teatud keeles kasutatavate lausete tegelik kompileeritud baitkood on optimeeritud, et need töötaksid tõhusalt konkreetse graafikakaardi konkreetsete riistvarafunktsioonidega. See suurendab täitmise kiirust ja võib laiendada põhifunktsioone, et hõlmata spetsiaalseid renderdussuvandeid ja efekte, mis võivad olla ainulaadsed ühele graafikakaardile.

On kolme tüüpi varjutajaid, mille kirjutamiseks saab kasutada OpenGL®-i varjutuskeelt. Esimest tuntakse tipuvarjutajana ja see on mõeldud üksikute tippudega keerukate toimingute tegemiseks, nagu ruumipunkti transleerimine, skaleerimine või tekstureerimine. Teine on geomeetriavarjutaja ja seda saab kasutada hulknurkade lisamiseks, eemaldamiseks või muul viisil manipuleerimiseks enne, kui need lõpuks rasterdatakse. Fragmentide varjutajaid, mida nimetatakse ka pikslivarjutajateks, saab kirjutada 3D-stseeni punktidega toimingute tegemiseks, kuna need tõlgitakse ekraanil kuvamiseks lamedaks kahemõõtmeliseks (2D) kujutiseks (nt valgusefektid või moonutused).