public class ARBDrawIndirect
extends java.lang.Object
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.
| Modifier and Type | Field and Description |
|---|---|
static int |
GL_DRAW_INDIRECT_BUFFER
Accepted by the
target parameters of BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, GetBufferPointerv,
MapBufferRange, FlushMappedBufferRange, GetBufferParameteriv, and CopyBufferSubData. |
static int |
GL_DRAW_INDIRECT_BUFFER_BINDING
Accepted by the
value parameter of GetIntegerv, GetBooleanv, GetFloatv, and GetDoublev. |
| Modifier and Type | Method and Description |
|---|---|
static void |
glDrawArraysIndirect(int mode,
java.nio.ByteBuffer indirect)
Renders primitives from array data, taking parameters from memory.
|
static void |
glDrawArraysIndirect(int mode,
int[] indirect)
Array version of:
DrawArraysIndirect |
static void |
glDrawArraysIndirect(int mode,
java.nio.IntBuffer indirect)
Renders primitives from array data, taking parameters from memory.
|
static void |
glDrawArraysIndirect(int mode,
long indirect)
Renders primitives from array data, taking parameters from memory.
|
static void |
glDrawElementsIndirect(int mode,
int type,
java.nio.ByteBuffer indirect)
Renders indexed 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,
java.nio.IntBuffer indirect)
Renders indexed primitives from array data, taking parameters from memory.
|
static void |
glDrawElementsIndirect(int mode,
int type,
long 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 |
public static final int GL_DRAW_INDIRECT_BUFFER
target parameters of BindBuffer, BufferData, BufferSubData, MapBuffer, UnmapBuffer, GetBufferSubData, GetBufferPointerv,
MapBufferRange, FlushMappedBufferRange, GetBufferParameteriv, and CopyBufferSubData.public static final int GL_DRAW_INDIRECT_BUFFER_BINDING
value parameter of GetIntegerv, GetBooleanv, GetFloatv, and GetDoublev.public static void nglDrawArraysIndirect(int mode,
long indirect)
DrawArraysIndirectpublic static void glDrawArraysIndirect(int mode,
java.nio.ByteBuffer indirect)
glDrawArraysIndirect behaves similarly to DrawArraysInstancedBaseInstance, except that the parameters to
glDrawArraysInstancedBaseInstance are stored in memory at the address given by indirect.
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);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 parameterspublic static void glDrawArraysIndirect(int mode,
long indirect)
glDrawArraysIndirect behaves similarly to DrawArraysInstancedBaseInstance, except that the parameters to
glDrawArraysInstancedBaseInstance are stored in memory at the address given by indirect.
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);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 parameterspublic static void glDrawArraysIndirect(int mode,
java.nio.IntBuffer indirect)
glDrawArraysIndirect behaves similarly to DrawArraysInstancedBaseInstance, except that the parameters to
glDrawArraysInstancedBaseInstance are stored in memory at the address given by indirect.
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);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 parameterspublic static void nglDrawElementsIndirect(int mode,
int type,
long indirect)
DrawElementsIndirectpublic static void glDrawElementsIndirect(int mode,
int type,
java.nio.ByteBuffer indirect)
glDrawElementsIndirect behaves similarly to DrawElementsInstancedBaseVertexBaseInstance, execpt that the parameters to
glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given by indirect.
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
);
}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 the ELEMENT_ARRAY_BUFFER binding. One of:UNSIGNED_BYTE | UNSIGNED_SHORT | UNSIGNED_INT |
indirect - the address of a structure containing the draw parameterspublic static void glDrawElementsIndirect(int mode,
int type,
long indirect)
glDrawElementsIndirect behaves similarly to DrawElementsInstancedBaseVertexBaseInstance, execpt that the parameters to
glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given by indirect.
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
);
}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 the ELEMENT_ARRAY_BUFFER binding. One of:UNSIGNED_BYTE | UNSIGNED_SHORT | UNSIGNED_INT |
indirect - the address of a structure containing the draw parameterspublic static void glDrawElementsIndirect(int mode,
int type,
java.nio.IntBuffer indirect)
glDrawElementsIndirect behaves similarly to DrawElementsInstancedBaseVertexBaseInstance, execpt that the parameters to
glDrawElementsInstancedBaseVertexBaseInstance are stored in memory at the address given by indirect.
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
);
}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 the ELEMENT_ARRAY_BUFFER binding. One of:UNSIGNED_BYTE | UNSIGNED_SHORT | UNSIGNED_INT |
indirect - the address of a structure containing the draw parameterspublic static void glDrawArraysIndirect(int mode,
int[] indirect)
DrawArraysIndirectpublic static void glDrawElementsIndirect(int mode,
int type,
int[] indirect)
DrawElementsIndirectCopyright LWJGL. All Rights Reserved. License terms.