Problem Using OpenGL VBO

I just tried displaying the first example of a redbook (white square) using VBOs.
It works great with immediate mode and vertex arrays.

But when using VBOs, the screen remains black. I think I must have missed something important.

INIT:

unsigned int bufIds[2]; glGenBuffers( 2, bufIds ); GLfloat vertices[] = { 0.25, 0.25, 0.0, 0.75, 0.25, 0.0, 0.75, 0.75, 0.0, 0.25, 0.75, 0.0 }; glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] ); glBufferData( GL_ARRAY_BUFFER, 12, vertices, GL_STATIC_DRAW ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glClearColor( 0, 0, 0, 1 ); glColor3f( 1, 1, 1 ); glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 ); 

renderloop for VBO (not working):

 glClear( GL_COLOR_BUFFER_BIT ); glEnableClientState( GL_VERTEX_ARRAY ); glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] ); glVertexPointer( 3, GL_FLOAT, 0, 0 ); glDrawArrays( GL_QUADS, 0, 12 ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glDisableClientState( GL_VERTEX_ARRAY ); 

renderloop for vertex arrays (working):

 glClear( GL_COLOR_BUFFER_BIT ); glEnableClientState( GL_VERTEX_ARRAY ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); glVertexPointer( 3, GL_FLOAT, 0, vertices ); glDrawArrays( GL_QUADS, 0, 12 ); glDisableClientState( GL_VERTEX_ARRAY ); 
+6
c ++ opengl vbo
source share
1 answer

argh I just figured this out while trying to read the contents of the buffer:

I need to allocate a buffer with size 12 * sizeof (GLfloat) instead of 12

 glBufferData( GL_ARRAY_BUFFER, 12 * sizeof( GLfloat ), vertices, GL_STATIC_DRAW ); 

my code read

 GLfloat vertices2[12]; glBindBuffer( GL_ARRAY_BUFFER, bufIds[0] ); glGetBufferSubData ( GL_ARRAY_BUFFER, 0, 12 * sizeof( GLfloat ), vertices2 ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); for ( int i = 0; i < 4; i ++ ) { LOG_DEBUG << "point " << i << ": " << vertices2[ i * 3 + 0 ] << " / " << vertices2[ i * 3 + 1 ] << " / " << vertices2[ i * 3 + 2 ]; } 
+5
source share

All Articles