Class EXTDrawElementsBaseVertex
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:
DrawElementsBaseVertexEXT(TRIANGLES, 6, UNSIGNED_BYTE, &indices, 100)
Requires GLES 2.0
.
-
Method Summary
Modifier and TypeMethodDescriptionstatic void
glDrawElementsBaseVertexEXT
(int mode, int count, int type, long indices, int basevertex) static void
glDrawElementsBaseVertexEXT
(int mode, int type, ByteBuffer indices, int basevertex) static void
glDrawElementsBaseVertexEXT
(int mode, ByteBuffer indices, int basevertex) static void
glDrawElementsBaseVertexEXT
(int mode, IntBuffer indices, int basevertex) static void
glDrawElementsBaseVertexEXT
(int mode, ShortBuffer indices, int basevertex) static void
glDrawElementsInstancedBaseVertexEXT
(int mode, int count, int type, long indices, int instancecount, int basevertex) static void
glDrawElementsInstancedBaseVertexEXT
(int mode, int type, ByteBuffer indices, int instancecount, int basevertex) static void
glDrawElementsInstancedBaseVertexEXT
(int mode, ByteBuffer indices, int instancecount, int basevertex) static void
glDrawElementsInstancedBaseVertexEXT
(int mode, IntBuffer indices, int instancecount, int basevertex) static void
glDrawElementsInstancedBaseVertexEXT
(int mode, ShortBuffer indices, int instancecount, int basevertex) static void
glDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, int count, int type, long indices, int basevertex) static void
glDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, int type, ByteBuffer indices, int basevertex) static void
glDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, ByteBuffer indices, int basevertex) static void
glDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, IntBuffer indices, int basevertex) static void
glDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, ShortBuffer indices, int basevertex) static void
glMultiDrawElementsBaseVertexEXT
(int mode, int[] count, int type, PointerBuffer indices, int[] basevertex) Array version of:MultiDrawElementsBaseVertexEXT
static void
glMultiDrawElementsBaseVertexEXT
(int mode, IntBuffer count, int type, PointerBuffer indices, IntBuffer basevertex) static void
nglDrawElementsBaseVertexEXT
(int mode, int count, int type, long indices, int basevertex) static void
nglDrawElementsInstancedBaseVertexEXT
(int mode, int count, int type, long indices, int instancecount, int basevertex) static void
nglDrawRangeElementsBaseVertexEXT
(int mode, int start, int end, int count, int type, long indices, int basevertex) static void
nglMultiDrawElementsBaseVertexEXT
(int mode, long count, int type, long indices, int drawcount, long basevertex)
-
Method Details
-
nglDrawElementsBaseVertexEXT
public static void nglDrawElementsBaseVertexEXT(int mode, int count, int type, long indices, int basevertex) -
glDrawElementsBaseVertexEXT
public static void glDrawElementsBaseVertexEXT(int mode, int count, int type, long indices, int basevertex) -
glDrawElementsBaseVertexEXT
public static void glDrawElementsBaseVertexEXT(int mode, int type, ByteBuffer indices, int basevertex) -
glDrawElementsBaseVertexEXT
-
glDrawElementsBaseVertexEXT
-
glDrawElementsBaseVertexEXT
-
nglDrawRangeElementsBaseVertexEXT
public static void nglDrawRangeElementsBaseVertexEXT(int mode, int start, int end, int count, int type, long indices, int basevertex) -
glDrawRangeElementsBaseVertexEXT
public static void glDrawRangeElementsBaseVertexEXT(int mode, int start, int end, int count, int type, long indices, int basevertex) -
glDrawRangeElementsBaseVertexEXT
public static void glDrawRangeElementsBaseVertexEXT(int mode, int start, int end, int type, ByteBuffer indices, int basevertex) -
glDrawRangeElementsBaseVertexEXT
public static void glDrawRangeElementsBaseVertexEXT(int mode, int start, int end, ByteBuffer indices, int basevertex) -
glDrawRangeElementsBaseVertexEXT
public static void glDrawRangeElementsBaseVertexEXT(int mode, int start, int end, ShortBuffer indices, int basevertex) -
glDrawRangeElementsBaseVertexEXT
public static void glDrawRangeElementsBaseVertexEXT(int mode, int start, int end, IntBuffer indices, int basevertex) -
nglDrawElementsInstancedBaseVertexEXT
public static void nglDrawElementsInstancedBaseVertexEXT(int mode, int count, int type, long indices, int instancecount, int basevertex) -
glDrawElementsInstancedBaseVertexEXT
public static void glDrawElementsInstancedBaseVertexEXT(int mode, int count, int type, long indices, int instancecount, int basevertex) -
glDrawElementsInstancedBaseVertexEXT
public static void glDrawElementsInstancedBaseVertexEXT(int mode, int type, ByteBuffer indices, int instancecount, int basevertex) -
glDrawElementsInstancedBaseVertexEXT
public static void glDrawElementsInstancedBaseVertexEXT(int mode, ByteBuffer indices, int instancecount, int basevertex) -
glDrawElementsInstancedBaseVertexEXT
public static void glDrawElementsInstancedBaseVertexEXT(int mode, ShortBuffer indices, int instancecount, int basevertex) -
glDrawElementsInstancedBaseVertexEXT
public static void glDrawElementsInstancedBaseVertexEXT(int mode, IntBuffer indices, int instancecount, int basevertex) -
nglMultiDrawElementsBaseVertexEXT
public static void nglMultiDrawElementsBaseVertexEXT(int mode, long count, int type, long indices, int drawcount, long basevertex) -
glMultiDrawElementsBaseVertexEXT
public static void glMultiDrawElementsBaseVertexEXT(int mode, IntBuffer count, int type, PointerBuffer indices, IntBuffer basevertex) -
glMultiDrawElementsBaseVertexEXT
public static void glMultiDrawElementsBaseVertexEXT(int mode, int[] count, int type, PointerBuffer indices, int[] basevertex) Array version of:MultiDrawElementsBaseVertexEXT
-