What is the purpose of GL_COLOR_BUFFER_BIT and GL_DEPTH_BUFFER_BIT?
As an OpenGL beginner I would like to know what do they do and why these are required. For instance in th开发者_运维百科e call
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
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.
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.
I stumble upon this question while reading about this and thought to add some details for anyone confused. I see these two variables are constant represent options in bit values.
The glClear() method needs to know what type of buffer to clear. However, there are many buffers such as color and depth buffers and others (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glClear.xml).
By using bits to represent options it become easier to set multiple options by performing an OR operation.
For more details check out this "Bit Manipulation" tutorial, namely "When are bit flags most useful?" section at : https://www.learncpp.com/cpp-tutorial/bit-manipulation-with-bitwise-operators-and-bit-masks/
精彩评论