HLSL:多通道着色器?

发布于 2024-11-02 19:24:03 字数 276 浏览 6 评论 0原文

我正在编写一个着色器,可以对场景渲染的纹理产生模糊效果。 我需要在 2 个通道中完成此操作,因此在通道 P0 中我进行水平模糊,在通道 P1 中进行垂直模糊。

问题是:

  • 我如何从 P0 通道上的 PS 获取输出并作为 P1 通道上 PS 的输入发送?

如果我在单遍中编写它,我会获得预期的结果,但我确实需要在两遍中完成。

有人可以帮我吗?

是我的第一个接近脚趾 HLSL。

谢谢大家!

福克斯_ITA

I'm writing a shader that make a blur effect on a texture rendered form the scene.
I need to do that in 2 passe, so with the pass P0 i make a horizontal blur, and in pass P1 the vertical one.

The problem is:

  • How i can get the output from the PS on pass P0 and send as input on the PS on pass P1 ?

If i write it on single pass i obtain the expected result, but i really need to do in 2 passes.

Can anyone help me please?

Is my first approach toe HLSL.

Thank to everyone!

FOX_ITA

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枉心 2024-11-09 19:24:03

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

  • 获取一个足够大的渲染目标/可渲染纹理来保存 P0 的结果
  • 启用目标,启用 P0,运行第一遍
  • 获取另一个渲染目标来保存 P1 的结果。如果您正在进行全屏模糊并且不需要进一步的后处理,那么这通常是后缓冲区。
  • 启用新的渲染目标
  • 将第一个渲染目标绑定到 P1 可访问的纹理索引/插槽
  • 执行第二遍

(当然,您不会每帧重新创建一次渲染目标。我宁愿使用中央渲染池目标满足所有后处理需求)。

You usually do that outside of the shader code in your application logic.

  • Get a render target/renderable texture large enough to hold the result of P0
  • Enable the target, enable P0, run the first pass
  • Get another render target to hold the result of P1. If you're doing a fullscreen blur and no further postprocessing is needed, this will typically be the backbuffer.
  • Enable the new render target
  • Bind the first render target to a texture index/slot accessible to P1
  • Do the second pass

(of course you don't re-create the render targets once per frame. I'd rather use a central pool of render targets to serve all postprocessing needs).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文