【发布时间】:2011-03-29 23:02:49
【问题描述】:
作为 OpenGL 初学者,我想知道他们做什么以及为什么需要这些。比如在通话中
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
【问题讨论】:
标签: opengl
作为 OpenGL 初学者,我想知道他们做什么以及为什么需要这些。比如在通话中
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
【问题讨论】:
标签: opengl
GL_COLOR_BUFFER_BIT 和 GL_DEPTH_BUFFER_BIT 不是函数,它们是常量。您使用它们来告诉glClear() 您希望它清除哪些缓冲区 - 在您的示例中,深度缓冲区和“当前启用颜色写入的缓冲区”。您也可以通过GL_ACCUM_BUFFER_BIT 清除累积缓冲区和/或GL_STENCIL_BUFFER_BIT 清除模板缓冲区。
在使用库时,常量的实际值对您来说并不重要——重要的实现细节是每个常量的二进制表示不会相互重叠。正是这一特性让您可以将多个常量的按位 OR 传递给对 glClear() 的单个调用。
查看glClear() documention了解更多详情。
【讨论】:
gl.h。在我的机器上GL_COLOR_BUFFER_BIT 是0x00004000 和GL_DEPTH_BUFFER_BIT 是0x00000100。还有什么要了解的?
调用 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 清除 OpenGL 颜色和深度缓冲区(或任何其他缓冲区或缓冲区组合)。 OpenGL 是一个状态机,最好从干净的状态开始每一帧。
【讨论】:
我在阅读此内容时偶然发现了这个问题,并想为任何困惑的人添加一些细节。我看到这两个变量是常量,表示位值中的选项。
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/
【讨论】: