【问题标题】:How to get previous value in depth buffer?如何在深度缓冲区中获取先前的值?
【发布时间】:2012-05-30 11:39:14
【问题描述】:

我怎样才能做下一个算法? :

if(Color.a < 0.9)
    gl_FragDepth = gl_PrevFragDepth;
else
    gl_FragDepth = gl_FragCoord.z;

这个我可以用 glDepthMask(false);,但它适用于所有像素都为alpha &lt; 1 的多边形。如果多边形具有alpha = 1 和alpha &lt; 1 的像素,我的渲染图片不正确。我需要它来渲染包含任何 alpha 值的文本掩码!

我不能使用深度纹理,因为我需要实时使用深度缓冲区!

【问题讨论】:

    标签: c++ opengl glsl depth-buffer


    【解决方案1】:

    我怎样才能做下一个算法? :

    在 OpenGL-4 中,您可以使用片段着色器中的深度纹理写入来实现。但是性能会很糟糕,因为 GPU 针对聚集访问进行了优化,而不是针对分散访问进行了优化,而这正是您正在尝试做的事情。

    使用 OpenGL-3 及以下您无法做到这一点。对不起。

    【讨论】:

    • 但是只渲染到深度纹理呢……然后在下一次读取它呢?
    • @fen:这行得通,但 OP 明确表示,他不能或不想使用多次传球。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2011-11-11
    • 2017-09-19
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多