Pour lier notre programme GPU aux shaders qui lui sont attachés, il nous suffit d'avoir l'identifiant du programme, nous allons donc avoir une fonction qui ressemble à ça :
1
|
int linkGlProgram(GLuint programID);
|
Où :
- programID : est l'identifiant du programme que l'on veut lier
- la fonction retourne 1 si le lien a réussit, 0 si le lien à échoué (rappelez vous que l'on est en C, donc le bool n'existe pas, comme la cuillère)
Voici la fonction en entier :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
int linkGlProgram(GLuint programID){
glLinkProgram(programID);
GLint linkingResult = GL_TRUE;
glGetProgramiv(programID, GL_COMPILE_STATUS, &linkingResult);
if(linkingResult != GL_TRUE){
char *log = NULL;
GLint logsize;
glGetShaderiv(programID, GL_INFO_LOG_LENGTH, &logsize);
log = malloc(logsize + 1);
if(log == NULL){
fprintf(stderr, "impossible d'allouer de la mémoire !\n");
return 0;
}
memset(log, '\0', logsize + 1);
glGetProgramInfoLog(programID, logsize, &logsize, log);
fprintf(stderr, "impossible linker le programme :\n%s", log);
free(log);
return 0;
}else return 1;
}
|
Comme tout à l'heure je ne vais pas vous la détailler car il y a suffisamment de commentaires pour cela.
Ce qui veut dire que maintenant notre petit bout de code pour initialiser un programme GPU est fini :
1
2
3
4
5
6
7
8
9
10
11
12
|
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);
}
|
Et voilà, surtout ne vous précipitez pas à faire un programme tout de suite, on a pas encore tout à fait fini. Mais on y est presque.
|