使用Direct2D在Direct3D11表面上绘制

时间:2012-08-02 04:55:10

标签: 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。

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

3 个答案:

答案 0 :(得分:6)

之前我遇到过同样的问题,它取决于你正在运行的系统。

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

答案 1 :(得分:3)

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

IDXGISurface *surface;
pOutput->QueryInterface(&surface);

然后,按照this tutorial中的步骤将曲面转换为Direct2D渲染目标。获得渲染目标后,可以采用与教程绘制渐变的方式类似的方式绘制渲染目标。

答案 2 :(得分: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