像素着色器是否可以看到深度/颜色/模板缓冲区的当前状态?
碎片着色器没有给出它正在处理的片段的当前缓冲区值。尝试通过使用这些缓冲区作为纹理来读取这些值,在一般情况下不会产生合理的结果。这是"未定义行为"。
在某些特定的情况下它可以工作。
首先,你可以使用纹理屏障。这在技术上是NVIDIA的扩展,但ATI也广泛支持它。屏障基本上是缓存刷新。它允许你将当前渲染目标绑定为纹理并读取它们:只读取一次。你可以做一次读取,之后,你回到"未定义的行为",除非你使用另一个屏障来刷新缓存。
直接读/写图像是GL 4独有的特性。x级硬件(又名:DX11)。它允许您任意读取和写入绑定的图像。然而,要做到这一点,你必须在不同的着色器实例之间同步访问。这种方法有很多注意事项,所以您应该仔细阅读如何使用它。