0
我正在嘗試將紋理渲染到模板緩衝區。我只需要alpha值大於0的像素,但是我的代碼渲染了我的四邊形的每個像素 - 即使是0 alpha的像素。我怎樣才能避免這種情況?如何將僅alpha> 0寫入模板緩衝區?
繼承人我的代碼:
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在我的質地是調試...但它是一個矩形,它沒有考慮阿爾法考慮。
我的繼承人片段着色器(它工作正常,正常渲染):
varying lowp vec4 vColor;
varying lowp vec2 vTexCoords;
uniform lowp sampler2D uTexture;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoords) * vColor;
}
謝謝!這是GL ES中的唯一解決方案嗎(我也可以使用3.0)?我的問題是iOS上放棄速度很慢.. – sydd
不改變幾何圖形,是的。一般而言,透明精靈的「最佳」修正是使用合適的幾何圖形,將完全不透明的部分隔離起來,然後剔除透明部分,這樣就不會渲染大部分沒有任何用處的像素。 類似這樣的:https://community.arm.com/groups/arm-mali-graphics/blog/2015/11/19/mali-performance-7-accelerating-2d-rendering-using-opengl-es – solidpixel