【问题标题】:Is CreateDXGIFactory always create the newest version of IDXGIFactory system support?CreateDXGIFactory 是否总是创建最新版本的 IDXGIFactory 系统支持?
【发布时间】:2018-11-08 10:13:55
【问题描述】:

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

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

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

2.第二个问题,D3D11CreateDevice函数是创建系统支持的最新版本的ID3D11Device吗?

【问题讨论】:

    标签: directx directx-11 direct3d11 dxgi


    【解决方案1】:

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

    要创建一个 Direct3D 11.1 设备 (ID3D11Device1),它在 Windows 8、Windows Server 2012 和 Windows 7 和 Windows Server 2008 R2 上可用,并安装了适用于 Windows 7 的平台更新,您首先使用此函数创建一个 ID3D11Device,然后调用ID3D11Device对象的QueryInterface方法获取ID3D11Device1接口。

    要创建 Direct3D 11.2 设备 (ID3D11Device2),它在 Windows 8.1 和 Windows Server 2012 R2 上可用,首先使用此函数创建一个 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 及更高版本的功能,您应该以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,它给了我相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-12-19
    • 2021-02-20
    • 1970-01-01
    • 2023-03-08
    • 2019-12-16
    • 2021-08-11
    • 1970-01-01
    • 2021-03-26
    相关资源
    最近更新 更多