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 void
glMultiDrawArraysIndirectBindlessNV
(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawArraysIndirectBindlessCommandNV
structures:static void
glMultiDrawArraysIndirectBindlessNV
(int mode, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawArraysIndirectBindlessCommandNV
structures:static void
glMultiDrawElementsIndirectBindlessNV
(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawElementsIndirectBindlessCommandNV
structures:static void
glMultiDrawElementsIndirectBindlessNV
(int mode, int type, ByteBuffer indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawElementsIndirectBindlessCommandNV
structures:static void
nglMultiDrawArraysIndirectBindlessNV
(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Unsafe version of:MultiDrawArraysIndirectBindlessNV
static void
nglMultiDrawElementsIndirectBindlessNV
(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 thatindirect
is treated as an array ofdrawCount
DrawArraysIndirectBindlessCommandNV
structures: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:POINTS
LINE_STRIP
LINE_LOOP
LINES
TRIANGLE_STRIP
TRIANGLE_FAN
TRIANGLES
LINES_ADJACENCY
LINE_STRIP_ADJACENCY
TRIANGLES_ADJACENCY
TRIANGLE_STRIP_ADJACENCY
PATCHES
POLYGON
QUADS
QUAD_STRIP
indirect
- an array ofDrawArraysIndirectBindlessCommandNV
structures (see the extension spec for more information)drawCount
- the number of structures in theindirect
arraystride
- the size of oneDrawArraysIndirectBindlessCommandNV
structurevertexBufferCount
- the number of vertex buffers in theDrawArraysIndirectBindlessCommandNV
structure
-
glMultiDrawArraysIndirectBindlessNV
public static void glMultiDrawArraysIndirectBindlessNV(int mode, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawArraysIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawArraysIndirectBindlessCommandNV
structures: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:POINTS
LINE_STRIP
LINE_LOOP
LINES
TRIANGLE_STRIP
TRIANGLE_FAN
TRIANGLES
LINES_ADJACENCY
LINE_STRIP_ADJACENCY
TRIANGLES_ADJACENCY
TRIANGLE_STRIP_ADJACENCY
PATCHES
POLYGON
QUADS
QUAD_STRIP
indirect
- an array ofDrawArraysIndirectBindlessCommandNV
structures (see the extension spec for more information)drawCount
- the number of structures in theindirect
arraystride
- the size of oneDrawArraysIndirectBindlessCommandNV
structurevertexBufferCount
- the number of vertex buffers in theDrawArraysIndirectBindlessCommandNV
structure
-
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 thatindirect
is treated as an array ofdrawCount
DrawElementsIndirectBindlessCommandNV
structures: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:POINTS
LINE_STRIP
LINE_LOOP
LINES
TRIANGLE_STRIP
TRIANGLE_FAN
TRIANGLES
LINES_ADJACENCY
LINE_STRIP_ADJACENCY
TRIANGLES_ADJACENCY
TRIANGLE_STRIP_ADJACENCY
PATCHES
POLYGON
QUADS
QUAD_STRIP
type
- the data type of the element indices. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indirect
- an array ofDrawElementsIndirectBindlessCommandNV
structures (see the extension spec for more information)drawCount
- the number of structures in theindirect
arraystride
- the size of oneDrawElementsIndirectBindlessCommandNV
structurevertexBufferCount
- the number of vertex buffers in theDrawElementsIndirectBindlessCommandNV
structure
-
glMultiDrawElementsIndirectBindlessNV
public static void glMultiDrawElementsIndirectBindlessNV(int mode, int type, long indirect, int drawCount, int stride, int vertexBufferCount) Behaves similar toMultiDrawElementsIndirect
, except thatindirect
is treated as an array ofdrawCount
DrawElementsIndirectBindlessCommandNV
structures: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:POINTS
LINE_STRIP
LINE_LOOP
LINES
TRIANGLE_STRIP
TRIANGLE_FAN
TRIANGLES
LINES_ADJACENCY
LINE_STRIP_ADJACENCY
TRIANGLES_ADJACENCY
TRIANGLE_STRIP_ADJACENCY
PATCHES
POLYGON
QUADS
QUAD_STRIP
type
- the data type of the element indices. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indirect
- an array ofDrawElementsIndirectBindlessCommandNV
structures (see the extension spec for more information)drawCount
- the number of structures in theindirect
arraystride
- the size of oneDrawElementsIndirectBindlessCommandNV
structurevertexBufferCount
- the number of vertex buffers in theDrawElementsIndirectBindlessCommandNV
structure
-