c++ - OpenGL Stenciling,将引用与写入的值分开?

标签 c++ opengl stencil-buffer stencils

以下代码设置模板测试以查看 ref 是否大于模板缓冲区中存储的值,如果是,则会写入 ref到模板缓冲区

unsigned int ref = 42;
glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

问题是,虽然我确实想针对 ref 测试模板缓冲区,但我不想写入 ref 到它如果成功的话,我想写一个完全不同的值。我发现的唯一选项是 GL_INCR ,它可以代替 GL_REPLACE ,但如果模板缓冲区已经写入了很多内容,那么这不是很有用。无法提前清除。

有没有办法...比如说,测试 42 是否大于模板缓冲区中存储的值,如果是,则写入 100 或其他内容?

最佳答案

我不相信标准 OpenGL 中提供此功能。我发现的最接近的是供应商特定的扩展:AMD_stencil_operation_extended .

这正是您正在寻找的内容:

Additionally, this extension separates the value used as the source for stencil operations from the reference value, allowing different values to be used in the stencil test, and in the update of the stencil buffer.

仅从阅读规范来看,调用应该如下所示,其中 val 是您要设置的模板值:

glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOpValueAMD(GL_FRONT_AND_BACK, val);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE_VALUE_AMD);

关于c++ - OpenGL Stenciling,将引用与写入的值分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32711045/

相关文章:

c++ - 检查 gpu 是否存在 VBO

c++ - 模板缓冲区如何在 OpenGL 中运行

c - OpenGL 应用程序中的 GL_Invalid_Operation

c++ - OpenGL 模板 : Availability of GL_REPLACE_VALUE_AMD

c++ - OpenGL Stencil Buffer,它们的支持程度如何?

c++ - 编译器执行并提供默认构造函数的构造函数代码内部发生了什么?

c++ - 初始化结构数组中的结构数组

c++ - 在调试器中查看 C++ shared_ptr 内容

c++ - 为什么 __inbyte 会使我的软件崩溃?

c++ - 立方体上的纹理贴图出现错误