I am trying to use the glVertexArrayRangeNV.
I have a buffer with numTriangles (about 130000) triangles:
sizeX = 1188882;
GLFloat* triangles=(GLFloat*)calloc(sizeX, sizeof(GLFloat));
trianglesArray[0] is triangle1 1st vertex
trianglesArray[1] is triangle1 2st vertex
trianglesArray[2] is triangle1 3st vertex
trianglesArray[3] is triangle2 1st vertex
trianglesArray[4] is triangle2 2st vertex
…
big_array = (GLfloat*)wglAllocateMemoryNV(sizeX*sizeof(GLfloat), 0, 0, 0.5f);
if(big_array)
{
m_memory = big_array;
}
glVertexArrayRangeNV(sizeX*sizeof(GLfloat), big_array);
glEnableClientState(GL_VERTEX_ARRAY_RANGE_NV);
glEnableClientState(GL_VERTEX_ARRAY);
This is done once.
The following code is done every frame:
glVertexPointer(3, GL_FLOAT, 0, trianglesArray);
glLockArraysEXT(0, numTriangles3); //number of triangles * 3 vertexs per triangle
glDrawArrays(GL_TRIANGLES,0,numTriangles3);
glUnlockArraysEXT();
This renders 130000 triangles correctly but decreases framerate from 500 fps to 12 fps!
This is with a Celeron 850MHz and a GeForce3 running with OpenGL 1.3.0 and WindowsXP Professional.
What am I doing wrong?
Where can I find a good tutorial or example on GL_NV_vertex_array_range?
Thank you.
PS- I don’t know how to setup the index array to use glDrawElements…