提问人:Anaph 提问时间:11/8/2023 最后编辑:Simon MourierAnaph 更新时间:11/8/2023 访问量:49
创建 DXGIFactory
Create DXGIFactory
问:
创建 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
答:
自 Windows Vista 以来,DXGI 随 Windows 一起提供。因此,随着较新版本的 Windows 的出现,DXGI 的更新版本也随之而来。
您没有看到官方文档中反映这一点,因为 Microsoft 只提到了迄今为止支持的版本(这不是 100% 正确的,但我们经常看到这一点)。
因此,由于文档页面显示以下内容:IDXGIFactory5
这意味着在 Windows 10 上受支持(截至今天仍受支持)。如果你检查页面,它说:IDXGIFactory5
IDXGIFactory6
我们无法回到过去,但是,例如,Windows 7仅支持DXGI 。IDXGIFactory2
您还可以检查头文件(dxgi1_5.g、dxgi1_6.h 等),因为有时文档是错误的......但。。。标头也可以使用较新版本的 SDK 进行修改。
至于直接使用,它应该可以工作(如果可以,那就没问题了),因为这是首先接受 IID 类型参数的目的,但经验表明,有时由于某种原因,底层实现不支持这种快捷方式。CreateDXGIFactory1(IID_PPV_ARGS(&factory5));
注意:您也可以在较低版本的 Windows 上使用完全相同的代码,其中您应该收到错误,这是预期和正常行为。E_NOTINTERFACE
Direct3D 和 Direct2D 对象模型(以及整个基于 Windows COM 的 API)的情况大致相同。
评论