2011-12-13 63 views

回答

2

片段着色器不是为它工作在片段给定当前缓冲器值。尝试使用这些缓冲区作为纹理读取这些值,不会在一般情况下产生合理的结果。这是“未定义的行为”。

有一定具体案件它可以工作。

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

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

相关问题