从纹理采样,也是渲染目标

时间:2010-11-01 03:18:04

标签: opengl directx render textures sampling

我知道这在技术上是不受支持的(并且据我所知它是未定义的行为)但是从纹理中采样也是一件非常可怕的事情吗?

我问,因为我需要从深度纹理中读取,我也需要写入,如果我不能这样做,这意味着我将不得不复制深度纹理,如果它不是那么大的交易我没有看到简单复制它的危害吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

是的,这是致命的,并触发未定义的行为。只需复制并阅读副本即可。

解释很简单。由于片段是以未指定的顺序并行处理的,因此您可能正在阅读已经写过的纹素或原始值的纹素,并且无法知道您正在阅读的内容。制作副本并从中读取可确保您读取正确的值。

答案 1 :(得分:2)

Matias和Goz报道了最重要的部分。让我添加一些有趣的事实:

  • 当您将其底层资源绑定为渲染目标时,Direct3D运行时会主动取消绑定纹理(因此您无法在那里创建循环)。
  • Direct3D 11中的无人机实际上允许对格式的子集(不需要类型转换的那些)进行读 - 修改 - 写操作。但是,他们不保证任何操作顺序。这是许多执行与顺序无关的透明度的算法所使用的,特别是(重新排序是手动完成的)。