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");
glAttachShader(programTest, fragmentShader);
glAttachShader(programTest, vertexShader);
int linkingResult = linkGlProgram(programTest);
if(linkingResult == 0){
glDeleteProgram(p_programTest);
}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.
|