Class NVBindlessMultiDrawIndirect
This extension combines NV_vertex_buffer_unified_memory and ARB_multi_draw_indirect to allow the processing of multiple drawing
commands, whose vertex and index data can be sourced from arbitrary buffer locations, by a single function call.
The NV_vertex_buffer_unified_memory extension provided a mechanism to specify vertex attrib and element array locations using GPU addresses.
Prior to this extension, these addresses had to be set through explicit function calls. Now the ability to set the pointer addresses indirectly by
extending the ARB_draw_indirect mechanism has been added.
Combined with other "bindless" extensions, such as NV_bindless_texture and NV_shader_buffer_load, it is now possible for the GPU to
create draw commands that source all resource inputs, which are common to change frequently between draw calls from the GPU: vertex and index buffers,
samplers, images and other shader input data stored in buffers.
Requires OpenGL 4.3 or ARB_multi_draw_indirect, and NV_vertex_buffer_unified_memory.
-
Method Summary
Modifier and TypeMethodDescriptionstatic voidglMultiDrawArraysIndirectBindlessNV(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect, except thatindirectis treated as an array ofdrawCountDrawArraysIndirectBindlessCommandNVstructures:static voidglMultiDrawArraysIndirectBindlessNV(int mode, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect, except thatindirectis treated as an array ofdrawCountDrawArraysIndirectBindlessCommandNVstructures:static voidglMultiDrawElementsIndirectBindlessNV(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect, except thatindirectis treated as an array ofdrawCountDrawElementsIndirectBindlessCommandNVstructures:static voidglMultiDrawElementsIndirectBindlessNV(int mode, int type, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect, except thatindirectis treated as an array ofdrawCountDrawElementsIndirectBindlessCommandNVstructures:static voidnglMultiDrawArraysIndirectBindlessNV(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Unsafe version of:MultiDrawArraysIndirectBindlessNVstatic voidnglMultiDrawElementsIndirectBindlessNV(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Unsafe version of:MultiDrawElementsIndirectBindlessNV
-
Method Details
-
nglMultiDrawArraysIndirectBindlessNV
public static void nglMultiDrawArraysIndirectBindlessNV(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Unsafe version of:MultiDrawArraysIndirectBindlessNV -
glMultiDrawArraysIndirectBindlessNV
public static void glMultiDrawArraysIndirectBindlessNV(int mode, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect, except thatindirectis treated as an array ofdrawCountDrawArraysIndirectBindlessCommandNVstructures:typedef struct { GLuint index; GLuint reserved; GLuint64 address; GLuint64 length; } BindlessPtrNV; typedef struct { DrawArraysIndirectCommand cmd; BindlessPtrNV vertexBuffers[]; } DrawArraysIndirectBindlessCommandNV;- Parameters:
mode- the primitive mode. One of:POINTSLINE_STRIPLINE_LOOPLINESTRIANGLE_STRIPTRIANGLE_FANTRIANGLESLINES_ADJACENCYLINE_STRIP_ADJACENCYTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCYPATCHESPOLYGONQUADSQUAD_STRIPindirect- an array ofDrawArraysIndirectBindlessCommandNVstructures (see the extension spec for more information)drawCount- the number of structures in theindirectarraystride- the size of oneDrawArraysIndirectBindlessCommandNVstructurevertexBufferCount- the number of vertex buffers in theDrawArraysIndirectBindlessCommandNVstructure
-
glMultiDrawArraysIndirectBindlessNV
public static void glMultiDrawArraysIndirectBindlessNV(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect, except thatindirectis treated as an array ofdrawCountDrawArraysIndirectBindlessCommandNVstructures:typedef struct { GLuint index; GLuint reserved; GLuint64 address; GLuint64 length; } BindlessPtrNV; typedef struct { DrawArraysIndirectCommand cmd; BindlessPtrNV vertexBuffers[]; } DrawArraysIndirectBindlessCommandNV;- Parameters:
mode- the primitive mode. One of:POINTSLINE_STRIPLINE_LOOPLINESTRIANGLE_STRIPTRIANGLE_FANTRIANGLESLINES_ADJACENCYLINE_STRIP_ADJACENCYTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCYPATCHESPOLYGONQUADSQUAD_STRIPindirect- an array ofDrawArraysIndirectBindlessCommandNVstructures (see the extension spec for more information)drawCount- the number of structures in theindirectarraystride- the size of oneDrawArraysIndirectBindlessCommandNVstructurevertexBufferCount- the number of vertex buffers in theDrawArraysIndirectBindlessCommandNVstructure
-
nglMultiDrawElementsIndirectBindlessNV
public static void nglMultiDrawElementsIndirectBindlessNV(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Unsafe version of:MultiDrawElementsIndirectBindlessNV -
glMultiDrawElementsIndirectBindlessNV
public static void glMultiDrawElementsIndirectBindlessNV(int mode, int type, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect, except thatindirectis treated as an array ofdrawCountDrawElementsIndirectBindlessCommandNVstructures:typedef struct { GLuint index; GLuint reserved; GLuint64 address; GLuint64 length; } BindlessPtrNV; typedef struct { DrawElementsIndirectCommand cmd; GLuint reserved; BindlessPtrNV indexBuffer; BindlessPtrNV vertexBuffers[]; } DrawElementsIndirectBindlessCommandNV;- Parameters:
mode- the primitive mode. One of:POINTSLINE_STRIPLINE_LOOPLINESTRIANGLE_STRIPTRIANGLE_FANTRIANGLESLINES_ADJACENCYLINE_STRIP_ADJACENCYTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCYPATCHESPOLYGONQUADSQUAD_STRIPtype- the data type of the element indices. One of:UNSIGNED_BYTEUNSIGNED_SHORTUNSIGNED_INTindirect- an array ofDrawElementsIndirectBindlessCommandNVstructures (see the extension spec for more information)drawCount- the number of structures in theindirectarraystride- the size of oneDrawElementsIndirectBindlessCommandNVstructurevertexBufferCount- the number of vertex buffers in theDrawElementsIndirectBindlessCommandNVstructure
-
glMultiDrawElementsIndirectBindlessNV
public static void glMultiDrawElementsIndirectBindlessNV(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect, except thatindirectis treated as an array ofdrawCountDrawElementsIndirectBindlessCommandNVstructures:typedef struct { GLuint index; GLuint reserved; GLuint64 address; GLuint64 length; } BindlessPtrNV; typedef struct { DrawElementsIndirectCommand cmd; GLuint reserved; BindlessPtrNV indexBuffer; BindlessPtrNV vertexBuffers[]; } DrawElementsIndirectBindlessCommandNV;- Parameters:
mode- the primitive mode. One of:POINTSLINE_STRIPLINE_LOOPLINESTRIANGLE_STRIPTRIANGLE_FANTRIANGLESLINES_ADJACENCYLINE_STRIP_ADJACENCYTRIANGLES_ADJACENCYTRIANGLE_STRIP_ADJACENCYPATCHESPOLYGONQUADSQUAD_STRIPtype- the data type of the element indices. One of:UNSIGNED_BYTEUNSIGNED_SHORTUNSIGNED_INTindirect- an array ofDrawElementsIndirectBindlessCommandNVstructures (see the extension spec for more information)drawCount- the number of structures in theindirectarraystride- the size of oneDrawElementsIndirectBindlessCommandNVstructurevertexBufferCount- the number of vertex buffers in theDrawElementsIndirectBindlessCommandNVstructure
-