创建DXGIFactory

问题描述 投票:0回答:1

创建 IDXGIFactory1 然后查询 IDXGIFactory5 的任何原因:

CreateDXGIFactory1(IID_PPV_ARGS(&factory));
factory->QueryInterface(IID_PPV_ARGS(&factory5));

而不是仅仅创建 IDXGIFactory5:

CreateDXGIFactory1(IID_PPV_ARGS(&factory5));

当factory5具有factory1的所有方法时,为什么我可能需要在同一个应用程序中使用两个不同的接口版本(factory1和factory5)(我认为这不是为了向后兼容)?

同样的问题

ID3D11Device
ID3D11Device5
ID3D11DeviceContext
ID3D11DeviceContext4

directx directx-11 direct3d11 directx-12 dxgi
1个回答
0
投票
自 Windows Vista 起,

DXGI 随 Windows 一起提供。因此,随着新版本的 Windows 的出现,新版本的 DXGI 也随之而来。

您在官方文档中看不到这一点,因为微软只提到了迄今为止支持的版本(这并不是 100% 正确,但我们经常看到这一点)。

因此,由于

IDXGIFactory5
页面显示此内容:

这意味着

IDXGIFactory5
在 Windows 10 上受支持(截至今天仍然受支持)。如果您选中
IDXGIFactory6
,它会显示:

我们无法回到过去,但是,例如,Windows 7 仅支持 DXGI 最多

IDXGIFactory2

您还可以检查头文件(dxgi1_5.g、dxgi1_6.h 等),因为有时文档是错误的...并且...标头也会使用较新版本的 SDK 进行修改。

至于直接使用

CreateDXGIFactory1(IID_PPV_ARGS(&factory5));
,它应该可以工作(如果可以的话那就没问题了),因为这是首先接受 IID 类型参数的目的,但经验表明有时不支持这种快捷方式由于某种原因由底层实现决定。

注意:您还可以在较低版本的 Windows 上使用完全相同的代码,您应该收到

E_NOTINTERFACE
错误,这是预期的正常行为。

Direct3D 和 Direct2D 对象模型的情况大致相同。

© www.soinside.com 2019 - 2024. All rights reserved.