HLSL:多通道着色器?

4
我正在编写一个着色器,用于在从场景渲染的纹理上产生模糊效果。我需要进行两次处理,所以使用P0通道进行水平模糊,在P1通道中进行垂直模糊。
问题是:
如何从P0通道的像素着色器输出中获取结果,并将其作为输入发送到P1通道的像素着色器中?
如果我在单个通道中编写它,则可以获得预期的结果,但我确实需要在两个通道中进行处理。
请问是否有人能帮助我?
这是我的第一次尝试HLSL。
感谢大家!
FOX_ITA
1个回答

8

通常情况下,您需要在应用程序逻辑中的着色器代码之外执行此操作。

  • 获取一个渲染目标/可渲染纹理,足够大以容纳P0的结果
  • 启用目标,启用P0,运行第一遍处理
  • 获取另一个渲染目标以容纳P1的结果。如果您正在进行全屏模糊并且不需要进一步的后期处理,则通常将其设置为后备缓冲区。
  • 启用新的渲染目标
  • 将第一个渲染目标绑定到对P1可访问的纹理索引/槽位
  • 进行第二次处理

(当然,您不需要每帧重新创建渲染目标。我宁愿使用一个集中的渲染目标池来满足所有后期处理需求)。


谢谢Alexander!我会尝试那种方法的!感谢你的建议! :) - user714921
@AlexanderGessler 切换纹理通常很慢,因为需要绑定额外的纹理。如果我说错了,请纠正我。 - Mathew Kurian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接