Direct2D是否能够与Direct3D 11设备一起使用?

3
我在互联网上听到过这样的说法:Direct2D只能与Direct3D 10.1设备一起使用。但是我决定尝试使用D2D来验证这是否属实。在完成所有实验后,我得出了一个令人怀疑的结论,即Direct2D实际上可以使用Direct3D 11设备。
无论如何,以下是我用来进行实验的代码。我尝试使用Direct3D 11设备创建DXGI表面(指向D3D11 2D纹理)。
            /* 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); 

上述代码表明我使用Direct3D 11设备创建了一个DXGI表面。现在,我正在使用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设备一起使用?

1个回答

4
在DirectX 11.1系统上,Direct2D可以与Direct3D 11设备配合使用。DirectX 11.1包含在Windows 8或更高版本中,并且通过KB2670838部分支持Windows 7 SP1。
对于DirectX 11.0系统(即安装了KB971644的Windows Vista SP2、Windows 7 RTM或未安装KB2670838的Windows 7 SP1),您必须使用DXGI表面共享,以便在Direct3D 10.1设备上使用Direct2D,并将结果“共享”到Direct3D 11设备上。

请查看MSDNDirectX 11.1和Windows 7以及DirectX 11.1和Windows 7更新


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接