Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of GL_COLOR_BUFFER_BIT and GL_DEPTH_BUFFER_BIT?

Tags:

As an OpenGL beginner I would like to know what do they do and why these are required. For instance in the call

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
like image 677
Mohamed Amged Avatar asked Mar 29 '11 23:03

Mohamed Amged


People also ask

What is the use of glClear?

The glClear function sets the bitplane area of the window to values previously selected by glClearColor, glClearIndex, glClearDepth, glClearStencil, and glClearAccum. You can clear multiple color buffers simultaneously by selecting more than one buffer at a time using glDrawBuffer.

What is GL depth buffer bit?

The depth buffer is automatically created by the windowing system and stores its depth values as 16 , 24 or 32 bit floats. In most systems you'll see a depth buffer with a precision of 24 bits. When depth testing is enabled, OpenGL tests the depth value of a fragment against the content of the depth buffer.

What is color buffer?

The color buffers are the ones to which you usually draw. They contain the RGB or sRGB color data, and may also contain alpha values for each pixel in the framebuffer. There may be multiple color buffers in a framebuffer.


2 Answers

GL_COLOR_BUFFER_BIT and GL_DEPTH_BUFFER_BIT aren't functions, they're constants. You use them to tell glClear() which buffers you want it to clear - in your example, the depth buffer and the "buffers currently enabled for color writing". You can also pass GL_ACCUM_BUFFER_BIT to clear the accumulation buffer and/or GL_STENCIL_BUFFER_BIT to clear the stencil buffer.

The actual values of the constants shouldn't matter to you when using the library - the important implementation detail is that the binary representations for each constant don't overlap with each other. It's that characteristic that lets you pass the bitwise OR of multiple constants to a single call to glClear().

Check out the glClear() documention for more details.

like image 87
Carl Norum Avatar answered Jan 01 '23 22:01

Carl Norum


A call to glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) clears the OpenGL color and depth buffers (or any other buffer or combination of buffers). OpenGL being a state machine, it is good practice to start each frame with a clean slate.

like image 36
LastBlow Avatar answered Jan 01 '23 22:01

LastBlow