PROGRAMIRLJIVO GRAFIČKO SKLOPOVLJE |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Jezici više razine |
|||||||||||
|
Prvi
jezik više razine je napravila tvrtka Microsoft.
Postoji
još jedan jezik visoke razine – GLSL (OpenGL Shading
Language).
Cg Kao što se vidi sa slike 4, Cg koristi barem dvije biblioteke funkcija: jednu koja služi za rad s operacijskim sustavom, a druga s grafičkim.
Vrlo je sličan C-u, samo što sadrži dodatke za vezivanje varijabli uz registre. Zbog memorijske ograničenosti, osim C načina prenošenja parametara u funkcije, podržava i VHDL pristup (in i out). Uz osnovne tipove podataka (nema char, a double je ustvari float) ima vektorske (float2 itd.) i matrične (float 2x2 itd). Ugrađene funkcije su preopterećene tako da rade sa skoro svim tipovima (gdje to ima smisla). Elementima vektorskih tipova se pristupa pomoću sufiksa RGBA ili XYZW ili STPQ (npr. float3 a; a.y = 5;). Oznake iz različitih grupa sufiksa ne smiju se miješati u istom izrazu uz istu varijablu.
Primjer:
struct
str {
float4
funkcija(float p1, out float4 p2) {
float4
main(str struktura) : POSITION {
GLSL
Problem kod Cg-a je taj što se uz grafičku aplikaciju moraju distribuirati i biblioteke funkcija što može dovesti do nekih problema. Drugi problem je eksplicitno vezivanje varijabli uz registre. Treći problem je što se razni pomoćni parametri između programa za sjenčanje vrhova i programa za sjenčanje fragmenata ne mogu prenositi direktno, nego se obično prenose preko neiskorištenih registara za adresiranje tekstura. Kako se GLSL kod prevodi u upravljačkim programima, nema potrebe za bibliotekama funkcija. Rezultati izračuna u GLSL-u se ne moraju (niti mogu) eksplicitno vezivati uz registre, već se oni prenose preko ugrađenih varijabli.
Ostali parametri se mogu prenositi direktno, a ne preko neiskorištenih registara za adresiranje tekstura (varijable koriste određene kvalifikatore – uniform, attribute i varying). Svi ostali elementi Cg-a i GLSL-a su vrlo slični.
Primjer: varying vec3 color;
void
main() { varying vec3 color;
void
main() { |
||||||||||