Class ARBDrawIndirect
This extension provides a mechanism for supplying the arguments to a DrawArraysInstanced or DrawElementsInstancedBaseVertex from buffer object memory. This is not particularly useful for applications where the CPU knows the values of the arguments beforehand, but is helpful when the values will be generated on the GPU through any mechanism that can write to a buffer object including image stores, atomic counters, or compute interop. This allows the GPU to consume these arguments without a round- trip to the CPU or the expensive synchronization that would involve. This is similar to the DrawTransformFeedbackEXT command from EXT_transform_feedback2, but offers much more flexibility in both generating the arguments and in the type of Draws that can be accomplished.
Requires OpenGL 3.1
. Promoted to core in OpenGL 4.0
.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
Accepted by thetarget
parameters of BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, GetBufferPointerv, MapBufferRange, FlushMappedBufferRange, GetBufferParameteriv, and CopyBufferSubData.static final int
Accepted by thevalue
parameter of GetIntegerv, GetBooleanv, GetFloatv, and GetDoublev. -
Method Summary
Modifier and TypeMethodDescriptionstatic void
glDrawArraysIndirect
(int mode, int[] indirect) Array version of:DrawArraysIndirect
static void
glDrawArraysIndirect
(int mode, long indirect) Renders primitives from array data, taking parameters from memory.static void
glDrawArraysIndirect
(int mode, ByteBuffer indirect) Renders primitives from array data, taking parameters from memory.static void
glDrawArraysIndirect
(int mode, IntBuffer indirect) Renders primitives from array data, taking parameters from memory.static void
glDrawElementsIndirect
(int mode, int type, int[] indirect) Array version of:DrawElementsIndirect
static void
glDrawElementsIndirect
(int mode, int type, long indirect) Renders indexed primitives from array data, taking parameters from memory.static void
glDrawElementsIndirect
(int mode, int type, ByteBuffer indirect) Renders indexed primitives from array data, taking parameters from memory.static void
glDrawElementsIndirect
(int mode, int type, IntBuffer indirect) Renders indexed primitives from array data, taking parameters from memory.static void
nglDrawArraysIndirect
(int mode, long indirect) Unsafe version of:DrawArraysIndirect
static void
nglDrawElementsIndirect
(int mode, int type, long indirect) Unsafe version of:DrawElementsIndirect
-
Field Details
-
GL_DRAW_INDIRECT_BUFFER
public static final int GL_DRAW_INDIRECT_BUFFERAccepted by thetarget
parameters of BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, GetBufferPointerv, MapBufferRange, FlushMappedBufferRange, GetBufferParameteriv, and CopyBufferSubData.- See Also:
-
GL_DRAW_INDIRECT_BUFFER_BINDING
public static final int GL_DRAW_INDIRECT_BUFFER_BINDINGAccepted by thevalue
parameter of GetIntegerv, GetBooleanv, GetFloatv, and GetDoublev.- See Also:
-
-
Method Details
-
nglDrawArraysIndirect
public static void nglDrawArraysIndirect(int mode, long indirect) Unsafe version of:DrawArraysIndirect
-
glDrawArraysIndirect
Renders primitives from array data, taking parameters from memory.glDrawArraysIndirect
behaves similarly toDrawArraysInstancedBaseInstance
, except that the parameters to glDrawArraysInstancedBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint first; uint baseInstance; // must be 0 unless OpenGL 4.2 is supported } DrawArraysIndirectCommand; const DrawArraysIndirectCommand *cmd = (const DrawArraysIndirectCommand *)indirect; glDrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count, cmd->primCount, cmd->baseInstance);
- Parameters:
mode
- what kind of primitives to render. 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
- a structure containing the draw parameters
-
glDrawArraysIndirect
public static void glDrawArraysIndirect(int mode, long indirect) Renders primitives from array data, taking parameters from memory.glDrawArraysIndirect
behaves similarly toDrawArraysInstancedBaseInstance
, except that the parameters to glDrawArraysInstancedBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint first; uint baseInstance; // must be 0 unless OpenGL 4.2 is supported } DrawArraysIndirectCommand; const DrawArraysIndirectCommand *cmd = (const DrawArraysIndirectCommand *)indirect; glDrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count, cmd->primCount, cmd->baseInstance);
- Parameters:
mode
- what kind of primitives to render. 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
- a structure containing the draw parameters
-
glDrawArraysIndirect
Renders primitives from array data, taking parameters from memory.glDrawArraysIndirect
behaves similarly toDrawArraysInstancedBaseInstance
, except that the parameters to glDrawArraysInstancedBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint first; uint baseInstance; // must be 0 unless OpenGL 4.2 is supported } DrawArraysIndirectCommand; const DrawArraysIndirectCommand *cmd = (const DrawArraysIndirectCommand *)indirect; glDrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count, cmd->primCount, cmd->baseInstance);
- Parameters:
mode
- what kind of primitives to render. 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
- a structure containing the draw parameters
-
nglDrawElementsIndirect
public static void nglDrawElementsIndirect(int mode, int type, long indirect) Unsafe version of:DrawElementsIndirect
-
glDrawElementsIndirect
Renders indexed primitives from array data, taking parameters from memory.glDrawElementsIndirect
behaves similarly toDrawElementsInstancedBaseVertexBaseInstance
, execpt that the parameters to glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint firstIndex; uint baseVertex; uint baseInstance; } DrawElementsIndirectCommand;
glDrawElementsIndirect
is equivalent to:void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect) { const DrawElementsIndirectCommand *cmd = (const DrawElementsIndirectCommand *)indirect; glDrawElementsInstancedBaseVertexBaseInstance( mode, cmd->count, type, cmd->firstIndex + size-of-type, cmd->primCount, cmd->baseVertex, cmd->baseInstance ); }
- Parameters:
mode
- what kind of primitives to render. 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 type of data in the buffer bound to theELEMENT_ARRAY_BUFFER
binding. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indirect
- the address of a structure containing the draw parameters
-
glDrawElementsIndirect
public static void glDrawElementsIndirect(int mode, int type, long indirect) Renders indexed primitives from array data, taking parameters from memory.glDrawElementsIndirect
behaves similarly toDrawElementsInstancedBaseVertexBaseInstance
, execpt that the parameters to glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint firstIndex; uint baseVertex; uint baseInstance; } DrawElementsIndirectCommand;
glDrawElementsIndirect
is equivalent to:void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect) { const DrawElementsIndirectCommand *cmd = (const DrawElementsIndirectCommand *)indirect; glDrawElementsInstancedBaseVertexBaseInstance( mode, cmd->count, type, cmd->firstIndex + size-of-type, cmd->primCount, cmd->baseVertex, cmd->baseInstance ); }
- Parameters:
mode
- what kind of primitives to render. 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 type of data in the buffer bound to theELEMENT_ARRAY_BUFFER
binding. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indirect
- the address of a structure containing the draw parameters
-
glDrawElementsIndirect
Renders indexed primitives from array data, taking parameters from memory.glDrawElementsIndirect
behaves similarly toDrawElementsInstancedBaseVertexBaseInstance
, execpt that the parameters to glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given byindirect
.The parameters addressed by
indirect
are packed into a structure that takes the form (in C):typedef struct { uint count; uint primCount; uint firstIndex; uint baseVertex; uint baseInstance; } DrawElementsIndirectCommand;
glDrawElementsIndirect
is equivalent to:void glDrawElementsIndirect(GLenum mode, GLenum type, const void *indirect) { const DrawElementsIndirectCommand *cmd = (const DrawElementsIndirectCommand *)indirect; glDrawElementsInstancedBaseVertexBaseInstance( mode, cmd->count, type, cmd->firstIndex + size-of-type, cmd->primCount, cmd->baseVertex, cmd->baseInstance ); }
- Parameters:
mode
- what kind of primitives to render. 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 type of data in the buffer bound to theELEMENT_ARRAY_BUFFER
binding. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indirect
- the address of a structure containing the draw parameters
-
glDrawArraysIndirect
public static void glDrawArraysIndirect(int mode, int[] indirect) Array version of:DrawArraysIndirect
-
glDrawElementsIndirect
public static void glDrawElementsIndirect(int mode, int type, int[] indirect) Array version of:DrawElementsIndirect
-