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 as specified, set to zero, set to the number of vertices captured from the vertex stream numbered the last time transform was active on the transform feedback object named , and as specified. The error INVALID_VALUE is generated if is greater than or equal to the value of MAX_VERTEX_STREAMS. Calling DrawTransformFeedbackInstanced is equivalent to calling DrawTransformFeedbackStreamInstanced with set to zero. Calling DrawTransformFeedbackStream is equivalent to calling DrawTransformFeedbackStreamInstanced with set to one. Finally, calling DrawTransformFeedback is equivalent to calling DrawTransformFeedbackStreamInstanced with set to zero and 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 is not an accepted value. INVALID_VALUE is generated by DrawTransformFeedbackStreamInstanced if is greater than or equal to the value of MAX_VERTEX_STREAMS. INVALID_VALUE is generated by DrawTransformFeedbackStreamInstanced if 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