This sample demonstrates the large performance increase in OpenGL that is made possible by 'Bindless Graphics'. These extensions allow applications to draw large numbers of objects with only a few setup calls, rather than a few calls per object, thus reducing the driver overhead necessary to render highly populated scenery.


APIs Used

  • GL_NV_vertex_buffer_unified_memory
  • glBufferAddressRangeNV
  • glGetIntegerui64i_vNV

Shared User Interface

The Graphics samples all share a common app framework and certain user interface elements, centered around the "Tweakbar" panel on the left side of the screen which lets you interactively control certain variables in each sample.

To show and hide the Tweakbar, simply click or touch the triangular button positioned in the top-left of the view.

Technical Details

This sample demonstrates using bindless rendering with GL_NV_shader_buffer_load, GL_NV_bindless_texture and GL_NV_vertex_buffer_unified_memory to render very large numbers of the same object with slight differences in their visual attributes.

  • GL_NV_shader_buffer_load allows the program to use GPU pointers in the vertex shader to load uniforms directly from GPU memory.
  • GL_NV_vertex_buffer_unified_memory allows the program to use GPU pointers to vertex and index data when making rendering calls.
  • GL_NV_bindless_texture allows the program to access texture objects in shaders without first binding each texture to one of a limited number of texture image units.

All of these extensions can significantly reduce CPU L2 cache misses and pollution; this can dramatically speed up scenes with large numbers of draw calls.

For more detailed information on bindless rendering, see the resources below.