All the model information gets stored in the following:
struct MyVertex
{
float x, y, z; // Vertex
float nx, ny, nz; // Normal
float u, v; // Texcoords
float a, r, g, b; // Color
float padding[4];
};
This is how I load the VBO:
for (Itter = Mesh_Multimap.begin(); Itter != Mesh_Multimap.end(); ++Itter)
{
VBO_Size += (*Itter).second->NumVerticies*sizeof(MyVertex);
}
glGenBuffersARB( 1, &VBO_ID );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBO_ID );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, VBO_Size, NULL, GL_STATIC_DRAW_ARB );
for (VBO_Vector_IT = VBO_Vector.begin(); VBO_Vector_IT != VBO_Vector.end(); ++VBO_Vector_IT)
{
glBufferSubDataARB( GL_ARRAY_BUFFER_ARB, VBO_Offset, (*VBO_Vector_IT)->NumVerticies*sizeof(MyVertex), (*VBO_Vector_IT)->VertexData );
(*VBO_Vector_IT)->VBO_Offset = VBO_Offset;
VBO_Offset += (*VBO_Vector_IT)->NumVerticies*sizeof(MyVertex);
}
Rendering:
glVertexPointer( 3, GL_FLOAT, 0, &(*RenderListIT)->RenderMesh->VBO_Offset ); glNormalPointer( GL_FLOAT, 0, &(*RenderListIT)->RenderMesh->VBO_Offset ); glTexCoordPointer( 2, GL_FLOAT, 0, &(*RenderListIT)->RenderMesh->VBO_Offset );
That's the point that's giving me pause. When just rendering with VAs I need to do the following:
glVertexPointer( 3, GL_FLOAT, sizeof(MyVertex), &(*RenderListIT)->RenderMesh->VertexData->x ); glNormalPointer( GL_FLOAT, sizeof(MyVertex), &(*RenderListIT)->RenderMesh->VertexData->nx ); glTexCoordPointer( 2, GL_FLOAT, sizeof(MyVertex), &(*RenderListIT)->RenderMesh->VertexData->u ); glColorPointer( 3, GL_FLOAT, sizeof(MyVertex), &(*RenderListIT)->RenderMesh->VertexData->a );
I had to specify what part of the struct to pull the appropriate data from. Am I supposed to be doing this with the VBOs somehow? What am I missing?






