使用Direct2D在Direct3D11表面上绘图

问题描述 投票:0回答:4

我正在尝试创建一个媒体基础转换,使用 D2D 和 D3D11 在视频上绘制文本。我正在尝试在 D3D11 资源之上构建 D2D RenderTarget,但不幸的是,大多数 D2D 和 D3D 互操作方法都需要 D3D10,而该项目中不提供 D3D10。

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

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

directx direct3d direct2d ms-media-foundation
4个回答
5
投票

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

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

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


5
投票

我以前遇到过同样的问题,这取决于你运行的系统。

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

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


0
投票

从DxgiSurface创建位图

位图的底层内存是

IDXGISurface
。您可以 QI
ID3D11Texture2D
来获得
IDXGISurface

© www.soinside.com 2019 - 2024. All rights reserved.