【问题标题】:Proper way to create a IDXGIFactory7创建 IDXGIFactory7 的正确方法
【发布时间】:2021-03-02 08:32:11
【问题描述】:

我正在开发 DirectX 11 应用程序,但在创建 IDXGIFactory7 实例时遇到了困难。我找不到 CreateDXGIFactory7() 函数,所以我像这样使用 CreateDXGIFactory2():

IDXGIFactory7* factory;
HRESULT hr = ::CreateDXGIFactory2(DXGI_CREATE_FACTORY_DEBUG, __uuidof(IDXGIFactory7), (void**)&factory);

我遇到的困难是,当尝试在 Visual Studio 2019 中使用图形调试器时,此调用会引发异常。我还尝试了 IDXGIFactory6,它也会引发异常。如果我将其更改为 IDXGIFactory2,它可以工作,我可以使用图形调试器。

此代码使用常规调试器可以正常运行和调试,但不能使用图形调试器。我得到以下异常:

Exception thrown at 0x00007FFAE1513B29 in DirectXTemplated.exe: Microsoft C++ exception: GRFXTool::ToolException at memory location 0x0000004D28BFE010.

我从https://www.3dgep.com/introduction-to-directx-11/ 下载了示例并将其修改为在 QueryRefreshRate() 函数中使用 IDXGIFactory7 和 CreateDXGIFactory2() 而不是 IDXGIFactory。您需要在 main.cpp 的顶部设置 g_EnableVSync = TRUE 以便它创建工厂。这在尝试使用图形调试器时会产生异常。

这是带有 Visual Studio v16.7.6 的 Windows 10 Pro x64 安装。

【问题讨论】:

  • 您使用的是哪个 Windows 10 版本?
  • @ChuckWalbourn Windows 10 版本 1909,操作系统版本 18363.1198。
  • 您应该将此作为错误提交给Report a Problem...
  • “抛出异常”是不充分的描述。接下来发生什么?异常是否在 API 调用之外处理或传递?如果处理,hr 是什么?当您不通过DXGI_CREATE_FACTORY_DEBUG 时,情况会有所不同吗?最后,您需要在问题系统上尝试的另一种简单解决方法是请求IDXGIFactory,并在收到IDXGIFactory7 的接口指针QueryInterface 后。
  • @RomanR。未处理异常,调试器不会让您继续。不返回 hr,因此您无法检查它。删除 DXGI_CREATE_FACTORY_DEBUG 并没有改变任何东西。不过,您的最后一个建议确实有效,我将基于此发布解决方案。

标签: visual-studio-2019 dxgi


【解决方案1】:

根据 Roman R. 的评论,解决问题的方法似乎是使用 CreateDXGIFactory2() 创建一个 IDXGIFactory2 并在其上使用 QueryInterface() 来获取 IDXGIFactory7 的那个。

这样做可以避免异常,并且应用程序在图形调试器下运行没有问题。

【讨论】:

  • 这不是一个真正合适的解决方案,它确实绕过了这个错误,但是以这种方式转换接口会在稍后使用这个接口时导致其他错误“使用函数指针时,ESP 没有在函数调用中正确保存”
  • @ma1169 实际上有更好的解决方法。在桌面上放置 Visual Studio 2019 的快捷方式。右键单击它并从上下文菜单中选择“使用图形处理器运行”,然后选择您的高性能选项。一切都将正确枚举,并且我创建上述工厂的原始方法将起作用。该菜单选项在开始菜单或将 VS 固定到任务栏时不可用,只能通过快捷方式使用。
【解决方案2】:

我出现此错误的原因是因为 DirectX12 is no longer Supported 根据 Microsoft 团队的说法,所以这是它不起作用的一种情况

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-15
    • 2021-05-05
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多