[VBO]Pb avec un Index Buffer
Bonjour a tous,
j'essaye actuelement de faire un générateur de heightmap pour apprendre opengl.
pour comparer le rendu avec gl_triangle_fan et gl_triangle_strip j'ai crée un index pour chaque type de rendu et cela fonctionne correctement sans Index Buffer Object par contre si j'en utilise un, mon programme plante avec un "erreur de segmentation" ou au mieux dans certain cas affiche n'importe quoi.
J'y est passé pas mal d'heure mais rien a faire sa ne fonctionne pas et je ne sais toujours pas pourquoi donc j'éspere que quelqu'un aura une solution a me proposé.
voici mon d'initialisation des VBO qui ne change pas:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
void init_vbo ()
{
glewInit();
glGenBuffers(2, BufferName);
glBindBuffer (GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]);
glBufferData (GL_ARRAY_BUFFER, nb_subdiv * nb_subdiv * 3 * sizeof (GLfloat), Sommets, GL_STATIC_DRAW);
glBindBuffer (GL_ARRAY_BUFFER, 0);
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]);
glBufferData (GL_ELEMENT_ARRAY_BUFFER, (nb_subdiv - 2) * (nb_subdiv - 2) * 10 * sizeof (GLuint), Index, GL_STATIC_DRAW);
glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0);
} |
Voila ma fonction d'affichage qui affiche correctement mais qui n'utilise pas mon Index Buffer Object:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
void dessine_vbo ()
{
glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]);
glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState ( GL_VERTEX_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, 0);
glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, Index, (nb_subdiv - 2) * (nb_subdiv - 2));
glDisableClientState ( GL_VERTEX_ARRAY );
} |
Celle qui l'utilise mais qui plante avec un "Erreur de Segmentation":
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
void dessine_vbo ()
{
glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]);
glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState ( GL_VERTEX_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]);
glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, BUFFER_OFFSET(0), (nb_subdiv - 2) * (nb_subdiv - 2));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState ( GL_VERTEX_ARRAY );
} |
enfin celle qui fonctionne mais qui affiche n'importe quoi:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
void dessine_vbo ()
{
glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]);
glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0));
glEnableClientState ( GL_VERTEX_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]);
glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, Index, (nb_subdiv - 2) * (nb_subdiv - 2));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glDisableClientState ( GL_VERTEX_ARRAY );
} |
j'ai mis en rouge se qui change d'un version a une autre. en espérant que quelqu'un comprennent pourquoi cela ne fonction pas.
merci d'avance!