首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IDXGIFactory版本

IDXGIFactory版本
EN

Stack Overflow用户
提问于 2017-02-20 21:17:07
回答 2查看 3.4K关注 0票数 3

我正在使用DXGIDirectX 11使用C++。目前,我正在用IDXGIFactory进行实验。经过一些研究和阅读文献资料,我注意到有不同的版本。

IDXGIFactory IDXGIFactory1 IDXGIFactory2 IDXGIFactory3 IDXGIFactory4 IDXGIFactory5

但我也注意到,只有为前3个IDXGIFactory版本创建这样一个实例的方法,而没有为最后3个版本创建此类实例的方法。

CreateDXGIFactory CreateDXGIFactory1 CreateDXGIFactory2

没有CreateDXGIFactory3,CreateDXGIFactory4或CreateDXGIFactory5。

所以我的问题是如何创建一个IDXGIFactory5实例?

此外,我想知道我自己是否不能实例化IDXGIFactory5的一个实例,如何才能强制D3D11CreateDevice在内部创建和使用IDXGIFactory5,以便从结果ID3D11Device中检索引用?

编辑:

现在,我了解了不同的CreateDXGIFactory函数以及如何创建IDXGIFactory5实例。但在理解了这一点之后,我又遇到了下一个问题。IDXGIAdapter2的文档说,我应该使用IDXGIFactory1 1::EnumAdapters1 1查询实例。但是看看函数签名,我只得到了一个IDXGIAdapter1。

代码语言:javascript
运行
复制
HRESULT EnumAdapters1(
    UINT Adapter,
    [out] IDXGIAdapter1 **ppAdapter
);

如何枚举IDXGIAdapter2实例?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-20 21:27:09

CreateDXGIFactory上的数字与该函数签名的更改有关,而不是与返回的COM对象实现的接口相关。特别是,CreateDXGIFactory2添加了Flags参数。

您将以与任何其他COM对象相同的方式获得对所需接口的引用。以下任一项:

  1. 将所需接口的IID传递为riid,然后将返回的对象强制转换为该接口或
  2. 传递接口(如IUnknown )的IID。对返回的对象调用QueryInterface以获得所需的接口。如果您想要支持多个版本,这可能是有用的,因为您可以尝试版本5,如果没有发现,请返回到版本4,例如。

例如,备选方案1看起来可能如下:

代码语言:javascript
运行
复制
IDXGIFactory2* factory;
HRESULT hr = CreateDXGIFactory2(0, IID_IDXGIFactory5, (void**)&factory);
if(SUCCEEDED(hr))
{
  // ...
}
票数 4
EN

Stack Overflow用户

发布于 2017-02-20 22:04:52

  1. IDXGIFactory5接口继承自IDXGIFactory4
  2. IDXGIFactory4接口继承自IDXGIFactory3
  3. IDXGIFactory3接口继承自IDXGIFactory2
  4. IDXGIFactory2接口继承自IDXGIFactory1

您必须为接口类型包括适当的头。

#include <DXGI1_5.h>

并声明了一个正确指针类型的实例。

IDXGIFactory5* outPtr = nullptr; \\this really should be a CComPtr

打电话给CreateDXGIFactory1(__uuidof(IDXGIFactory5),&outPtr);。如果它成功了,您将得到一个IDXGIFactory5,它拥有IDXGIFactory4、IDXGIFactory3、IDXGIFactory2和IDXGIFactory1所拥有的所有方法,再加上它自己的CheckFeatureSupport方法。CreateDXGIFactory1CreateDXGIFactory2函数只是DXGI1.1-1.5的CreateDXGIFactory重载版本,而CreateDXGIFactory用于创建IDXGIFactory DXGI1.0对象。要创建DXGIFactory5对象,必须使用DXGI1.5 (Windows 10 Direct3D 12)。要更好地理解CheckFeatureSupport函数的用途以及为什么需要它,请参阅对Direct3D 12级别的解释。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42354369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档