我正在尝试将纹理渲染到模板缓冲区。我只需要其alpha值为>的像素。 0,但我的代码渲染我的四边形的每个像素 - 甚至是0 alpha的像素。我怎么能避免这个?
继承我的代码:
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Incr);
GL.ColorMask(false, false, false, false);
GL.DepthMask(false);
RenderMask(mask);
GL.StencilFunc(StencilFunction.Equal, 1, 0xFF);
GL.StencilOp(StencilOp.Keep, StencilOp.Keep, StencilOp.Keep);
GL.ColorMask(true, true, true, true);
GL.DepthMask(true);
使用RenderDoc进行调试时,我看到模板缓冲区包含1s,其中我的纹理是......但是它是一个矩形,它不考虑alpha。
继承我的片段着色器(它适用于正常渲染):
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoords) * vColor;
}
答案 0 :(得分:2)
使用"丢弃"着色器中的声明可以删除您不想保留的片段。
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
vec4 color = texture2D(uTexture, vTexCoords) * vColor;
if (color.a == 0.0) {
discard;
}
gl_FragColor = color;
}