以下代码设置模板测试以查看 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/