Bonjour,

J'ai un problème assez perturbant que je vous expose, j'ai ce code qui dessine un mesh avec 2 textures à l'aide d'un shader:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
void Renderer::draw(MeshBuffer * mb)
{
    Material * material = mb->material();
 
    material->beginRender(mRender); //bind un shader, active les textures 1 et 2
 
    mb->vao()->bind(); //bind un VAO
    glDrawElements(GL_TRIANGLES, mb->indexSize() , GL_UNSIGNED_INT, 0);
    mb->vao()->unbind(); //bind un VAO avec l'id "0"
}
Ce qui me donne un résultat correct, un cube avec une texture verte et rouge me donne un cube marron.
Le problème arrive maintenant, lorsque j'ajoute une fonction vide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
void Renderer::draw(MeshBuffer * mb)
{
    Material * material = mb->material();
 
    material->beginRender(mRender); //bind un shader, active les textures 1 et 2
 
    mb->vao()->bind(); //bind un VAO
    glDrawElements(GL_TRIANGLES, mb->indexSize() , GL_UNSIGNED_INT, 0);
    mb->vao()->unbind(); //bind un VAO avec l'id "0"
 
   material->endRender(mRender); //fonction vide
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
void Material::endRender(RenderingContext * render) const
{
 
}
Mon cube dessiné est alors vert au lieu de marron, aucun mélange ne se fait. Je crois que c'est l'un des mystères les plus grands que j'ai rencontré en programmation, je ne vois pas en quoi une fonction vide appelé sur le CPU pourrait affecté le comportement de la carte graphique.

Si quelqu'un à une vague idée de ce qu'il se passe, je veux bien une explication.

(J'ai déjà tout nettoyé et recompilé sans succès.)