glUniform: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Delphi-Spezifikation: Zeilen umgebrochen da bei 1024 Breite überlauf der Seite)
K (Kategorie GL3 hinzugefügt)
Zeile 185: Zeile 185:
  
 
[[Kategorie:GL|Uniform]]
 
[[Kategorie:GL|Uniform]]
 +
[[Kategorie:GL3]]

Version vom 15. Juni 2011, 21:00 Uhr

glUniform

Name

glUniform1f, glUniform2f, glUniform3f, glUniform4f,
glUniform1i, glUniform2i, glUniform3i, glUniform4i,
glUniform1fv, glUniform2fv, glUniform3fv, glUniform4fv,
glUniform1iv, glUniform2iv, glUniform3iv, glUniform4iv,
glUniformMatrix2fv, glUniformMatrix3fv, glUniformMatrix4fv - Geben den Wert einer Uniform-Variable für das aktuelle Programmobjekt an.

Delphi-Spezifikation

procedure glUniform1f(location : GLint; 
                            v0 : GLfloat);

procedure glUniform2f(location : GLint; 
                            v0 : GLfloat; v1 : GLfloat);

procedure glUniform3f(location : GLint; 
                            v0 : GLfloat; v1 : GLfloat; v2 : GLfloat);

procedure glUniform4f(location : GLint; 
                            v0 : GLfloat; v1 : GLfloat; v2 : GLfloat; v4 : GLfloat);

procedure glUniform1i(location : GLint; 
                            v0 : GLint);

procedure glUniform2i(location : GLint; 
                            v0 : GLint; v1 : GLint);

procedure glUniform3i(location : GLint; 
                            v0 : GLfloat; v1 : GLint; v2 : GLint);

procedure glUniform4i(location : GLint; 
                            v0 : GLint; v1 : GLint; v2 : GLint; v4 : GLint);



Parameter

location Gibt den Speicherort der Uniform-Variable an, die verändert werden soll.
v0, v1, v2, v3 Geben die neuen Werte für die zu verändernde Varibale an.



Delphi-Spezifikation

procedure glUniform1fv(location : GLint; count : GLsizei; const value : PGLfloat);

procedure glUniform2fv(location : GLint; count : GLsizei; const value : PGLfloat);

procedure glUniform3fv(location : GLint; count : GLsizei; const value : PGLfloat);

procedure glUniform4fv(location : GLint; count : GLsizei; const value : PGLfloat);

procedure glUniform1iv(location : GLint; count : GLsizei; const value : PGLint);

procedure glUniform2iv(location : GLint; count : GLsizei; const value : PGLint);

procedure glUniform3iv(location : GLint; count : GLsizei; const value : PGLint);

procedure glUniform4iv(location : GLint; count : GLsizei; const value : PGLint);



Parameter

location Gibt den Speicherort der Uniform-Variable an, die verändert werden soll.
count Gibt die Anzahl der Elemente an, die verändert werden sollen. Sollte 1 sein, wenn die angesteuerte Uniform-Variable kein Array ist, und 1 oder höher, wenn es sich um ein Array handelt)
value Gibt einen Pointer auf ein Array mit count Werten an, das verwendet wird, um die gegebene Uniform-Variable zu aktualisieren.



Delphi-Spezifikation

procedure glUniformMatrix2fv(location    : GLint; 
                             count       : GLsizei; 
                             transpose   : GLboolean; 
                             const value : PGLfloat);

procedure glUniformMatrix3fv(location    : GLint; 
                             count       : GLsizei; 
                             transpose   : GLboolean; 
                             const value : PGLfloat);

procedure glUniformMatrix4fv(location    : GLint; 
                             count       : GLsizei; 
                             transpose   : GLboolean; 
                             const value : PGLfloat);


Parameter

location Gibt den Speicherort der Uniform-Variable an, die verändert werden soll.
count Gibt die Anzahl der Matrizen an, die verändert werden sollen. Sollte 1 sein, wenn die angesteuerte Uniform-Matrixvariable kein Array ist, und 1 oder höher, wenn es sich um ein Array, also mehrere Matrizen, handelt)
transpose Gibt an, ob die Matrix transponiert werden soll, wenn die Werte in die Uniform-Variable geladen werden.
value Gibt einen Pointer auf ein Array mit count Werten an, das verwendet wird, um die gegebene Uniform-Variable zu aktualisieren.

Beschreibung

glUniform modifiziert den Wert einer Uniform-Variable oder eines Uniform-Arrays. Der Ablageort der zu verändernden Uniform-Variable wird mit location angegeben, das einen von glGetUniformLocation zurückgelieferten Wert zugewiesen bekommen sollte. glUniform arbeitet mit dem Programmobjekt, das durch den Aufruf von glUseProgram aktuell ist.

Die Befehle glUniform{1|2|3|4}{f|i} werden verwendet, den Wert der durch location angegebenen Uniform-Variable zu verändern. Die im Befehl spezifizierte Nummer sollte der Anzahl der Komponenten im Datentyp der Uniform-Variable entsprechen (z.B. 1 für GLfloat, GLint, GLboolean; 2 für vec2, ivec2, bvec2; etc.). Das Suffix f gibt an, dass Fließkomma-Werte eingeben werden müssen. Das Suffix i gibt an, dass Integer-Werte eingegeben werden müssen. Die i-Versionen dieser Funktion sollten verwendet werden, um Uniform-Variablen vom Typ int, ivec2, ivec3 und ivec4 anzusteuern. Für Bool`sche Veriablen können sowohl die i- als auch die f-Versionen verwendet werden. 0 bzw 0.0 bedeuten False, alle anderen Werte True.

Alle aktiven Uniform-Variablen im Programmobjekt werden mit 0 initialisiert, wenn das Programmobjekt erfolgreich gelinkt wurde. Sie behalten diesen Wert, bis glUniform aufgerufen wird. Nach erneutem, erfolgreichem Linken haben die Variablen wieder den Wert 0.

Die Befehle glUniform{1|2|3|4}{f|i}v können verwendet werden, um eine einzelne Uniform-Variable oder ein Uniform-Array zu modifizieren. Diese Befehle wenden count und einen Pointer auf die zu ladenden Variablen an. 1 sollte an count übergeben werden, wenn eine einzelne Uniform-Variable verändert werden soll, und höhere Werte für entsprechend mehr Variablen. Wenn man n Elemente an der Position m innerhalb eines Uniform-Arrays ladet, werden die Elemente m + n - 1 im Arrays mit neue Werten ersetzt. Wenn m + n - 1 größer als das Arrays ist, dann werden alle Elemente, die über das Array hinausgehen, ignoriert.

Bei Uniform-Arrays wird für jedes Element des Arrays angenommen, dass es vom Typ des verwendeten Kommandos ist (z.B. kann man glUniform3f oder glUniform3fv verwenden, um ein Uniform-Arrays vom Typ vec3 zu laden). Die Anzahl der Elemente, die von der Uniform-Variable verändert werden, wird mit count angegeben.

Die Befehle glUniformFloatMatrix{2|3|4}fv werden verwendet, um eine Matrix oder ein Array von Matrizen zu verwenden. Die im Befehl angegebene Ziffer gibt die Dimensionalität der Matrix an. Die Ziffer 2 weist zum Beispiel auf eine 2 x 2 Matrix hin, die also vier Werte beinhaltet. Wenn transpose auf GL_FALSE steht, dann wird angenommen, dass die Matrizen in Spalten verarbeitet werden. Andernfalls werden die Matrizen reihenweise verarbeitet. count gibt die Anzahl der eingegebenen Matrizen an. Bei einer einzelnen Matrix ist count 1, bei mehreren Matrizen entsprechend höher.

Hinweise

glUniform ist für verfügbar, wenn die OpenGL-Version 2.0 oder höher ist.

glUniform1i und glUniform1iv sind die einzigen Funktionen, die verwendet werden können, um Uniform-Variablen zu laden, die vom Typ sampler sind. Wenn man versucht, sampler mit einr anderen Funktion zu laden, erhält man den Fehler GL_INVALID_OPERATION.

Wenn count größer als 1 ist und die entsprechende Uniform-Variable kein Array ist, wird ein GL_INVALID_OPERATION-Fehler generiert und die Uniform-Variable wird nicht verändert.

Im Gegensatz zu den vorhergehenden Ausnahmen wird ein GL_INVALID_OPERATION-Fehler generiert, wenn der Typ und die Größe der Uniform-Variable im Shader nicht dem Typ und der Größe entsprechen, die mit der Funktion angeben wurden.

Wenn location einen Wert ungleich -1 hat, und trotzdem keiner gültigen Uniform-Variable entspricht, wird ein Fehler erzeugt und es werden keine Veränderungen vorgenommen. Wenn location gleich -1 ist, dann werden die angegebenen Werte ohne Fehler ignoriert und keine Variable verändert.



Fehlermeldungen

GL_INVALID_OPERATION wird generiert, wenn es kein aktives Programmobjekt gibt.

GL_INVALID_OPERATION wird generiert, wenn die Größe der Uniform-Variable im Shader nicht mit dem entsprechenden Befehl übereinstimmt.

GL_INVALID_OPERATION wird generiert, wenn einer der Integer-Verionen dazu verwendet wird, eine Variable vom Typ float, vec2, vec3, vec4 oder eines Arrays dieses Typs zu verändern. Gleiches gilt für das verändern von int-Variablen, die nicht mit Befehlen vom Typ glUniform*f beschrieben werden können.

GL_INVALID_OPERATION wird generiert, wenn location ein ungültiger Ort für das aktuelle Programmobjekt ist und location gleichzeitig -1 ist.

GL_INVALID_VALUE wird generiert, wenn count kleiner als 0 ist.

GL_INVALID_OPERATION wird generiert, wenn count größer als 1 ist und die entsprechende Uniform-Variable kein Array ist.

GL_INVALID_OPERATION wird generiert, wenn ein sampler mit einem anderen Befehl als glUniform1i und glUniform1iv geladen wird.

GL_FEHLER wird generiert wenn....
GL_INVALID_OPERATION wird generiert wenn glUniform innerhalb eines glBegin-glEnd Blocks aufgerufen wird.



Zugehörige Wertrückgaben

glGet mit Token GL_CURRENT_PROGRAM

glGetActiveUniform mit dem Handle eines Programmobjekts und dem Index einer aktuellen Uniform-Variable.

glGetUniform mit dem Handle eines Programmobjekts und dem Speicherort einer aktuellen Uniform-Variable.

glGetUniformLocation mit dem Handle eines Programmobjekts und dem Namen einer aktuellen Uniform-Variable.



Siehe auch

glLinkProgram, glUseProgram