PROGRAMIRLJIVO  GRAFIČKO  SKLOPOVLJE

Jezici više razine

Naslovna stranica

Uvod

Neprogramirljivo grafičko sklopovlje

Programirljivo grafičko sklopovlje

Asembler

Jezici više razine

Programski alati

Programski primjeri

Programski zadatak

Zaključak



Prvi jezik više razine je napravila tvrtka Microsoft.
Jezik se zove HLSL (High Level Shading Language) i radi samo s Microsoft DirectX-om.
Tvrtka NVIDIA je nakon toga dodala podršku za OpenGL i nazvala ga Cg (C for graphics).
HLSL i Cg su sintaksno kompatibilni (Cg ima neke dodatke koji se vrlo rijetko koriste).

Postoji još jedan jezik visoke razine – GLSL (OpenGL Shading Language).
Trenutno najnapredniji jezik je GLSL, ali je u praksi najkorisniji Cg.



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.



Slika 4: Korištenje Cg-a iz grafičke aplikacije.


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 poz : POSITION;
    float4 boja : COLOR;
}:

float4 funkcija(float p1, out float4 p2) {
    p2 = float4(p1);
    return p2 * 2;
}

float4 main(str struktura) : POSITION {
    float4 temp = struktura.poz;
    return funkcija(3, temp);
}



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.



Slika 5: Korištenje GLSL programa
u grafičkoj aplikaciji.


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() {
    color = vec3(1.0, 1.0, 1.0);
    gl_Position = gl_ModelViewProjectionMatrix *
                  gl_Vertex;
}

varying vec3 color;

void main() {
    gl_FragColor = vec4(color, 1.0);
}

FER / ZEMRIS / RG / PDF