0

我需要使用 Direct2d 实现一些色度键功能。

我有一些来自 MSDN 的代码示例:

ComPtr<ID2D1Effect> chromakeyEffect;
m_d2dContext->CreateEffect(CLSID_D2D1ChromaKey, &chromakeyEffect);

chromakeyEffect->SetInput(0, bitmap);
chromaKeyEffect->SetValue(D2D1_CHROMAKEY_PROP_COLOR, {0.0f, 1.0f, 0.0f, 0.0f});
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_TOLERANCE, 0.2f);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_INVERT_ALPHA, false);
chromakeyEffect->SetValue(D2D1_CHROMAKEY_PROP_FEATHER, false);

m_d2dContext->BeginDraw();
m_d2dContext->DrawImage(chromakeyEffect.Get());
m_d2dContext->EndDraw();

但是,我对 WinAPI 有点陌生。
我们的平台具有产量实例的功能ID3D11Device,我收到DX11Texture作为输入。
我有两个问题:
1. 我怎样才能m_d2dContext得到ID3D11Device
2. 我怎样才能ID2D1Image得到DX11Texture

4

1 回答 1

1
  1. 如何从 ID3D11Device 获取 m_d2dContext?

你不能,至少不能直接。

您创建一个 D2D 工厂,然后在 DXGI 资源之上创建一个渲染目标,该资源又派生自某些 D3D11 纹理,因此属于某些 D3D11 设备。结合所有这些,您可以使用 D2D 绘制特定的 D3D11 纹理。

  1. 如何从 DX11Texture 获取 ID2D1Image?

您的案例的 MSDN 文档的入口点是:Direct2D 和 Direct3D 互操作性概述。特别是对于 D3D 纹理到 D2D 图像场景,建议的路径是这样的:

一起使用 Direct2D 和 Direct3D 有两种主要方法:

[...]

通过使用 CreateSharedBitmap 从 IDXGISurface 创建 ID2D1Bitmap,您可以将 Direct3D 场景写入位图并使用 Direct2D 进行渲染。

于 2020-03-05T18:16:45.650 回答