unfortunately, again nope… floats for everything, no color… unsigned short for indices…
maybe some code might help you figure out…
init code: (Vertex3D and 2D are all floats)
int sz = pMesh->getVertexCount();
int nArrayObjectSize = (2* sizeof(Vertex3D) + sizeof(Vertex2D)) * pMesh->getVertexCount();
char *pData = new char[nArrayObjectSize];
memcpy(pData, pMesh->getVertices(), sizeof(Vertex3D)*sz);
memcpy(&pData[sizeof(Vertex3D)*sz], pMesh->getNormals(), sizeof(Vertex3D)sz);
memcpy(&pData[2sizeof(Vertex3D)*sz], pMesh->getTexCoords(), sizeof(Vertex2D)*sz);
int nParam_ArrayObjectSize = 0;
unsigned int id = 0;
glGenBuffersARB( 1, &id );
pMesh->setBufferID(id);
glBindBufferARB( GL_ARRAY_BUFFER_ARB, id );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, nArrayObjectSize, pData, GL_STATIC_DRAW_ARB );
glGetBufferParameterivARB( GL_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &nParam_ArrayObjectSize );
if( nParam_ArrayObjectSize <= 0 )
return;
//indices
nArrayObjectSize = sizeof(unsigned short) * pMesh->getIndexCount();
nParam_ArrayObjectSize = 0;
glGenBuffersARB( 1, &id );
pMesh->setIndexBufferID(id);
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, id );
glBufferDataARB( GL_ELEMENT_ARRAY_BUFFER_ARB, nArrayObjectSize, pMesh->getIndices(), GL_STATIC_DRAW_ARB );
glGetBufferParameterivARB( GL_ELEMENT_ARRAY_BUFFER_ARB, GL_BUFFER_SIZE_ARB, &nParam_ArrayObjectSize );
if( nParam_ArrayObjectSize <= 0 )
return;
glBindBufferARB( GL_ARRAY_BUFFER_ARB, NULL );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, NULL );
rendering:
glBindBufferARB( GL_ARRAY_BUFFER_ARB, pMesh->getBufferID() );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, pMesh->getIndexBufferID());
long offset = sizeof(Vertex3D)*pMesh->getVertexCount();
glVertexPointer( 3, GL_FLOAT, 0, BUFFER_OFFSET(0) );
glNormalPointer( GL_FLOAT, 0, BUFFER_OFFSET(offset));
glTexCoordPointer( 2, GL_FLOAT, 0, BUFFER_OFFSET(2*offset));
glEnableClientState( GL_VERTEX_ARRAY );
glEnableClientState( GL_NORMAL_ARRAY );
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
glDrawElements( GL_TRIANGLES, pMesh->getIndexCount(), GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));
//glDrawArrays( GL_TRIANGLES, 0, pMesh->getIndexCount()/3);
glDisableClientState( GL_VERTEX_ARRAY );
glDisableClientState( GL_NORMAL_ARRAY );
glDisableClientState( GL_TEXTURE_COORD_ARRAY);
glBindBufferARB( GL_ARRAY_BUFFER_ARB, NULL );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, NULL );