Section courante

A propos

Section administrative du site

glProgramUniform

Programme uniforme
OpenGL GL/gl.h

Syntaxe

void glProgramUniform1f(GLuint program, GLint location, GLfloat v0);
void glProgramUniform2f( GLuint program, GLint location, GLfloat v0, GLfloat v1);
void glProgramUniform3f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
void glProgramUniform4f( GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
void glProgramUniform1i( GLuint program, GLint location, GLint v0);
void glProgramUniform2i( GLuint program, GLint location, GLint v0, GLint v1);
void glProgramUniform3i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2);
void glProgramUniform4i( GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
void glProgramUniform1ui( GLuint program, GLint location, GLuint v0);
void glProgramUniform2ui( GLuint program, GLint location, GLuint v0, GLuint v1);
void glProgramUniform3ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2);
void glProgramUniform4ui( GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
void glProgramUniform1fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
void glProgramUniform2fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
void glProgramUniform3fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
void glProgramUniform4fv( GLuint program, GLint location, GLsizei count, const GLfloat *value);
void glProgramUniform1iv( GLuint program, GLint location, GLsizei count, const GLint *value);
void glProgramUniform2iv( GLuint program, GLint location, GLsizei count, const GLint *value);
void glProgramUniform3iv( GLuint program, GLint location, GLsizei count, const GLint *value);
void glProgramUniform4iv( GLuint program, GLint location, GLsizei count, const GLint *value);
void glProgramUniform1uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
void glProgramUniform2uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
void glProgramUniform3uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
void glProgramUniform4uiv( GLuint program, GLint location, GLsizei count, const GLuint *value);
void glProgramUniformMatrix2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix2x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix3x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix2x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix4x2fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix3x4fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glProgramUniformMatrix4x3fv( GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);

Paramètres

Nom Description
program Ce paramètre permet d'indiquer le descripteur du programme contenant la variable uniforme à modifier.
location Ce paramètre permet d'indiquer l'emplacement de la variable uniforme à modifier.
count Pour les commandes vectorielles (glProgramUniform*v), spécifiez le nombre d'éléments à modifier. Ce nombre doit être égal à 1 si la variable uniforme cible n'est pas un tableau, et à 1 ou plus si c'est un tableau. Pour les commandes matricielles (glProgramUniformMatrix*), spécifiez le nombre de matrices à modifier. Ce nombre doit être égal à 1 si la variable uniforme cible n'est pas un tableau de matrices, et à 1 ou plus si c'est un tableau de matrices.
transpose Pour les commandes matricielles, indique s'il faut transposer la matrice lors du chargement des valeurs dans la variable uniforme.
v0, v1, v2, v3 Pour les commandes scalaires, spécifie les nouvelles valeurs à utiliser pour la variable uniforme spécifiée.
value Pour les commandes de vecteur et de matrice, spécifie un pointeur vers un tableau de valeurs de comptage qui sera utilisé pour mettre à jour la variable uniforme spécifiée.

Description

Cette fonction permet de définir une valeur uniforme (constante pour tous les fragments ou vertex d'un programme shader). Elle permet de mettre à jour une valeur directement dans le programme shader spécifié sans devoir lier le programme au contexte actif.

La fonction `glProgramUniform` modifie la valeur d'une variable uniforme ou d'un tableau de variables uniformes. L'emplacement de la variable à modifier est spécifié par `location`, qui doit correspondre à une valeur renvoyée par `glGetUniformLocation`. `glProgramUniform` agit sur l'objet programme spécifié par `program`.

Les commandes `glProgramUniform{1|2|3|4}{f|i|ui}` permettent de modifier la valeur de la variable uniforme spécifiée par `location` à l'aide des valeurs passées en arguments. Le nombre spécifié dans la commande doit correspondre au nombre de composantes du type de données de la variable uniforme (par exemple, 1 pour `float`, `int`, `unsigned int`, `bool` ; 2 pour `vec2`, `ivec2`, `uvec2`, `bvec2`, etc.). Le suffixe `f` indique que des valeurs à virgule flottante sont passées ; le suffixe `i` indique que des valeurs entières sont passées ; le suffixe `ui` indique que des valeurs entières non signées sont passées, et ce type doit également correspondre au type de données de la variable uniforme spécifiée. Les variantes `i` de cette fonction doivent être utilisées pour fournir des valeurs aux variables uniformes de type `int`, `ivec2`, `ivec3`, `ivec4` ou à des tableaux de ces types. Les variantes `ui` doivent être utilisées pour fournir des valeurs aux variables uniformes de type `unsigned int`, `uvec2`, `uvec3`, `uvec4` ou à des tableaux de ces types. Les variantes `f` doivent être utilisées pour fournir des valeurs aux variables uniformes de type `float`, `vec2`, `vec3`, `vec4` ou à des tableaux de ces types. Les variantes `i`, `ui` ou `f` peuvent être utilisées pour fournir des valeurs aux variables uniformes de type `bool`, `bvec2`, `bvec3`, `bvec4` ou à des tableaux de ces types. La variable uniforme sera initialisée à `false` si la valeur d'entrée est 0 ou 0.0f, et à `true` sinon.

Toutes les variables uniformes actives définies dans un objet programme sont initialisées à 0 lors de la liaison réussie de l'objet programme. Elles conservent les valeurs qui leur sont assignées par un appel à `glProgramUniform` jusqu'à la prochaine opération de liaison réussie sur l'objet programme, après quoi elles sont réinitialisées à 0.

Les commandes `glProgramUniform{1|2|3|4}{f|i|ui}v` permettent de modifier une variable uniforme unique ou un tableau de variables uniformes. Ces commandes prennent en paramètres un compteur et un pointeur vers les valeurs à charger dans une variable uniforme ou un tableau de variables uniformes. Un compteur de 1 doit être utilisé pour modifier la valeur d'une seule variable uniforme, et un compteur supérieur ou égal à 1 peut être utilisé pour modifier un tableau entier ou une partie de tableau. Lors du chargement de `n` éléments à partir d'une position arbitraire `m` dans un tableau de variables uniformes, les éléments `m + n - 1` du tableau seront remplacés par les nouvelles valeurs. Si `m + n - 1` est supérieur à la taille du tableau de variables uniformes, les valeurs de tous les éléments du tableau situés au-delà de la fin du tableau seront ignorées. Le nombre indiqué dans le nom de la commande correspond au nombre de composantes de chaque élément de la valeur et doit correspondre au nombre de composantes du type de données de la variable uniforme spécifiée (par exemple, 1 pour float, int, bool ; 2 pour vec2, ivec2, bvec2, etc.). Le type de données spécifié dans le nom de la commande doit correspondre à celui de la variable uniforme spécifiée, comme décrit précédemment pour glProgramUniform{1|2|3|4}{f|i|ui}.

Pour les tableaux de variables uniformes, chaque élément du tableau est considéré comme étant du type indiqué dans le nom de la commande (par exemple, glProgramUniform3f ou glProgramUniform3fv permettent de charger un tableau de variables uniformes de type vec3). Le nombre d'éléments du tableau de variables uniformes à modifier est spécifié par `count`.

Les commandes `glProgramUniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv` permettent de modifier une matrice ou un tableau de matrices. Les nombres dans le nom de la commande correspondent à la dimensionnalité de la matrice. Le nombre 2 indique une matrice 2 × 2 (soit 4 valeurs), le nombre 3 une matrice 3 × 3 (soit 9 valeurs) et le nombre 4 une matrice 4 × 4 (soit 16 valeurs). La dimensionnalité des matrices non carrées est explicite : le premier nombre représente le nombre de colonnes et le second le nombre de lignes. Par exemple, `2x4` indique une matrice 2 × 4 avec 2 colonnes et 4 lignes (soit 8 valeurs). Si la transposition est définie sur GL_FALSE, chaque matrice est supposée être fournie en ordre colonne. Si la transposition est définie sur GL_TRUE, chaque matrice est supposée être fournie en ordre ligne. L'argument «count» indique le nombre de matrices à transmettre. Utilisez la valeur 1 pour modifier la valeur d'une seule matrice et une valeur supérieure à 1 pour modifier un tableau de matrices.

Remarques

Erreurs

Constante Description
GL_INVALID_OPERATION Cette erreur est générée si le programme ne fait pas référence à un objet programme appartenant à OpenGL.
GL_INVALID_OPERATION Cette erreur est générée si la taille de la variable uniforme déclarée dans le shader ne correspond pas à la taille indiquée par la commande glProgramUniform.
GL_INVALID_OPERATION Cette erreur est générée si l'une des variantes entières signées ou non signées de cette fonction est utilisée pour charger une variable uniforme de type float, vec2, vec3, vec4 ou un tableau de ces types, ou si l'une des variantes à virgule flottante de cette fonction est utilisée pour charger une variable uniforme de type int, ivec2, ivec3, ivec4, unsigned int, uvec2, uvec3, uvec4 ou un tableau de ces types.
L'exception GL_INVALID_OPERATION Cette erreur est générée si l'une des variantes de cette fonction utilisant des entiers signés est employée pour charger une variable uniforme de type unsigned int, uvec2, uvec3, uvec4 ou un tableau de ces types.
L'exception GL_INVALID_OPERATION Cette erreur est générée si l'une des variantes de cette fonction utilisant des entiers non signés est employée pour charger une variable uniforme de type int, ivec2, ivec3, ivec4 ou un tableau de ces types.
L'exception GL_INVALID_OPERATION Cette erreur est générée si l'emplacement spécifié est invalide pour une variable uniforme du programme et si cet emplacement est différent de -1.
L'exception GL_INVALID_VALUE Cette erreur est générée si la valeur de count est inférieure à 0.
L'exception GL_INVALID_OPERATION Cette erreur est générée si la valeur de count est supérieure à 1 et que la variable uniforme indiquée n'est pas un tableau.
L'exception GL_INVALID_OPERATION Cette erreur est générée si un échantillonneur est chargé à l'aide d'une commande autre que glProgramUniform1i et glProgramUniform1iv.

Requêtes associées

Version supportée

OpenGL Version
Nom de la fonction/caractéristique 2.0 2.1 3.0 3.1 3.2 3.3 4.0 4.1 4.2 4.3 4.4 4.5
glProgramUniform1f - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform1fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform1i - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform1iv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform1ui - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform1uiv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2f - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2i - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2iv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2ui - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform2uiv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3f - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3i - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3iv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3ui - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform3uiv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4f - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4i - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4iv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4ui - - - - - - - Oui Oui Oui Oui Oui
glProgramUniform4uiv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix2fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix2x3fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix2x4fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix3fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix3x2fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix3x4fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix4fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix4x2fv - - - - - - - Oui Oui Oui Oui Oui
glProgramUniformMatrix4x3fv - - - - - - - Oui Oui Oui Oui Oui

Voir également

glLinkProgram, glUseProgram



Dernière mise à jour : Jeudi, le 3 Juillet 2025