OpenGL:清除模板缓冲区,某些位除外
OpenGL: Clear the Stencil buffer, except for certain bits?
我正在将模板缓冲区用于两个作业。 第一个是允许蒙版发生,第二个是为可以"看到"的对象编写遮罩。 在这种特殊情况下,保留位是 0x80
,字节中的最后一位,其余的留给常规屏蔽。
第一个目的要求在大约 127 次使用后清除缓冲区,否则过去的模板将在测试时再次变为"有效",因为值必须换行回 1。 第二个目的要求缓冲区中的保留位在整个帧中保持活动状态。
有没有办法清除整个模板缓冲区,同时保持保留位设置?
您在评论中的理论是正确的。 glStencilMask()
应用于由 glClear()
和 glClearBuffer()
写入的值。
来自 OpenGL 4.5 规范中的"17.4.3 清除缓冲区"部分(着重号已添加(:
调用 Clear 时,应用(如果启用(的唯一每个片段操作是像素所有权测试、剪刀测试、sRGB 转换(请参阅第 17.3.9 节(和抖动。还应用了第 17.4.2 节中描述的屏蔽操作。
其中第 17.4.2 节的标题为"缓冲区更新的精细控制",包括glStencilMask()
的文档。对于glStencilMaskSeparate()
,这是glStencilMask()
的一个更通用的版本,它甚至明确地说:
由前置基元生成的片段使用正面掩码,由反向基元生成的片段使用后掩码(请参阅第 17.3.5 节(。清除模具缓冲区时,清除操作始终使用前面的模具写入掩码。
因此,要清除模板缓冲区的底部 7 位,您可以使用:
glStencilMask(0x7f);
glClear(GL_STENCIL_BUFFER_BIT);
相关文章:
- 清除输入缓冲区后未提取字符串流
- libQGLViewer 如何在没有清除缓冲区的情况下绘制
- C++使用libarchive和archive_write_open_memory..如何清除缓冲区
- 安全操作以清除C++中的空输入缓冲区
- 清除缓冲区独立于操作系统
- 忽略替代,清除缓冲区中的所有内容
- 在Android/OSL中,我可以在bufferQueue中释放单个缓冲区并将其排队,而不是清除整个缓冲区吗
- C 忽略和清除缓冲区
- 如何在C 中清除Isringstream对象的缓冲区
- 如何在C 中清除输入缓冲区
- cin.clear() 如何清除输入缓冲区
- 如何刷新或清除 GetAsyncKeyState 的缓冲区
- C++清除输入缓冲区(最后没有换行符)
- 清除 cout 缓冲区 (c++)
- 为什么我的编译器在尝试清除 CIN 缓冲区时抱怨
- 为什么我们必须在渲染过程中清除 OpenGL 中的深度缓冲区
- 如何在使用之前清除内部服务器套接字缓冲区的内容
- 清除输入缓冲区中的所有其他字符
- OpenGL:清除模板缓冲区,某些位除外
- 缓冲区已满时清除字符串缓冲区.这是什么图案