glLinkProgram et GL_COMPILE_STATUS
Bonjour à tous ;)
Ceci n'est pas réellement un problème :P mais 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 :
Code:
1 2 3
| glAttachShader(m_program,m_vertexShader->getShaderId());
glAttachShader(m_program,m_fragmentShader->getShaderId());
glLinkProgram(m_program); |
Pour pouvoir facilement accéder aux éventuelles erreurs, un petit ensemble de lignes de codes suffit :
Code:
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;
} |
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.
Au départ, mes shaders étaient plus ou moins corrects donc les erreurs étaient justifiées :aie: mais 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 :mouarf:
Code:
fragment shader(s) linked, vertex shader(s) linked
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.
Une explication ? :mrgreen:
Je voulais également savoir ce qui déterminais la valeur de la fonction
Code:
glGetAttribLocation
Si vous pouvez m'éclairer n'hésitez pas :ccool: