glDrawBuffers

From OpenGL Reference
Jump to navigation Jump to search

Specifies a list of color buffers to be drawn

   into.

C Specification[edit]

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


Parameters[edit]

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[edit]

 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 thenth color attachment of the current framebuffer.nmay 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[edit]

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[edit]

 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 ntokens.

 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 ntokens.

 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[edit]

 glGet with argument GL_MAX_DRAW_BUFFERS 

 glGet with argument GL_DRAW_BUFFER iwhereiindicates the number of the draw buffer whose value is to be queried.


Version Support[edit]

 glDrawBuffers  2.0+
 glNamedFramebufferDrawBuffers  4.5+

See Also[edit]

 glBlendFunc , glColorMask , glDrawBuffers , glLogicOp , glReadBuffer 


Copyright[edit]

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/.