Re: Requesting help with VBO's
Posted by Braindrool on Dec 01, 2012; 11:12pm
URL: https://forum.jogamp.org/Requesting-help-with-VBO-s-tp4027348p4027370.html
Looks useful. But a few questions stand.
//================================================================
/**
* Creates vertex buffer object used to store vertices and colors
* (if it doesn't exist). Fills the object with the latest
* vertices and colors from the data store.
*
* @param gl2 GL object used to access all GL functions.
* @return the number of vertices in each of the buffers.
*/
protected int [] createAndFillVertexBuffer( GL2 gl2, List<DataObject> listDataObjects ) {
int [] aiNumOfVertices = new int [] {listDataObjects.size() * 4};
// create vertex buffer object if needed
if( aiVertexBufferIndices[0] == -1 ) {
// check for VBO support
if( !gl2.isFunctionAvailable( "glGenBuffers" )
|| !gl2.isFunctionAvailable( "glBindBuffer" )
|| !gl2.isFunctionAvailable( "glBufferData" )
|| !gl2.isFunctionAvailable( "glDeleteBuffers" ) ) {
Activator.openError( "Error", "Vertex buffer objects not supported." );
}
gl2.glGenBuffers( 1, aiVertexBufferIndices, 0 );
// create vertex buffer data store without initial copy
gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
gl2.glBufferData( GL.GL_ARRAY_BUFFER,
aiNumOfVertices[0] * 3 * Buffers.SIZEOF_FLOAT * 2,
null,
GL2.GL_DYNAMIC_DRAW );
}
// map the buffer and write vertex and color data directly into it
gl2.glBindBuffer( GL.GL_ARRAY_BUFFER, aiVertexBufferIndices[0] );
ByteBuffer bytebuffer = gl2.glMapBuffer( GL.GL_ARRAY_BUFFER, GL2.GL_WRITE_ONLY );
FloatBuffer floatbuffer = bytebuffer.order( ByteOrder.nativeOrder() ).asFloatBuffer();
for( DataObject dataobject : listDataObjects )
storeVerticesAndColors( floatbuffer, dataobject );
gl2.glUnmapBuffer( GL.GL_ARRAY_BUFFER );
return( aiNumOfVertices );
}
1. listDataObjects is just the vertex data?
2. aiVertexBufferIndices is?
3. Could you do the traditional Byte / FloatBuffer as in X = Bytebuffer.allocateDirect( size ).asFloatBuffer().order(Buffer.nativeOrder())? Or however that goes.