Bonjour à tous
Ceci n'est pas réellement un problèmemais une question qui me taraude depuis une heure sans que je parvienne à trouver la réponse sur internet.
J'utilise 2 shaders attachés à un programme que je link :
Pour pouvoir facilement accéder aux éventuelles erreurs, un petit ensemble de lignes de codes suffit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 glAttachShader(m_program,m_vertexShader->getShaderId()); glAttachShader(m_program,m_fragmentShader->getShaderId()); glLinkProgram(m_program);
Voici mon problème : j'ai 2 shaders parfaitement chargés qui ne génèrent aucune erreur et qui sont attachés au programme. Je link le programme et récupère les erreurs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 GLsizei logsize = 0; GLint compileStatus = GL_TRUE; char *log = NULL; glGetProgramiv(m_program, GL_COMPILE_STATUS, &compileStatus); if(compileStatus!=GL_TRUE) { glGetProgramiv(m_program, GL_INFO_LOG_LENGTH, &logsize); log = new char[logsize+1]; if(log==NULL) { std::cout<<"Probleme d'allocation memoire, impossible de recuperer l'erreur de chargement du programme"; if(m_vertexShader!=NULL&&m_fragmentShader!=NULL) std::cout<<" contenant "<<m_vertexShader->getFileName()<<" et "<<m_fragmentShader->getFileName()<<std::endl; else if(m_vertexShader!=NULL) std::cout<<" contenant "<<m_vertexShader->getFileName()<<std::endl; else if(m_fragmentShader!=NULL) std::cout<<" contenant "<<m_fragmentShader->getFileName()<<std::endl; else std::cout<<std::endl; return; } log[logsize] = '\0'; glGetProgramInfoLog(m_program, logsize, &logsize, log); std::string ErrorsWarnings(log); std::cout<<"Impossible de compiler le programme"; if(m_vertexShader!=NULL&&m_fragmentShader!=NULL) std::cout<<" contenant "<<m_vertexShader->getFileName()<<" et "<<m_fragmentShader->getFileName()<<std::endl; else if(m_vertexShader!=NULL) std::cout<<" contenant "<<m_vertexShader->getFileName()<<std::endl; else if(m_fragmentShader!=NULL) std::cout<<" contenant "<<m_fragmentShader->getFileName()<<std::endl; else std::cout<<std::endl; std::cout<<">>> "<<ErrorsWarnings<<std::endl; delete log; }
Au départ, mes shaders étaient plus ou moins corrects donc les erreurs étaient justifiéesmais après correction le glLinkProgram entraine GL_COMPILE_STATUS à false, et donc l'affichage d'une erreur liée au programme.
Voici cette erreur, qui n'en est pas une
C'est donc pour moi totalement incompréhensible puisque le shader fonctionne correctement mais GL_COMPILE_STATUS est quand même à false après le link du programme.
Code : Sélectionner tout - Visualiser dans une fenêtre à part fragment shader(s) linked, vertex shader(s) linked
Une explication ?
Je voulais également savoir ce qui déterminais la valeur de la fonction
Si vous pouvez m'éclairer n'hésitez pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part glGetAttribLocation![]()
Partager