【发布时间】:2011-09-13 09:52:32
【问题描述】:
我想深入了解 glClear 函数。我理解它的一般解释 -> 清除颜色、深度、模板和累积的缓冲区,但我还有其他问题。 我的朋友假设您清除了内存(堆栈?)中代表颜色、深度、模板和累积的位。通过指定和应用参数:(例如,只有颜色和深度)“掩码”,您只清除内存中的那些位(因此是“按位运算”)。
举个例子:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
www.khronos.org 对“mask”参数的解释。 掩码:指示要清除的缓冲区的掩码的按位或。
这是我的问题:
- 参数 GL_COLOR_BUFFER_BIT 和 GL_DEPTH_BUFFER_BIT 是否分别代表 1 位内存?或者它们代表多少位(我想了解位掩码的实际应用方式)?
- 我看不到“OR”掩码如何取消位?如果您在标记为“set”(而不是“unset”)的位上使用“OR”,它仍将返回零(1 OR 0 仍返回 1)?我是否认为这完全错误/我在这里遗漏了什么?
- “或”符号(管道)是怎么回事?为什么这些参数没有用通常的逗号分隔,并且不是在实际函数中声明的按位运算“OR”?
也许我很困惑,因为我是这个领域的新手。 你能给我一个详尽的解释吗?当我继续使用 OpenGL 时,我不想跳过这些问题。我想知道我在做什么,并且有这种理解可能会帮助我一路走来。谢谢!
【问题讨论】:
-
这实际上与 OpenGL 无关。发生的事情是,这是一种所谓的位域掩码,一种在 C 程序中广泛使用的技术,用于在单个调用中指定一组不互斥的选项/任务。