(如何)着色器可以查看当前的渲染缓冲区?

时间:2011-12-13 16:04:50

标签: 3d glsl hlsl shader cg

像素着色器是否可以看到深度/颜色/模板缓冲区的当前状态?

1 个答案:

答案 0 :(得分:2)

片段着色器未获得其正在处理的片段的当前缓冲区值。尝试通过将这些缓冲区用作纹理来读取这些值,不会在 general 情况下产生合理的结果。这是“未定义的行为。”

某些特定的案例可以使用。

首先,您可以使用texture barriers。这在技术上是NVIDIA扩展,但ATI也广泛支持它。屏障基本上是缓存刷新。它允许您将当前渲染目标绑定为纹理并从中读取:只需一次。您可以执行一次读取操作,之后,除非使用另一个屏障来刷新缓存,否则您将返回“未定义的行为”。

Direct image read/writes是GL 4.x级硬件(又名:DX11)独有的功能。它允许您任意读取和写入绑定图像。但是,要执行此操作,您必须同步不同着色器实例之间的访问。这种方法有很多注意事项,所以你应该读一下如何做到这一点。