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

Directx CreateDXGIFactory是否始终创建最新版本的IDXGIFactory系统支持?,directx,directx-11,direct3d11,dxgi,Directx,Directx 11,Direct3d11,Dxgi,我使用CreateDXGIFactory创建一个IDXGIFactory(最旧的版本),然后使用这个IDXGIFactory查询IDXGIFactory6,它成功了。(我的系统版本是Win10 1803) 1.那么,这个功能CreateDXGIFactory是否总是创建系统支持的最新版本的IDXGIFactory 类似的事情,D3D11CreateDevice创建ID3D11Device的基本版本,我可以成功地查询ID3D11Device3吗 2.第二个问题,功能D3D11CreateDevic

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

1.那么,这个功能CreateDXGIFactory是否总是创建系统支持的最新版本的IDXGIFactory

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


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

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

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

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

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

对于DXGI,有两个API入口点
CreateDXGIFactory
CreateDXGIFactory1
。文档建议不要通过1.0和1.1接口混合使用API

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

这并不一定意味着这两个功能正在创建不同的工厂。只要您遵守记录在案的指导原则,Microsoft保留调整行为的权利


如果您不打算做任何超出DGXI 1.0的事情,您可以在较旧和较新的系统上使用
CreateDXGIFactory
。如果您需要1.1及以上的功能,您应该从
CreateDXGIFactory1
开始。还请注意,这两个函数在不同环境中具有不同的可用性,这是它们首先存在的原因之一。

我使用CreateDXGIFactory1创建IDXGIFactory,现在我可以使用此IDXGIFactory成功获取IDXGIFactory6。我想知道为什么?是因为我的系统支持DXGI1.6吗?
IDXGIFactory6
的可用性表明系统总体上支持DGXI 1.6(早期系统不知道此接口)。然而,可用的
IDXGIFactory
也没有什么错,因为对于初学者来说,
IDXGIFactory1
源于
IDXGIFactory
,因此后者的方法也实现了。不,不,不。我说的是我创建了一个IDXGIFactory,而不是一个IDXGIFactory6,但是我可以从IDXGIFactory获得IDXGIFactory6。因此我认为可能是CreateDXGIFactory,请为我创建IDXGIFactory6。重要的是您是否使用
CreateDXGIFactory
CreateDXGIFactory1
,而不是您是否使用
IDXGIFactory
IDXGIFactory1
。但我已经尝试过CreateDXGIFactory1,CreateDXGIFactory2之前,它给了我同样的结果。