blob: 57d4506a7ebe63e151ddf2c9ad34c4e14c35ade5 [file] [log] [blame]
Name
ARB_transform_feedback_instanced
Name Strings
GL_ARB_transform_feedback_instanced
Contact
Graham Sellers, AMD (graham.sellers 'at' amd.com)
Contributors
XXX
Notice
Copyright (c) 2011-2013 The Khronos Group Inc. Copyright terms at
http://www.khronos.org/registry/speccopyright.html
Specification Update Policy
Khronos-approved extension specifications are updated in response to
issues and bugs prioritized by the Khronos OpenGL Working Group. For
extensions which have been promoted to a core Specification, fixes will
first appear in the latest version of that core Specification, and will
eventually be backported to the extension document. This policy is
described in more detail at
https://www.khronos.org/registry/OpenGL/docs/update_policy.php
Status
Complete. Approved by the ARB on 2011/06/20.
Approved by the Khronos Promoters on 2011/07/29.
Version
Last Modified Date: December 15th, 2010
Revision: 2
Number
ARB Extension #109
Dependencies
OpenGL 4.0 or the ARB_transform_feedback2 extension is required.
OpenGL 3.1 or the ARB_draw_instanced extension is required.
This extension interacts with the ARB_transform_feedback3 extension.
This extension is written against the OpenGL 4.1 (Core Profile) specification.
Overview
Multiple instances of geometry may be specified to the GL by calling
functions such as DrawArraysInstanced and DrawElementsInstanced. Further,
the results of a transform feedback operation may be returned to the GL
by calling DrawTransformFeedback, or DrawTransformFeedbackStream. However,
it is not presently possible to draw multiple instances of data
transform feedback without using a query and the resulting round trip from
server to client.
This extension adds functionality to draw multiple instances of the result
of a transform feedback operation.
New Procedures and Functions
void DrawTransformFeedbackInstanced(enum mode, uint id, sizei primcount);
void DrawTransformFeedbackStreamInstanced(enum mode, uint id, uint stream, sizei primcount);
New Tokens
None.
Additions to Chapter 2 of the OpenGL 4.1 (Core Profile) Specification
(OpenGL Operation)
Modify Section 2.17.3, "Transform Feedback Draw Operations"
... The number of vertices captured from each vertex stream during transform
feedback is stored in the corresponding transform feedback object and may
be used in conjunction with the commands
void DrawTransformFeedback(enum mode, uint id);
void DrawTransformFeedbackInstanced(enum mode, uint id, sizei primcount);
void DrawTransformFeedbackStream(enum mode, uint id, uint stream);
void DrawTransformFeedbackStreamInstanced(enum mode, uint id, uint stream, sizei primcount);
to replay the captured vertices.
DrawTransformFeedbackStreamInstanced is equivalent to calling
DrawArraysInstanced with <mode> as specified, <first> set to zero, <count>
set to the number of vertices captured from the vertex stream numbered
<stream> the last time transform was active on the transform feedback
object named <id>, and <primcount> as specified. The error INVALID_VALUE
is generated if <stream> is greater than or equal to the value of
MAX_VERTEX_STREAMS. Calling DrawTransformFeedbackInstanced is equivalent
to calling DrawTransformFeedbackStreamInstanced with <stream> set to zero.
Calling DrawTransformFeedbackStream is equivalent to calling
DrawTransformFeedbackStreamInstanced with <primcount> set to one. Finally,
calling DrawTransformFeedback is equivalent to calling
DrawTransformFeedbackStreamInstanced with <stream> set to zero and
<primcount> set to one.
Additions to Chapter 3 of the OpenGL 4.1 (Core Profile) Specification
(Rasterization)
None.
Additions to Chapter 4 of the OpenGL 4.1 (Core Profile) Specification
(Per-Fragment Operations and the Framebuffer)
None.
Additions to Chapter 5 of the OpenGL 4.1 (Core Profile) Specification
(Special Functions)
None.
Additions to Chapter 6 of the OpenGL 4.1 (Core Profile) Specification
(State and State Requests)
None.
Errors
INVALID_ENUM is generated by DrawTransformFeedbackStreamInstanced if <mode>
is not an accepted value.
INVALID_VALUE is generated by DrawTransformFeedbackStreamInstanced if
<stream> is greater than or equal to the value of MAX_VERTEX_STREAMS.
INVALID_VALUE is generated by DrawTransformFeedbackStreamInstanced if
<id> is not the name of a transform feedback object.
INVALID_OPERATION is generated by DrawTransformFeedbackStreamInstanced if a
non-zero buffer object name is bound to an enabled array and the buffer
object's data store is currently mapped.
INVALID_OPERATION is generated by DrawTransformFeedbackStreamInstanced if a
geometry shader is active and mode is incompatible with the input primitive
type of the geometry shader in the currently installed program object.
INVALID_OPERATION is generated if by DrawTransformFeedbackStreamInstanced if
mode is PATCHES and no tessellation control shader is active.
INVALID_OPERATION is generated if by DrawTransformFeedbackStreamInstanced if
glEndTransformFeedback has never been called while the transform feedback
object named by id was bound.
Other errors generated by DrawElements, DrawArrays or other drawing commands
(for example, due to framebuffer incompleteness) may be generated by
DrawTransformFeedbackStreamInstanced.
Dependencies on OpenGL 4.0 and GL_ARB_transform_feedback3
If the GL version is less than 4.0, and if GL_ARB_transform_feedback3 is
not supported, this extension only adds DrawTransformFeedbackInstanced
(not DrawTransformFeedbackStreamInstanced). In that case, remove all
references to DrawTransformFeedbackStreamInstanced and instead define
DrawTransformFeedback in terms of DrawTransformFeedbackInstanced.
Issues
1) Do I need OpenGL 3.1, OpenGL 4.0 or ARB_transform_feedback3?
If you have ARB_draw_transform_feedback3 or OpenGL 4.0, you're good to go.
You need at least OpenGL 3.1 _with_ ARB_transform_feedback3.
2) Do we need a DrawTransformFeedbackStreamInstancedBaseInstance when both
this extension and ARB_base_instance are present?
Perhaps. That's a bit wordy. Not adding it for now. How about in
ARB_transform_feedback_instanced2?
Revision History
Rev. Date Author Changes
---- -------- -------- -----------------------------------------
2 12/15/10 gsellers Address comments from bmerry (bug 6961)
1 09/23/10 gsellers Initial revision