Hi! I read the previous threads on bindless graphics as well as NV’s tutorial and presentation but I still can’t get it to work. glGetBufferParameterui64vNV() does return valid addresses but my app freezes as soon as i attempt to render a resident buffer. here’s a comparison between the code i used before and what it looks like now. Maybe you can spot the mistake. Thank you!
classic:
// 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 );
// 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 );
// rendering
glBindBuffer( GL_ARRAY_BUFFER, vb->id );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, ib->id );
glEnableVertexAttribArray( 0 );
glVertexAttribPointer( 0, 3, GL_FLOAT, false, sizeof(Vertex), (void *)0 );
glDrawArrays( vb->topology, 0, vertexCount );
bindless:
// 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 );