Я слышал по всему миру, что Direct2D можно использовать только с устройством Direct3D 10.1. Но я решил поэкспериментировать с D2D, чтобы убедиться, что это действительно так. Как только я закончил все свои эксперименты ... Я пришел к сомнительному выводу, что Direct2d действительно может использовать устройство direct3d 11.Может ли Direct2D работать с устройством direct3D 11?
В любом случае, вот мой код, который я использовал для экспериментов. Я попытался создать поверхность DXGI (которая указывает на 2D-текстуру D3D11) с помощью устройства direct3d 11.
/* SharedTextureDesc object contains description of a 2D texture*/
D3D11device->CreateTexture2D(&SharedTextureDesc, NULL, &SharedTexture);
SharedTexture->QueryInterface(__uuidof(IDXGIResource), (void**)&SharedResource);
SharedResource->GetSharedHandle(&SharedHandle);
D3D11device->OpenSharedResource(SharedHandle, __uuidof(IDXGISurface1), (void**)&SharedSurface);
Приведенный выше код показывает, что я создал поверхность DXGI с устройством direct3d 11. Теперь, ниже, я использую поверхность DXGI для создания цели рендеринга для Direct2D.
/* RenderTargetProperties contains the description for render target */
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuidof(ID2D1Factory), (void**) &D2DFactory);
D2DFactory->CreateDxgiSurfaceRenderTarget(SharedSurface, &RenderTargetProperties, &RenderTargetD2D)
Цель рендеринга для Direct2d, похоже, сработала, и я могу использовать ее для рендеринга текста в свою игру. Метод CreateDxgiSurfaceRenderTarget()
даже возвратил S_OK
, который говорит мне, что это удалось.
Но мой единственный вопрос: может ли цель рендеринга для direct2d работать без ошибок? или Direct2D не может работать с устройством Direct3D 11 вообще?