## Name

glDrawBuffers, glNamedFramebufferDrawBuffers — Specifies a list of color buffers to be drawn into

## C Specification

`void glDrawBuffers(` | GLsizei n,
| const GLenum *bufs`)`;

`void glNamedFramebufferDrawBuffers(` | GLuint framebuffer,
| GLsizei n,
| const GLenum *bufs`)`;

## Parameters

`framebuffer`

  Specifies the name of the framebuffer object for `glNamedFramebufferDrawBuffers`.

`n`

  Specifies the number of buffers in `bufs`.

`bufs`

  Points to an array of symbolic constants specifying the buffers into which fragment colors or data values will be written.

## Description

`glDrawBuffers` and `glNamedFramebufferDrawBuffers` define an array of buffers into which outputs from the fragment shader data will be written. If a fragment shader writes a value to one or more user defined output variables, then the value of each variable will be written into the buffer specified at a location within `bufs` corresponding to the location assigned to that user defined output. The draw buffer used for user defined outputs assigned to locations greater than or equal to `n` is implicitly set to `GL_NONE` and any data written to such an output is discarded.

For `glDrawBuffers`, the framebuffer object that is bound to the `GL_DRAW_FRAMEBUFFER` binding will be used. For `glNamedFramebufferDrawBuffers`, `framebuffer` is the name of the framebuffer object. If `framebuffer` is zero, then the default framebuffer is affected.

The symbolic constants contained in `bufs` may be any of the following:

`GL_NONE`

  The fragment shader output value is not written into any color buffer.

`GL_FRONT_LEFT`

  The fragment shader output value is written into the front left color buffer.

`GL_FRONT_RIGHT`

  The fragment shader output value is written into the front right color buffer.

`GL_BACK_LEFT`

  The fragment shader output value is written into the back left color buffer.

`GL_BACK_RIGHT`

  The fragment shader output value is written into the back right color buffer.

`GL_COLOR_ATTACHMENT` n

  The fragment shader output value is written into the nth color attachment of the current framebuffer. n may range from zero to the value of `GL_MAX_COLOR_ATTACHMENTS`.

Except for `GL_NONE`, the preceding symbolic constants may not appear more than once in `bufs`. The maximum number of draw buffers supported is implementation dependent and can be queried by calling glGet with the argument `GL_MAX_DRAW_BUFFERS`.

## Notes

The symbolic constants `GL_FRONT`, `GL_BACK`, `GL_LEFT`, `GL_RIGHT`, and `GL_FRONT_AND_BACK` are not allowed in the `bufs` array since they may refer to multiple buffers.

If a fragment shader does not write to a user defined output variable, the values of the fragment colors following shader execution are undefined. For each fragment generated in this situation, a different value may be written into each of the buffers specified by `bufs`.

## Errors

`GL_INVALID_OPERATION` error is generated by `glNamedFramebufferDrawBuffers` if `framebuffer` is not zero or the name of an existing framebuffer object.

`GL_INVALID_ENUM` is generated if one of the values in `bufs` is not an accepted value.

`GL_INVALID_ENUM` is generated if the API call refers to the default framebuffer and one or more of the values in `bufs` is one of the `GL_COLOR_ATTACHMENT` n tokens.

`GL_INVALID_ENUM` is generated if the API call refers to a framebuffer object and one or more of the values in `bufs` is anything other than `GL_NONE` or one of the `GL_COLOR_ATTACHMENT` n tokens.

`GL_INVALID_ENUM` is generated if `n` is less than 0.

`GL_INVALID_OPERATION` is generated if a symbolic constant other than `GL_NONE` appears more than once in `bufs`.

`GL_INVALID_OPERATION` is generated if any of the entries in `bufs` (other than `GL_NONE` ) indicates a color buffer that does not exist in the current GL context.

`GL_INVALID_OPERATION` is generated if any value in `bufs` is `GL_BACK`, and `n` is not one.

`GL_INVALID_VALUE` is generated if `n` is greater than `GL_MAX_DRAW_BUFFERS`.

## Associated Gets

glGet with argument `GL_MAX_DRAW_BUFFERS`

glGet with argument `GL_DRAW_BUFFER` i where `i` indicates the number of the draw buffer whose value is to be queried

## 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
`glDrawBuffers` | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔
`glNamedFramebufferDrawBuffers` | - | - | - | - | - | - | - | - | - | - | - | ✔

## See Also

glBlendFunc, glColorMask, glDrawBuffers, glLogicOp, glReadBuffer

## Copyright

Copyright © 2003-2005 3Dlabs Inc. Ltd. 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/.