IDXGIF工厂版本
IDXGIFactory versions
我正在使用 C++ 使用 DXGI 和 DirectX 11。
目前我正在试验 IDXGIFactory。
经过一些研究和阅读 the documentation 我注意到有不同的版本。
IDXGIFactory
IDXGIFactory1
IDXGIFactory2
IDXGIFactory3
IDXGIFactory4
IDXGIFactory5
但我也注意到,只有为前 3 个 IDXGIFactory 版本创建此类实例的方法,但没有为后 3 个版本创建此类实例的方法。
创建DXGIFactory
创建DXGIFactory1
创建DXGIFactory2
没有CreateDXGIFactory3、CreateDXGIFactory4或CreateDXGIFactory5。
所以我的问题是如何创建一个 IDXGIFactory5 实例?
此外,我想知道我是否无法自己实例化 IDXGIFactory5 的实例,如何强制 D3D11CreateDevice 在内部创建和使用 IDXGIFactory5,以便我可以从生成的 ID3D11Device 中检索引用?
编辑:
好的,现在我了解了不同的 CreateDXGIFactory 函数以及如何创建 IDXGIFactory5 实例。
但是在了解了这一点之后,我遇到了下一个问题。
IDXGIAdapter2 的文档说我应该使用 IDXGIFactory1::EnumAdapters1 来查询一个实例。
但是查看函数签名,我只得到一个 IDXGIAdapter1。
HRESULT EnumAdapters1(
UINT Adapter,
[out] IDXGIAdapter1 **ppAdapter
);
如何枚举 IDXGIAdapter2 实例?
CreateDXGIFactory
上的数字与该函数签名的更改相关,与返回的 COM 对象实现的接口无关。特别是,CreateDXGIFactory2
添加了 Flags
参数。
您将以与任何其他 COM 对象相同的方式获取对所需接口的引用。或者:
将所需接口的 IID 作为 riid
传递,然后将返回的对象转换为该接口或
传递接口的IID,例如IUnknown
。在返回的对象上调用 QueryInterface
以获得所需的接口。如果你想支持多个版本,这可能很有用,因为你可以尝试版本 5,如果找不到则回退到版本 4,例如。
例如,选项 1 可能如下所示:
IDXGIFactory2* factory;
HRESULT hr = CreateDXGIFactory2(0, IID_IDXGIFactory5, (void**)&factory);
if(SUCCEEDED(hr))
{
// ...
}
- IDXGIFactory5接口继承自IDXGIFactory4
- IDXGIFactory4接口继承自IDXGIFactory3
- IDXGIFactory3接口继承自IDXGIFactory2
- IDXGIFactory2接口继承自IDXGIFactory1
您必须包含适当的 header 接口类型
#include <DXGI1_5.h>
并声明了正确指针类型的实例
IDXGIFactory5* outPtr = nullptr; \this really should be a CComPtr
并调用 CreateDXGIFactory1(__uuidof(IDXGIFactory5),&outPtr);
。如果成功,您将获得一个 IDXGIFactory5,它具有 IDXGIFactory4、IDXGIFactory3、IDXGIFactory2 和 IDXGIFactory1 具有的所有方法,加上它自己的 CheckFeatureSupport. The CreateDXGIFactory1
and CreateDXGIFactory2
functions are just overloaded versions of CreateDXGIFactory
for DXGI 1.1 - 1.5, however CreateDXGIFactory
is for creating IDXGIFactory
DXGI 1.0 objects. To create a DXGIFactory5 object you have to be using DXGI 1.5 (Windows 10 Direct3D 12). To get a better understanding of the purpose of the CheckFeatureSupport function and why you'd want it see this Direct3D 12 级别解释方法。
我正在使用 C++ 使用 DXGI 和 DirectX 11。 目前我正在试验 IDXGIFactory。 经过一些研究和阅读 the documentation 我注意到有不同的版本。
IDXGIFactory IDXGIFactory1 IDXGIFactory2 IDXGIFactory3 IDXGIFactory4 IDXGIFactory5
但我也注意到,只有为前 3 个 IDXGIFactory 版本创建此类实例的方法,但没有为后 3 个版本创建此类实例的方法。
创建DXGIFactory 创建DXGIFactory1 创建DXGIFactory2
没有CreateDXGIFactory3、CreateDXGIFactory4或CreateDXGIFactory5。
所以我的问题是如何创建一个 IDXGIFactory5 实例?
此外,我想知道我是否无法自己实例化 IDXGIFactory5 的实例,如何强制 D3D11CreateDevice 在内部创建和使用 IDXGIFactory5,以便我可以从生成的 ID3D11Device 中检索引用?
编辑:
好的,现在我了解了不同的 CreateDXGIFactory 函数以及如何创建 IDXGIFactory5 实例。 但是在了解了这一点之后,我遇到了下一个问题。 IDXGIAdapter2 的文档说我应该使用 IDXGIFactory1::EnumAdapters1 来查询一个实例。 但是查看函数签名,我只得到一个 IDXGIAdapter1。
HRESULT EnumAdapters1(
UINT Adapter,
[out] IDXGIAdapter1 **ppAdapter
);
如何枚举 IDXGIAdapter2 实例?
CreateDXGIFactory
上的数字与该函数签名的更改相关,与返回的 COM 对象实现的接口无关。特别是,CreateDXGIFactory2
添加了 Flags
参数。
您将以与任何其他 COM 对象相同的方式获取对所需接口的引用。或者:
将所需接口的 IID 作为
riid
传递,然后将返回的对象转换为该接口或传递接口的IID,例如
IUnknown
。在返回的对象上调用QueryInterface
以获得所需的接口。如果你想支持多个版本,这可能很有用,因为你可以尝试版本 5,如果找不到则回退到版本 4,例如。
例如,选项 1 可能如下所示:
IDXGIFactory2* factory;
HRESULT hr = CreateDXGIFactory2(0, IID_IDXGIFactory5, (void**)&factory);
if(SUCCEEDED(hr))
{
// ...
}
- IDXGIFactory5接口继承自IDXGIFactory4
- IDXGIFactory4接口继承自IDXGIFactory3
- IDXGIFactory3接口继承自IDXGIFactory2
- IDXGIFactory2接口继承自IDXGIFactory1
您必须包含适当的 header 接口类型
#include <DXGI1_5.h>
并声明了正确指针类型的实例
IDXGIFactory5* outPtr = nullptr; \this really should be a CComPtr
并调用 CreateDXGIFactory1(__uuidof(IDXGIFactory5),&outPtr);
。如果成功,您将获得一个 IDXGIFactory5,它具有 IDXGIFactory4、IDXGIFactory3、IDXGIFactory2 和 IDXGIFactory1 具有的所有方法,加上它自己的 CheckFeatureSupport. The CreateDXGIFactory1
and CreateDXGIFactory2
functions are just overloaded versions of CreateDXGIFactory
for DXGI 1.1 - 1.5, however CreateDXGIFactory
is for creating IDXGIFactory
DXGI 1.0 objects. To create a DXGIFactory5 object you have to be using DXGI 1.5 (Windows 10 Direct3D 12). To get a better understanding of the purpose of the CheckFeatureSupport function and why you'd want it see this Direct3D 12 级别解释方法。