Bonjour à tous,
Dans un logiciel utilisant OpenGL, je suis un peu perdu avec cette instruction glEnableVertexAttribArray et son antonyme.
En fait, il n'y a jamais de glDisableVertexAttribArray ce qui maintenant me semble curieux ...

En fait, dans la pratique, où devrait-on placer glEnableVertexAttribArray et glDisableVertexAttribArray ?

J'initialise mes VertexArrays

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
glGenVertexArrays(1,&test.vao);
glBindVertexArray(test.vao);
 
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(0);
Dans une autre fonction, je rempli mes buffers

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
glGenBuffers(1,&test.tex);
glBindBuffer(GL_ARRAY_BUFFER,test.tex);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*dataTex.size(), dataTex, GL_STATIC_DRAW);
glVertexAttribPointer(1,2,GL_FLOAT,GL_FALSE,0,NULL);
 
glGenBuffers(1,&test.pos);
glBindBuffer(GL_ARRAY_BUFFER,test.pos);
glBufferData(GL_ARRAY_BUFFER,sizeof(float)*dataPos.size(), dataPos, GL_STATIC_DRAW);
glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,0,NULL);

dans une autre fonction, ensuite j'utilise le shader

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
StateGL::disable(GL_BLEND);
StateGL::BlendFunc(GL_ONE, GL_ONE);
 
shaderSplash->use();
 
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex_splash->getID());
glDrawArrays(GL_TRIANGLE_STRIP,0,4);
shaderSplash->unuse();
A la relecture de ce code, je sens qu'il y a quelque chose de louche avec les glEnableVertexAttribArray.
J'ai bien relu la documentation, mais je ne saisis pas leur utilisation au quotidien dans le code.

Tout le logiciel fonctionne de cette façon (enfin sous linux avec une carte nvidia)

Pouvez vous me dire ce qui ne va pas ?
En vous remerciant par avance !