从IDirect3DDevice9检索ID2D1DeviceContext

时间:2017-04-14 10:39:48

标签: c++ directx-9 ms-media-foundation

我正在使用Source Reader从视频文件中读取视频样本,然后使用解码器解码它们然后我使用DirectX9渲染这些样本。

我正在使用IDirect3DDevice9来渲染视频帧,它正在按预期工作。

现在我想添加色度键效果,如下所述:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn890715(v=vs.85).aspx

那么如何从ID2D1DeviceContext获取IDirect3DDevice9,然后为其添加Chorma-key效果,然后渲染视频帧?

2 个答案:

答案 0 :(得分:4)

ID2D1DeviceContext需要DirectX11设备,不能与过时的IDirect3DDevice9一起使用。通常,您按以下顺序创建对象:DXGI Factory,D2D1 Factory,D3D11设备,DXGI设备,D2D1设备,最后是D2D1设备上下文。您可以查看D2D getting starting guide and samples

除非您被迫为Windows XP提供向后兼容性,否则处理DirectX9没有任何意义。您发布的色度键示例需要Windows 10。

答案 1 :(得分:0)

  

那么如何从ID2D1DeviceContext ...

获取IDirect3DDevice9

你不能从另一个得到一个。这些接口属于不同的API,如果您使用Media Foundation和Direct3D 9进行解码,则Direct2D(ID2D1DeviceContext所属的地方)就在那里使用。

最接近您的请求是使用API​​之间的互操作性。请参阅Direct2D and Direct3D Interoperability Overview了解相关信息,并注意那里提到的Direct3D版本。

另见:Surface Sharing Between Windows Graphics APIs。下图显示较新的API通过DXGI进行互操作,但不像Direct3D 9那样老。另请参阅下面的评论,了解更新的MSDN链接。