与计算着色器和Direct2D互操作?

时间:2013-03-25 21:10:41

标签: directx direct2d compute-shader

我正在开发一个集成了WPF和DirectX的应用程序。我的目标是使用一个共享表面:

  1. 加载初始图像数据。
  2. 运行DirectX 11 Compute Shaders进行一些图像处理。
  3. 使用Direct2D绘制顶部。
  4. 在我的WPF应用中显示结果。
  5. 我认为我有1个,3个和4个想通了,但2个让我头痛。我的基本问题归结为:我认为WPF和Direct2D互操作的共享表面格式必须是B8G8R8A8_UNorm,但我无法在该类型的纹理上为我的Compute Shader创建无序访问视图。 / p>

    如何让Compute Shaders在这种情况下工作?我是否想念一些创造无人机的棘手方法?我是否需要重构我的应用以某种方式使用多个纹理?

1 个答案:

答案 0 :(得分:0)

这是不可能的,因为这些DirectX功能和WPF互操作的有限格式支持(使用D3D9Image)。

在所有这些功能之间实现互操作的一种方法是在R8G8B8A8_UNorm中执行几乎所有操作,然后在最后使用Direct2D将结果写入用于互操作的B8G8R8A8_UNorm渲染目标WPF。 Direct2D可以将RGB结果写入BGR目标,因此非常简单。