// setup index buffer
glGenBuffers( 1, &ib->id );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, ib->id );
glBufferData( GL_ELEMENT_ARRAY_BUFFER, ib->size, &ib->indices[0], GL_STATIC_DRAW );
glGetBufferParameterui64vNV( GL_ELEMENT_ARRAY_BUFFER, GL_BUFFER_GPU_ADDRESS_NV, &ib->address );
glMakeBufferResidentNV( GL_ELEMENT_ARRAY_BUFFER, GL_READ_ONLY );
// setup vertex buffer
glGenBuffers( 1, &vb->id );
glBindBuffer( GL_ARRAY_BUFFER, vb->id );
glBufferData( GL_ARRAY_BUFFER, vb->size, &vb->vertices[0], GL_STATIC_DRAW );
glGetBufferParameterui64vNV( GL_ARRAY_BUFFER, GL_BUFFER_GPU_ADDRESS_NV, &vb->address );
glMakeBufferResidentNV( GL_ARRAY_BUFFER, GL_READ_ONLY );
// rendering
glEnableClientState( GL_ELEMENT_ARRAY_UNIFIED_NV );
glBufferAddressRangeNV( GL_ELEMENT_ARRAY_ADDRESS_NV, 0, ib->address, ib->indexCount*sizeof(uint) );
glEnableClientState( GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV );
glVertexAttribFormatNV( 0, 3, GL_FLOAT, false, sizeof(Vertex) );
glBufferAddressRangeNV( GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV, 0, vb->address, vb->indexCount*sizeof(Vertex) );
glDrawArrays( vb->topology, 0, vertexCount );
glDisableClientState( GL_ELEMENT_ARRAY_UNIFIED_NV );
glDisableClientState( GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV );