CreateDXGIFactory是否总是创建IDXGIFactory系统支持的最新版本?

时间:2018-11-08 10:13:55

标签: directx directx-11 direct3d11 dxgi

我使用CreateDXGIFactory创建一个IDXGIFactory(最旧的版本),然后使用该IDXGIFactory查询IDXGIFactory6,它成功了。(我的系统版本是Win10 1803)。

1。那么,功能CreateDXGIFactory是否总是创建系统支持的IDXGIFactory的最新版本吗?

类似的事情,D3D11CreateDevice创建ID3D11Device的基本版本,我可以成功查询ID3D11Device3吗?

2。第二个问题,功能D3D11CreateDevice是否创建系统支持的ID3D11Device的最新版本?

1 个答案:

答案 0 :(得分:1)

D3D11CreateDevice更简单,因为它是单个入口点。本文档不适用于“较旧版本”和“较新版本”术语。相反,它建议API使用请求的接口创建一个对象,该对象对于您所在的系统和请求的创建参数(功能级别等)都足够。接下来,您可以通过查询较新的界面来获得对较新功能(如果可用)的访问权限,该文档也建议这样做:

  

要创建Direct3D 11.1设备(ID3D11Device1)(在Windows 8,Windows Server 2012和Windows 7和Windows Server 2008 R2上安装了Windows 7平台更新),请首先创建具有此功能的ID3D11Device,然后在ID3D11Device对象上调用QueryInterface方法以获得ID3D11Device1接口。

     

要创建Windows 8.1和Windows Server 2012 R2上可用的Direct3D 11.2设备(ID3D11Device2),请首先使用此函数创建一个ID3D11Device,然后在ID3D11Device对象上调用QueryInterface方法以获得ID3D11Device2接口。

也就是说,您以相同的方式开始创建设备,然后查询新接口。实现可能会或可能不会通过升级到“较新的实现”来响应,具体取决于您是否曾经查询过这些新接口。无论哪种方式,它都保持特定于实现的方式,包括可以从技术上更改这种行为,只要它对以这种文档方式使用API​​的应用程序透明即可。

使用DXGI,有两个API入口点CreateDXGIFactoryCreateDXGIFactory1。该文档建议您不要通过1.0和1.1接口混合使用API​​。

  

请勿在应用程序中混合使用DXGI 1.0(IDXGIFactory)和DXGI 1.1(IDXGIFactory1)。使用IDXGIFactory或IDXGIFactory1,但不能在应用程序中同时使用。

这不一定意味着这两个功能正在创建不同的工厂。只要您遵守书面指南,Microsoft保留调整行为的权利。

如果您不打算做超过DGXI 1.0的任何事情,则可以在新旧系统上使用CreateDXGIFactory。如果您需要1.1及更高版本的功能,则应该以{{1​​}}开始。还要注意,这两个功能在整个环境中的可用性不同,这是它们两个首先存在的原因之一。