ChromaKey в DirectX - PullRequest
       102

ChromaKey в DirectX

0 голосов
/ 05 марта 2020

Мне нужно реализовать некоторые функциональные возможности хроматического ключа с 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.
На нашей платформе есть функция для экземпляра yield ID3D11Device и Я получаю DX11Texture в качестве ввода.
У меня есть два вопроса:
1. Как я могу получить m_d2dContext от ID3D11Device?
2. Как я могу получить ID2D1Image от DX11Texture

1 Ответ

1 голос
/ 05 марта 2020
  1. Как я могу получить m_d2dContext от ID3D11Device?

Вы не можете, по крайней мере, напрямую.

Вы создаете фабрику D2D и оттуда вы создаете цель рендеринга поверх ресурса DXGI, который, в свою очередь, происходит от определенной текстуры D3D11 и, как таковой, принадлежит определенному устройству D3D11. При всем этом вместе вы используете D2D для рисования поверх c D3D11 текстуры.

Как я могу получить ID2D1Image из DX11Texture?

Точка входа в документацию MSDN для вашего случая: Обзор совместимости Direct2D и Direct3D . В частности, для сценария D3D-текстуры с изображением D2D предлагается следующий путь:

Существует два основных способа совместного использования Direct2D и Direct3D:

[...]

Используя CreateSharedBitmap для создания ID2D1Bitmap из IDXGISurface, вы можете записать сцену Direct3D в растровое изображение и отобразить ее с помощью Direct2D.

...