1

下面的代码设置模板测试,看是否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 或其他内容?

4

1 回答 1

4

我不相信这个功能在标准 OpenGL 中可用。我找到的最接近的是特定于供应商的扩展:AMD_stencil_operation_extended

这完全支持您正在寻找的内容:

此外,此扩展将用作模板操作源的值与参考值分开,允许在模板测试和模板缓冲区更新中使用不同的值。

仅通过阅读规范,调用应该看起来像这样,带有val您要设置的模板值:

glStencilFunc(GL_GREATER, ref, 0xFF);
glStencilOpValueAMD(GL_FRONT_AND_BACK, val);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE_VALUE_AMD);
于 2015-09-22T13:29:46.563 回答