OpenGL Stenciling, separating ref from value written?

喜你入骨 提交于 2019-12-13 01:14:42

问题


The following code sets up the stencil test to see if ref is greater than the stored value in the stencil buffer, and if it is, it'll write ref to the stencil buffer

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

The problem is that while I do want to test the stencil buffer against ref, I don't want to write ref to it if it succeeds, I want to write a totally different value. The only option I've found is GL_INCR which can take the place of GL_REPLACE, but that's not very useful if the stencil buffer has a lot of stuff already written to it that can't be cleared out beforehand.

Is there a way to... say, test to see if 42 is greater than what's stored in the stencil buffer, and if it is, write 100 or something else to it?


回答1:


I don't believe this functionality is available in standard OpenGL. The closest I found is a vendor specific extension: AMD_stencil_operation_extended.

This supports exactly what you're looking for:

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.

Just from reading the spec, the calls should look something like this, with val the stencil value you want to set:

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


来源:https://stackoverflow.com/questions/32711045/opengl-stenciling-separating-ref-from-value-written

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!