Создание ID2D1DCRenderTarget

Я пытаюсь создать контекст устройства GDI из Direct2D, но когда я звоню CreateDCRenderTarget, это возвращает D2DERR_NO_HARDWARE_DEVICE ошибка и мой RenderTarget является нулевым.
Что-то не так со свойствами?

ID2D1Factory* _pDirect2dFactory = NULL;
ID2D1DCRenderTarget *_pRenderTarget = NULL;

D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE),
0,
0,
D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL_DEFAULT
);

HRESULT hr;

hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &_pDirect2dFactory);

if (_pDirect2dFactory)
{
// *** ERROR here *** : hr=0x8899000B (D2DERR_NO_HARDWARE_DEVICE)
hr = _pDirect2dFactory->CreateDCRenderTarget(&props, &_pRenderTarget);
}

РЕДАКТИРОВАТЬ :
Этот код прекрасно работает, когда он вызывается из моего исполняемого файла, но не работает, когда он вызывается из другой программы через мою внедренную DLL.

EDIT2 :
Ну, это работает сейчас. Этот код был вызван, когда моя DLL была подключена, и я думаю, что D2D1.dll еще не был правильно подключен к процессу.

0

Решение

Для тех, у кого все еще была проблема с внедрением dll, которая создает d2d, попробуйте поместить функцию в новый поток. В моем случае я непосредственно поместил функцию создания d2d в новый поток с помощью CreateThread в DllMain, и он работает.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector