10.6.1 Récupérer l'identifiant d'une variable

Bien sur, ce n'est pas le tout de vouloir passer des variables à son programme GPU, mais pour cela il faut récupérer leurs identifiants. Pour cela nous utilisons la fonction suivante :

1
GLint glGetUniformLocation(GLuint program, const GLchar * name);

Où :

  • program : est l'identifiant du programme dans lequel on veut trouver la variable
  • name : est le nom de la variable à trouver

La valeur retournée par cette fonction est l'identifiant de la variable demandée.

Pour continuer notre petit exemple, nous pouvons écrire ça :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GLuint programTest = glCreateProgram();
GLuint fragmentShader = loadShader(GL_FRAGMENT_SHADER, "../Shaders/couleurs.frag");
GLuint vertexShader = loadShader(GL_VERTEX_SHADER, "../Shaders/couleurs.vert");

//on attache les shaders au programme
glAttachShader(programTest, fragmentShader);
glAttachShader(programTest, vertexShader);

int linkingResult = linkGlProgram(programTest);
if(linkingResult == 0){
	glDeleteProgram(p_programTest);
	//on râle que ça a foiré, enfin en fait quelque chose
}else{
	GLint idMatriceModelView = glGetUniformLocation(p_programTest, "modelview");
	GLint idMatriceProjection = glGetUniformLocation(p_programTest, "projection");
}

Et ainsi récupérer les identifiants des matrices modelview et projection pour après pouvoir les passer en paramètres de notre shader.