PDA

View Full Version : VBO not working



Dice1
03-29-2009, 05:25 PM
Hi everybody, let me get straight to the point. I've got some code from somewhere to build and use a VBO, but it's not working at all. I'm pretty sure a more experienced person would see whats wrong with this in an instance. It all compiles without errors or warnings. So let me show you my code:

I'm loading in a heightmap and parse the vertex, uv and normal buffer I generate to this function. This is called once after I created the heightmap.

unsigned int GraphicsManager::createVBO(int size, Vector3* mVertexBuffer, Vector3* mNormalBuffer, Vector2* mUvBuffer)
{
unsigned int id = mGraphicsManagerPimpl.mVboDictionary.size();

VboIdCollection* ids = new VboIdCollection();
ids->size = size;

glGenBuffersARB( 1, &ids->vId );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->vId );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, size*3*sizeof(float), mVertexBuffer, GL_STATIC_DRAW_ARB );

glGenBuffersARB( 1, &ids->nId );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->nId );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, size*3*sizeof(float), mNormalBuffer, GL_STATIC_DRAW_ARB );

glGenBuffersARB( 1, &ids->uvId );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->uvId );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, size*2*sizeof(float), mUvBuffer, GL_STATIC_DRAW_ARB );

mGraphicsManagerPimpl.mVboDictionary.insert(std::m ake_pair(id, ids));

return id;
}

And here's the code I call every frame when I want to display the VBO.

void GraphicsManager::drawVBO(unsigned int id)
{
vboIdcollection* ids = mGraphicsManagerPimpl.mVboDictionary.find(id)->second;

glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->vId );
glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );

glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->nId );
glNormalPointer( GL_FLOAT, 0, (char *) NULL );

glBindBufferARB( GL_ARRAY_BUFFER_ARB, ids->uvId );
glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );

glDrawArrays( GL_TRIANGLES, 0, ids->size );

glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY );
glDisableClientState( GL_NORMAL_ARRAY );
}

I would really appreciate the help.

Jan
03-29-2009, 05:28 PM
You do not call

glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glEnableClientState( GL_NORMAL_ARRAY );

at least not in the given code.

Jan.

Dice1
03-29-2009, 05:35 PM
Oh man I feel like a complete idiot right now :P. It works perfectly though :D. My FPS just quadrupled. succes \o/ Thanks alot.