【发布时间】:2017-02-20 21:17:07
【问题描述】:
我正在使用 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是 Direct3D 10 的原始 DXGI 1.0 工厂函数。对于 Direct3D 11,您应该始终使用CreateDXGIFactory1并创建IDXGIFactory1或更高版本的接口。对于 Windows 8.1 和 Windows 10 上的调试版本,您可以使用CreateDXGIFactory2创建IDXGIFactory1或更高版本的调试版本——例如,请参阅 this template。对于 DIrect3D 12,您可以假设CreateDXGIFactory2并且支持IDXGIFactory4或更高版本。
标签: c++ directx-11 dxgi