зеркало из https://github.com/AvaloniaUI/angle.git
235 строки
7.2 KiB
Plaintext
235 строки
7.2 KiB
Plaintext
Name
|
|
|
|
ANGLE_multi_draw
|
|
|
|
Name Strings
|
|
|
|
GL_ANGLE_multi_draw
|
|
|
|
Contributors
|
|
|
|
Austin Eng, Google Inc.
|
|
Kai Ninomiya, Google Inc.
|
|
Kenneth Russell, Google Inc.
|
|
Contributors to the EXT_multi_draw_arrays specification
|
|
Contributors to the ARB_shader_draw_parameters specification
|
|
|
|
Contact
|
|
|
|
Austin Eng (enga 'at' google.com)
|
|
|
|
Status
|
|
|
|
Incomplete
|
|
|
|
Version
|
|
|
|
Last Modified Date: October 24, 2018
|
|
Author Revision: 1
|
|
|
|
Number
|
|
|
|
OpenGL ES Extension XX
|
|
|
|
Dependencies
|
|
|
|
OpenGL ES 2.0 is required.
|
|
|
|
This extension is written against the OpenGL ES 2.0 specification,
|
|
the OpenGL ES 3.0 specification, and the OpenGL ES Shading Language 3.0
|
|
specification.
|
|
|
|
The presence of the GL_ANGLE_instanced_arrays or GL_EXT_instanced_arrays
|
|
extensions affects the definition of this extension.
|
|
|
|
Overview
|
|
|
|
This extension exposes the Multi* draw call variants in
|
|
EXT_multi_draw_arrays functionality in addition to the vertex shader builtin
|
|
gl_DrawID exposed by ARB_shader_draw_parameters for OpenGL.
|
|
|
|
These functions behave identically to the standard functions
|
|
DrawArrays() and DrawElements() except they handle multiple lists of
|
|
vertices in one call. Their main purpose is to allow one function call
|
|
to render more than one primitive such as triangle strip, triangle fan,
|
|
etc.
|
|
|
|
Additionally, this extension adds a further built-in variable, gl_DrawID
|
|
to the shading language. This variable contains the index of the draw
|
|
currently being processed by a Multi* variant of a drawing command.
|
|
|
|
IP Status
|
|
|
|
No known IP claims.
|
|
|
|
New Procedures and Functions
|
|
|
|
void MultiDrawArraysANGLE(enum mode,
|
|
const int *firsts,
|
|
const sizei *counts,
|
|
sizei drawcount);
|
|
|
|
void MultiDrawElementsANGLE(enum mode,
|
|
const sizei *counts,
|
|
enum type,
|
|
const void *const *indices,
|
|
sizei drawcount);
|
|
|
|
void MultiDrawArraysInstancedANGLE(enum mode,
|
|
const int *firsts,
|
|
const sizei *counts,
|
|
const sizei *instanceCounts,
|
|
sizei drawcount);
|
|
|
|
void MultiDrawElementsInstancedANGLE(enum mode,
|
|
const sizei *counts,
|
|
enum type,
|
|
const void *const *indices,
|
|
const sizei *instanceCounts,
|
|
sizei drawcount);
|
|
|
|
New Tokens
|
|
|
|
None.
|
|
|
|
Additions to Chapter 2 of the OpenGL ES 2.0 Specification
|
|
|
|
Section 2.8 Vertex Arrays:
|
|
|
|
The command
|
|
|
|
void MultiDrawArraysANGLE(
|
|
enum mode,
|
|
const int *firsts,
|
|
const sizei *counts,
|
|
sizei drawcount)
|
|
|
|
Behaves identically to DrawArrays except that a list of arrays is
|
|
specified instead. The number of lists is specified in the drawcount
|
|
parameter. It has the same effect as:
|
|
|
|
for(i=0; i<drawcount; i++) {
|
|
if (*(counts+i)>0) DrawArrays(mode, *(firsts+i), *(counts+i));
|
|
}
|
|
|
|
The index of the draw (<i> in the above pseudo-code) may be read by
|
|
a vertex shader as <gl_DrawID>.
|
|
|
|
The command
|
|
|
|
void MultiDrawElementsANGLE(
|
|
enum mode,
|
|
const sizei *counts,
|
|
enum type,
|
|
const void *const *indices,
|
|
sizei drawcount)
|
|
|
|
Behaves identically to DrawElements except that a list of arrays is
|
|
specified instead. The number of lists is specified in the drawcount
|
|
parameter. It has the same effect as:
|
|
|
|
for(i=0; i<drawcount; i++) {
|
|
if (*(counts+i)>0) {
|
|
DrawElements(mode, *(counts+i), type, *(indices+i));
|
|
}
|
|
}
|
|
|
|
The index of the draw (<i> in the above pseudo-code) may be read by
|
|
a vertex shader as <gl_DrawID>.
|
|
|
|
Additions to Chapter 2 of the OpenGL ES 3.0 Specification
|
|
|
|
Section 2.9.3 Drawing Commands:
|
|
|
|
The command
|
|
|
|
void MultiDrawArraysInstancedANGLE(
|
|
enum mode,
|
|
const int *firsts,
|
|
const sizei *counts,
|
|
const sizei *instanceCounts,
|
|
sizei drawcount)
|
|
|
|
Behaves identically to DrawArraysInstanced except that a list of arrays is
|
|
specified instead. The number of lists is specified in the drawcount
|
|
parameter. It has the same effect as:
|
|
|
|
for(i=0; i<drawcount; i++) {
|
|
if (*(counts+i)>0) DrawArraysInstanced(mode, *(firsts+i), *(counts+i),
|
|
*(instanceCounts+1));
|
|
}
|
|
|
|
The index of the draw (<i> in the above pseudo-code) may be read by
|
|
a vertex shader as <gl_DrawID>.
|
|
|
|
The command
|
|
|
|
void MultiDrawElementsInstancedANGLE(
|
|
enum mode,
|
|
sizei *counts,
|
|
enum type,
|
|
const void *const *indices,
|
|
const sizei *instanceCounts,
|
|
sizei drawcount)
|
|
|
|
Behaves identically to DrawElementsInstanced except that a list of arrays is
|
|
specified instead. The number of lists is specified in the drawcount
|
|
parameter. It has the same effect as:
|
|
|
|
for(i=0; i<drawcount; i++) {
|
|
if (*(counts+i)>0) {
|
|
DrawElementsInstanced(mode, *(counts+i), type,
|
|
*(indices+i), *(instanceCounts+1));
|
|
}
|
|
}
|
|
|
|
The index of the draw (<i> in the above pseudo-code) may be read by
|
|
a vertex shader as <gl_DrawID>.
|
|
|
|
Errors
|
|
|
|
The error INVALID_VALUE is generated by the new functions if <drawcount>
|
|
is less than 0.
|
|
|
|
MultiDrawArraysANGLE, MultiDrawElementsANGLE,
|
|
MultiDrawArraysInstancedANGLE, and MultiDrawElementsInstancedANGLE generate
|
|
the same errors as DrawArrays, DrawElements, DrawArraysInstanced,
|
|
and DrawElementsInstanced, respectively, for any draw <i> where an error
|
|
is generated. If any call would produce an error, no drawing is performed.
|
|
|
|
Modifications to the OpenGL ES Shading Language Specification, Version 3.00
|
|
|
|
Including the following line in a shader can be used to control the
|
|
language featured described in this extension:
|
|
|
|
#extension GL_ANGLE_multi_draw : <behavior>
|
|
|
|
where <behavior> is as specified in section 3.5.
|
|
|
|
A new preprocessor #define is added to the OpenGL ES Shading Language:
|
|
|
|
#define GL_ANGLE_multi_draw 1
|
|
|
|
Dependencies on GL_ANGLE_instanced_arrays
|
|
|
|
If GL_ANGLE_instanced_arrays or GL_EXT_instanced_arrays is enabled,
|
|
append the lanuage in "Additions to Chapter 2 of the OpenGL ES 3.0
|
|
Specification, Section 2.9.3 Drawing Commands" to the language in
|
|
"Additions to Chapter 2 of the OpenGL ES 2.0 Specification, Section
|
|
2.8 Vertex Arrays".
|
|
|
|
If GL_ANGLE_instanced_arrays or GL_EXT_instanced_arrays is not enabled
|
|
and the context is less than a OpenGL ES 3.0 context, the error
|
|
INVALID_OPERATION is generated by any call to the functions
|
|
MultiDrawArraysInstancedANGLE and MultiDrawElementsInstancedANGLE.
|
|
|
|
Issues
|
|
None
|
|
|
|
Revision History
|
|
|
|
Rev. Date Author Changes
|
|
---- -------- ---------------- --------------------------------------------
|
|
1 10/24/18 Austin Eng First revision.
|
|
2 10/25/18 Austin Eng Add instanced variants.
|
|
3 06/21/22 Alexey Knyazev Fixed typos and type usage. |