2015-08-06 7 views
2

Я слышал по всему миру, что 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 вообще?

ответ

4

Direct2D в системе DirectX 11.1 может работать с устройством Direct3D 11. DirectX 11.1 входит в состав Windows 8 или более поздней версии и частично поддерживается в Windows 7 SP1 через KB2670838

С системой DirectX 11.0 (т.е. Windows Vista с пакетом обновления 2 (SP2) с KB971644, Windows 7 RTM или Windows 7 с пакетом обновления 1 (SP1) без установленной версии KB2670838) вам необходимо использовать общий доступ к DXGI, чтобы Direct2D работал на устройстве Direct3D 10.1, и вы «делитесь» результатом с вашим устройством Direct3D 11.

См. MSDN, DirectX 11.1 and Windows 7 и DirectX 11.1 and Windows 7 Update.