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:
Ce qui me donne un résultat correct, un cube avec une texture verte et rouge me donne un cube marron.
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" }
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 }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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Material::endRender(RenderingContext * render) const { }
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.)
Partager