Hi guys
Hoping you can help me with a little problem with VBOs and glDrawRangeElements. I''m trying to replace a standard vertex array (using glXPointers) with VBOs. I can''t use glDrawElements because that causes major memory reallocations (check nv docs), nor can I use glDrawArrays because that is no different than using a display list. In fact, its worse because you can''t change texture bindings.
Loading code:
glGenBuffersARB(2, m_vertexBufferObjects);
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vertexBufferObjects[VERTEX_BUFFER]);
glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(BSPVertex) * m_numOfVerts, m_pVerts, GL_STATIC_DRAW_ARB);
glVertexPointer(3, GL_FLOAT, sizeof(BSPVertex), (char*)NULL);
//glNormalPointer(GL_FLOAT, sizeof(BSPVertex), (char*)(sizeof(CVector2) * 2 + sizeof(CVector3)));
int size;
glGetBufferParameterivARB(GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size);
CONSOLE.AddLine("Vertex Buffer size: %i", size);
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, m_vertexBufferObjects[INDEX_BUFFER]);
glBufferDataARB(GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(int) * m_numOfIndices, m_pIndexArray, GL_STATIC_DRAW_ARB);
glIndexPointer(GL_UNSIGNED_INT, sizeof(int), (char*)NULL);
glGetBufferParameterivARB(GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &size);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, m_vertexBufferObjects[VERTEX_BUFFER]);
CONSOLE.AddLine("Index Buffer size: %i", size);
BSPVertex encompasses texture coords, normals, colours, and the vertices themselves. It is a 64bit structure.
Rendering code:
glDrawRangeElementsEXT(GL_TRIANGLES, pFace->meshVertIndex, pFace->meshVertIndex + pFace->numOfVerts, pFace->numMeshVerts, GL_UNSIGNED_INT, 0);
I know that the glDrawRangeElementsExt statement is wrong, but I''ve tried so many possible values, that is the latest. If I put in a pointer (or rather offset) to the indices, then the computer hangs, requiring a reset.
Original code for the normal vertex array:
glDrawElements(GL_TRIANGLES, pFace->numMeshVerts, GL_UNSIGNED_INT, &m_pIndexArray[pFace->meshVertIndex]);
Any help would be very appreciated
In fact, just a summary of how glDrawRangeElements works, when using a separate buffer for Index Arrays should help me figure this out