Per-Vertex-Operationen werden durch Vertex-Shader ersetzt.
Per-Fragment-Operationen und teilweise Pixel-Operationen werden durch Fragment-Shader ersetzt.
Aktivierung per glUseProgram(id)
alle nachfolgenden Renderfunktionen verwenden dann den aktivierten Shader.
Es kann somit auch zur Laufzeit zwischen mehreren Shadern gewechselt werden.
Per-Vertex-Attribute können mittels in-Variablen übergeben werden
Unterscheidung:
spezielle in-Variablen: werden automatisch erzeugt
Vertex- und Instance-ID
benutzerdefinierte in-Variablen: müssen von der Applikation übergeben werden
Farbe, Normale, Texturkoordinaten, offsets
werden als VBO an GPU übergeben
Ablauf
zunächst wird der Lokalisierungskennzeichner (int) der in-Variable abgefragt
int colorLoc = glGetAttribLocation(progID, "inputColor");
anschließend wird Zuordnung zwischen in-Variable und VBO-Daten vorgenommen
schließlich wird das zugewiesene Attribut aktiviert
glEnableVertexAttribArray(colorLoc);
Beim Renderaufruf mit aktiviertem VBO werden die in-Variablen dann entsprechend gefüllt
Unterschied zu in-Variablen:
beinhalten statische Daten, die für alle gezeichneten Stützpunkte im Rendervorgang konstant sind
Ablauf analog zu in-Variablen
erlaubt:
nicht erlaubt:
Zur Anwendung von Beleuchtungsmodellen muss ebenfalls die Normaleninformation des Stützpunktes ins Kamerakoordinatensystem transformiert werden.
Normalen sind Einheitsvektoren, die lediglich rotiert werden sollen (nicht transliert oder skaliert).
texture(myTexture, vec(x,y))
Ablauf: