gpt4 book ai didi

c - glClear 函数 : Question about the parameters

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:18 24 4
gpt4 key购买 nike

我想深入了解 glClear 函数。我理解它的一般解释 -> 清除颜色、深度、模板和累积的缓冲区,但我还有其他问题。我的 friend 假设你清除了内存中代表颜色、深度、模板和累积的位(堆栈?)。通过指定和应用参数:(例如,仅颜色和深度)“掩码”,您仅清除内存中的那些位(因此“按位操作”)。

举个例子:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

www.khronos.org 对“mask”参数的解释。掩码:指示要清除的缓冲区的掩码的按位或。

这是我的问题:

  • 参数 GL_COLOR_BUFFER_BIT 和 GL_DEPTH_BUFFER_BIT 是否分别代表 1 位内存?或者它们代表多少位(我想了解位掩码的实际应用方式)?
  • 我不明白“或”掩码如何取消位?如果您在标记为“set”(而不是“unset”)的位上使用“OR”,它仍会返回零(1 OR 0 仍会返回 1)?我是否认为这完全错误/我在这里遗漏了什么?
  • “或”符号(竖线)是怎么回事;为什么这些参数没有用通常的逗号分隔,按位运算“或”不是在实际函数中声明的吗?

也许我把事情弄糊涂了,因为我是这个领域的新手。你能给我一个详尽的解释吗?在继续学习 OpenGL 时,我不想跳过这些问题;我想知道我在做什么,并且有这种理解可能会帮助我一路走来。谢谢!

最佳答案

当您指定要清除的内容时,这种编写方式允许更大的灵 active 。在这里如何定义标志:

#define GL_COLOR_BUFFER_BIT 1 // 0000 0001
#define GL_DEPTH_BUFFER_BIT 2 // 0000 0010

如您所见,它们是 2 的幂。这样,在内存中,每个标志(显然在不同的位置)只有一位设置为 1。当您在这些标志上计算按位 OR 时,您会得到 0000 0011。要知道结果值中是否设置了标志,您只需要使用选中的标志计算按位 AND。

int foo = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT; // foo = 0000 0011

if (foo & GL_COLOR_BUFFER_BIT) { // 0000 0011 & 0000 0001 => 0000 0001 (!= 0)
// clear color buffer(which is located at a position OpenGL knows)
}
if (foo & GL_DEPTH_BUFFER_BIT) { // 0000 0011 & 0000 0010 => 0000 0010 (!= 0)
// clear depth buffer
}

关于c - glClear 函数 : Question about the parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7399878/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com