使用Direct2D在Direct3D11表面上绘制

Zac*_*ach 3 directx direct3d direct2d ms-media-foundation

我正在尝试创建一个Media Foundation Transform,它使用D2D和D3D11在视频上绘制文本.我试图在D3D11资源之上构建一个D2D RenderTarget,但不幸的是,大多数D2D和D3D互操作方法需要D3D10,这在这个项目中是不可用的.

我必须使用的参数如下:ID3D11Device*pDevice,ID3D11Texture2D*pInput,UINT uiInIndex,ID3D11Texture2D*pOutput和UINT uiOutIndex.

我试图遵循本教程的建议,但事实证明它需要一个ID3D10Texture2D对象,这对我来说也不是一个选择.

zdd*_*zdd 6

我之前遇到过同样的问题,它依赖于你正在运行的系统.

  1. 在Windows 7上,只有Direct3D 10支持与Direct2D互操作
  2. 在Windows 8上,Direct2D可以与Direct3D 11进行互操作


Zac*_*ach 5

本质上,您将帧从输入纹理复制到输出纹理,然后执行以下操作以检索 IDXGI 表面:

IDXGISurface *surface;
pOutput->QueryInterface(&surface);
Run Code Online (Sandbox Code Playgroud)

然后,按照本教程中的步骤将表面转换为 Direct2D 渲染目标。获得渲染目标后,您可以按照教程绘制渐变的类似方式在其上进行绘制。


Why*_*lee 1

您创建交换链吗?如果您使用 XAML UI,则可以使用 IDXGIFactory2::CreateSwapChainForCoreWindow 或 CreateSwapChainForComposition 创建一个。然后,在渲染 d3d 内容后,您可以创建 d2d 目标并在顶部渲染,就像在此 d3d 教程示例中一样,查找“sampleOverlay.cpp”

http://code.msdn.microsoft.com/windowsapps/Direct3D-Tutorial-Sample-08667fb0/sourcecode?fileId=44730&pathId=1319002242