像素着色器是否可以查看深度/颜色/模板缓冲区的当前状态?
问问题
375 次
1 回答
2
片段着色器没有得到它正在处理的片段的当前缓冲区值。尝试通过将这些缓冲区用作纹理来读取这些值,在一般情况下不会产生合理的结果。这是“未定义的行为”。
在某些特定情况下它可以工作。
首先,您可以使用纹理屏障。这在技术上是一个 NVIDIA 扩展,但 ATI 也广泛支持它。屏障基本上是缓存刷新。它允许您将当前渲染目标绑定为纹理并从中读取:仅一次。您可以进行一次读取,然后,除非您使用另一个障碍来刷新缓存,否则您将回到“未定义的行为”。
直接图像读/写是 GL 4.x 级硬件(又名:DX11)独有的功能。它允许您任意读取和写入绑定图像。但是,要做到这一点,您必须在不同着色器实例之间同步访问。这种方法有很多警告,所以你应该阅读如何去做。
于 2011-12-13T17:39:11.230 回答