C++ OpenGL制版,将引用与写入的值分离?

C++ OpenGL制版,将引用与写入的值分离?,c++,opengl,stencil-buffer,stencils,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,但如果模具缓冲区中已经

以下代码设置模具测试,以查看
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中可用。我找到的最接近的扩展名是特定于供应商的扩展名:

这正好支持您要查找的内容:

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

仅从阅读规范来看,调用应该是这样的,带有
val
要设置的模具值:

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

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

这正好支持您要查找的内容:

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

仅从阅读规范来看,调用应该是这样的,带有
val
要设置的模具值:

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

看起来只有在“或它的其他部分?”下你同意通过零才有可能。看起来只有在“或它的其他部分?”下你同意通过零才有可能。