GL_COLOR_BUFFER_BIT和GL_DEPTH_BUFFER_BIT的目的是什么?

时间:2011-03-29 23:02:50

标签: opengl

作为一名OpenGL初学者,我想知道他们做了什么以及为什么需要这些。例如在通话中

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

3 个答案:

答案 0 :(得分:12)

GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT不是函数,它们是常量。您可以使用它们告诉glClear()要清除哪些缓冲区 - 在您的示例中,深度缓冲区和“当前启用颜色写入的缓冲区”。您也可以通过GL_ACCUM_BUFFER_BIT清除累积缓冲区和/或GL_STENCIL_BUFFER_BIT清除模板缓冲区。

在使用库时,常量的实际值对您来说无关紧要 - 重要的实现细节是每个常量的二进制表示不会相互重叠。正是这种特性允许您将多个常量的按位OR传递给glClear()的单个调用。

查看glClear() documention了解详情。

答案 1 :(得分:0)

对glClear的调用(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)清除OpenGL颜色和深度缓冲区(或任何其他缓冲区或缓冲区组合)。 OpenGL是一个状态机,最好用干净的平板启动每个帧。

答案 2 :(得分:0)

我在阅读这个问题时偶然发现了这个问题,并想为任何困惑的人添加一些细节。我看到这两个变量是常量,表示位值中的选项。

glClear() 方法需要知道要清除的缓冲区类型。但是,有许多缓冲区,例如颜色和深度缓冲区等 (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glClear.xml)。

通过使用位来表示选项,通过执行 OR 操作可以更轻松地设置多个选项。

有关更多详细信息,请查看此“位操作”教程,即“位标志何时最有用?”部分位于:https://www.learncpp.com/cpp-tutorial/bit-manipulation-with-bitwise-operators-and-bit-masks/