## Name

glBeginTransformFeedback — start transform feedback operation

## C Specification

`void glBeginTransformFeedback(` | GLenum primitiveMode`)`;

`void glEndTransformFeedback(` | void`)`;

## Parameters for `glBeginTransformFeedback`

`primitiveMode`

  Specify the output type of the primitives that will be recorded into the buffer objects that are bound for transform feedback.

## Description

Transform feedback mode captures the values of varying variables written by the vertex shader (or, if active, the geometry shader). Transform feedback is said to be active after a call to `glBeginTransformFeedback` until a subsequent call to glEndTransformFeedback. Transform feedback commands must be paired.

If no geometry shader is present, while transform feedback is active the `mode` parameter to glDrawArrays must match those specified in the following table:

Transform Feedback `primitiveMode` | Allowed Render Primitive `modes`
--- | ---
`GL_POINTS` | `GL_POINTS`
`GL_LINES` | `GL_LINES`, `GL_LINE_LOOP`, `GL_LINE_STRIP`, `GL_LINES_ADJACENCY`, `GL_LINE_STRIP_ADJACENCY`
`GL_TRIANGLES` | `GL_TRIANGLES`, `GL_TRIANGLE_STRIP`, `GL_TRIANGLE_FAN`, `GL_TRIANGLES_ADJACENCY`, `GL_TRIANGLE_STRIP_ADJACENCY`

If a geometry shader is present, the output primitive type from the geometry shader must match those provided in the following table:

Transform Feedback `primitiveMode` | Allowed Geometry Shader Output Primitive Type
--- | ---
`GL_POINTS` | `points`
`GL_LINES` | `line_strip`
`GL_TRIANGLES` | `triangle_strip`

## Notes

Geometry shaders, and the `GL_TRIANGLES_ADJACENCY`, `GL_TRIANGLE_STRIP_ADJACENCY`, `GL_LINES_ADJACENCY` and `GL_LINE_STRIP_ADJACENCY` primtive modes are available only if the GL version is 3.2 or greater.

## Errors

`GL_INVALID_OPERATION` is generated if `glBeginTransformFeedback` is executed while transform feedback is active.

`GL_INVALID_OPERATION` is generated if `glEndTransformFeedback` is executed while transform feedback is not active.

`GL_INVALID_OPERATION` is generated by glDrawArrays if no geometry shader is present, transform feedback is active and `mode` is not one of the allowed modes.

`GL_INVALID_OPERATION` is generated by glDrawArrays if a geometry shader is present, transform feedback is active and the output primitive type of the geometry shader does not match the transform feedback `primitiveMode`.

`GL_INVALID_OPERATION` is generated by `glEndTransformFeedback` if any binding point used in transform feedback mode does not have a buffer object bound.

`GL_INVALID_OPERATION` is generated by `glEndTransformFeedback` if no binding points would be used, either because no program object is active of because the active program object has specified no varying variables to record.

## Version Support

| OpenGL Version
--- | ---
Function / Feature Name | 2.0 | 2.1 | 3.0 | 3.1 | 3.2 | 3.3 | 4.0 | 4.1 | 4.2 | 4.3 | 4.4 | 4.5
`glBeginTransformFeedback` | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glEndTransformFeedback` | - | - | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔

## See Also

## Copyright

Copyright © 2010-2014 Khronos Group. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.