Class ARBDrawElementsBaseVertex
This extension provides a method to specify a "base vertex offset" value which is effectively added to every vertex index that is transferred through
DrawElements
.
This mechanism can be used to decouple a set of indices from the actual vertex array that it is referencing. This is useful if an application stores multiple indexed models in a single vertex array. The same index array can be used to draw the model no matter where it ends up in a larger vertex array simply by changing the base vertex value. Without this functionality, it would be necessary to rebind all the vertex attributes every time geometry is switched and this can have larger performance penalty.
For example consider the (very contrived and simple) example of drawing two triangles to form a quad. In the typical example you have the following setup:
vertices indices
---------- -----
0 | (-1, 1) | 0 | 0 |
1 | (-1, -1) | 1 | 1 |
2 | ( 1, -1) | 2 | 2 |
3 | ( 1, 1) | 3 | 3 |
---------- 4 | 0 |
5 | 2 |
-----
which is normally rendered with the call
DrawElements(TRIANGLES, 6, UNSIGNED_BYTE, &indices).
Now consider the case where the vertices you want to draw are not at the start of a vertex array but are instead located at offset 100 into a larger array:
vertices2 indices2
---------- -----
.... 0 | 100 |
100 | (-1, 1) | 1 | 101 |
101 | (-1, -1) | 2 | 102 |
102 | ( 1, -1) | 3 | 103 |
103 | ( 1, 1) | 4 | 100 |
.... 5 | 102 |
---------- -----
The typical choices for rendering this are to rebind your vertex attributes with an additional offset of 100*stride, or to create an new array of indices (as indices2 in the example). However both rebinding vertex attributes and rebuilding index arrays can be quite costly activities.
With the new drawing commands introduced by this extension you can instead draw using vertices2 and the new draw call:
DrawElementsBaseVertex(TRIANGLES, 6, UNSIGNED_BYTE, &indices, 100)
Promoted to core in OpenGL 3.2
.
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
glDrawElementsBaseVertex
(int mode, int count, int type, long indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawElementsBaseVertex
(int mode, int type, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawElementsBaseVertex
(int mode, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawElementsBaseVertex
(int mode, IntBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawElementsBaseVertex
(int mode, ShortBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawElementsInstancedBaseVertex
(int mode, int count, int type, long indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.static void
glDrawElementsInstancedBaseVertex
(int mode, int type, ByteBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.static void
glDrawElementsInstancedBaseVertex
(int mode, ByteBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.static void
glDrawElementsInstancedBaseVertex
(int mode, IntBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.static void
glDrawElementsInstancedBaseVertex
(int mode, ShortBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.static void
glDrawRangeElementsBaseVertex
(int mode, int start, int end, int count, int type, long indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawRangeElementsBaseVertex
(int mode, int start, int end, int type, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawRangeElementsBaseVertex
(int mode, int start, int end, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawRangeElementsBaseVertex
(int mode, int start, int end, IntBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glDrawRangeElementsBaseVertex
(int mode, int start, int end, ShortBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.static void
glMultiDrawElementsBaseVertex
(int mode, int[] count, int type, PointerBuffer indices, int[] basevertex) Array version of:MultiDrawElementsBaseVertex
static void
glMultiDrawElementsBaseVertex
(int mode, IntBuffer count, int type, PointerBuffer indices, IntBuffer basevertex) Renders multiple sets of primitives by specifying indices of array data elements and an offset to apply to each index.static void
nglDrawElementsBaseVertex
(int mode, int count, int type, long indices, int basevertex) Unsafe version of:DrawElementsBaseVertex
static void
nglDrawElementsInstancedBaseVertex
(int mode, int count, int type, long indices, int primcount, int basevertex) Unsafe version of:DrawElementsInstancedBaseVertex
static void
nglDrawRangeElementsBaseVertex
(int mode, int start, int end, int count, int type, long indices, int basevertex) Unsafe version of:DrawRangeElementsBaseVertex
static void
nglMultiDrawElementsBaseVertex
(int mode, long count, int type, long indices, int drawcount, long basevertex) Unsafe version of:MultiDrawElementsBaseVertex
-
Method Details
-
nglDrawElementsBaseVertex
public static void nglDrawElementsBaseVertex(int mode, int count, int type, long indices, int basevertex) Unsafe version of:DrawElementsBaseVertex
- Parameters:
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
-
glDrawElementsBaseVertex
public static void glDrawElementsBaseVertex(int mode, int count, int type, long indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawElementsBaseVertex
Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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 the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawElementsBaseVertex
Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawElementsBaseVertex
Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawElementsBaseVertex
Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
nglDrawRangeElementsBaseVertex
public static void nglDrawRangeElementsBaseVertex(int mode, int start, int end, int count, int type, long indices, int basevertex) Unsafe version of:DrawRangeElementsBaseVertex
- Parameters:
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
-
glDrawRangeElementsBaseVertex
public static void glDrawRangeElementsBaseVertex(int mode, int start, int end, int count, int type, long indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
start
- the minimum array index contained inindices
end
- the maximum array index contained inindices
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawRangeElementsBaseVertex
public static void glDrawRangeElementsBaseVertex(int mode, int start, int end, int type, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
start
- the minimum array index contained inindices
end
- the maximum array index contained inindices
type
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawRangeElementsBaseVertex
public static void glDrawRangeElementsBaseVertex(int mode, int start, int end, ByteBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
start
- the minimum array index contained inindices
end
- the maximum array index contained inindices
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawRangeElementsBaseVertex
public static void glDrawRangeElementsBaseVertex(int mode, int start, int end, ShortBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
start
- the minimum array index contained inindices
end
- the maximum array index contained inindices
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
glDrawRangeElementsBaseVertex
public static void glDrawRangeElementsBaseVertex(int mode, int start, int end, IntBuffer indices, int basevertex) Renders primitives from array data with a per-element offset.- Parameters:
mode
- the 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
start
- the minimum array index contained inindices
end
- the maximum array index contained inindices
indices
- a pointer to the location where the indices are storedbasevertex
- a constant that should be added to each element ofindices
when choosing elements from the enabled vertex arrays
-
nglDrawElementsInstancedBaseVertex
public static void nglDrawElementsInstancedBaseVertex(int mode, int count, int type, long indices, int primcount, int basevertex) Unsafe version of:DrawElementsInstancedBaseVertex
- Parameters:
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
-
glDrawElementsInstancedBaseVertex
public static void glDrawElementsInstancedBaseVertex(int mode, int count, int type, long indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.- Parameters:
mode
- the 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
count
- the number of elements to be renderedtype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedprimcount
- the number of instances of the indexed geometry that should be drawnbasevertex
- a constant that should be added to each element of indices when chosing elements from the enabled vertex arrays
-
glDrawElementsInstancedBaseVertex
public static void glDrawElementsInstancedBaseVertex(int mode, int type, ByteBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.- Parameters:
mode
- the 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 the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedprimcount
- the number of instances of the indexed geometry that should be drawnbasevertex
- a constant that should be added to each element of indices when chosing elements from the enabled vertex arrays
-
glDrawElementsInstancedBaseVertex
public static void glDrawElementsInstancedBaseVertex(int mode, ByteBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedprimcount
- the number of instances of the indexed geometry that should be drawnbasevertex
- a constant that should be added to each element of indices when chosing elements from the enabled vertex arrays
-
glDrawElementsInstancedBaseVertex
public static void glDrawElementsInstancedBaseVertex(int mode, ShortBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedprimcount
- the number of instances of the indexed geometry that should be drawnbasevertex
- a constant that should be added to each element of indices when chosing elements from the enabled vertex arrays
-
glDrawElementsInstancedBaseVertex
public static void glDrawElementsInstancedBaseVertex(int mode, IntBuffer indices, int primcount, int basevertex) Renders multiple instances of a set of primitives from array data with a per-element offset.- Parameters:
mode
- the 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
indices
- a pointer to the location where the indices are storedprimcount
- the number of instances of the indexed geometry that should be drawnbasevertex
- a constant that should be added to each element of indices when chosing elements from the enabled vertex arrays
-
nglMultiDrawElementsBaseVertex
public static void nglMultiDrawElementsBaseVertex(int mode, long count, int type, long indices, int drawcount, long basevertex) Unsafe version of:MultiDrawElementsBaseVertex
- Parameters:
drawcount
- the size of thecount
array
-
glMultiDrawElementsBaseVertex
public static void glMultiDrawElementsBaseVertex(int mode, IntBuffer count, int type, PointerBuffer indices, IntBuffer basevertex) Renders multiple sets of primitives by specifying indices of array data elements and an offset to apply to each index.LWJGL note: Use
MemoryUtil.memAddress(java.nio.ByteBuffer)
to retrieve pointers to the index buffers.- Parameters:
mode
- the 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
count
- an array of the elements countstype
- the type of the values inindices
. One of:UNSIGNED_BYTE
UNSIGNED_SHORT
UNSIGNED_INT
indices
- a pointer to the location where the indices are storedbasevertex
- a pointer to the location where the base vertices are stored
-
glMultiDrawElementsBaseVertex
public static void glMultiDrawElementsBaseVertex(int mode, int[] count, int type, PointerBuffer indices, int[] basevertex) Array version of:MultiDrawElementsBaseVertex
-