【问题标题】:IDXGIFactory2::CreateSwapChainForHwnd failsIDXGIFactory2::CreateSwapChainForHwnd 失败
【发布时间】:2022-07-25 18:00:14
【问题描述】:

https://1drv.ms/u/s!AkVRV9eGJ20rgTu13uTcNkhp0eZb?e=lwMe70

该链接将您带到我的 OneDrive,您可以在其中下载我的 Visual Studio 2022 解决方案和项目(它是一个 17.7KB 的 .7z 文件),它只有显示 win32 窗口的代码等等。我还附上了一张图片,告诉您 DirectX 诊断工具报告的 DirectX 规格。图片为下图:

问题就是标题所说的,我想让你看看你是否可以编译它没有问题,我担心它可能会失败,因为我不能使用 Direct3D 11.1(Direct3D 11.1 是必需的吗?我可以'找不到有关它的信息),但后来我尝试使用 D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY 创建标志(https://docs.microsoft.com/en-us/windows/win32/api/d3d11/ne-d3d11-d3d11_create_device_flag)创建 D3D 设备,只是为了测试我是否可以使用 Direct3D 11.1(因为在 Direct3D 11.1 之前不支持该标志)并且创建成功...所以我不知道了...

【问题讨论】:

  • @PaulSanders 当然它返回非零,它返回 0x887A0001 (DXGI_ERROR_INVALID_CALL)。你显然还没有看过代码。为什么你认为我没有努力去了解正在发生的事情?
  • 当您使用 DirectX 编程时,请确保在 dev.xml 中启用“调试层”。请参阅 docs.microsoft.com/en-us/windows/win32/direct3d11/…walbourn.github.io/direct3d-sdk-debug-layer-tricks。这将向您展示失败的原因:“必须使用 CreateSwapChainForComposition 或 CreateSwapChainForCoreWindow 使用 DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER 标志创建 Alpha 混合交换链。”
  • @zeleska 你说得对,我很抱歉,评论已删除。
  • @SimonMourier 谢谢!而且你知道,在发布这个问题之前我确实阅读了“使用调试层调试应用程序”,并且我确实使用标志激活了它,但我认为“调试输出”意味着“抛出异常”,所以当我迷失了调试器没有抛出任何东西,直到不久前我才知道它到底是什么,哦,我的上帝......,再次感谢你,如果你发表你的评论作为答案,我会接受它。

标签: directx directx-11 direct3d direct3d11 dxgi


【解决方案1】:

当您使用 DirectX 进行编程时,请确保您始终在 dev 中启用“调试层”并检查 Visual Studio 的“输出”窗口中的输出(或其他调试器输出)。

查看这些链接:Using the debug layer to debug appsDirect3D SDK Debug Layer Tricks 了解更多信息,因为它的安装方式已随 DirectX 版本和年份而变化...

这将告诉您失败的原因:

Alpha 混合交换链必须使用 CreateSwapChainForComposition 或 CreateSwapChainForCoreWindow 与 DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER 标志。

【讨论】:

    【解决方案2】:

    也许你可以通过FormatMessageW()获取返回结果和错误信息

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 2014-10-20
      • 2016-01-22
      • 1970-01-01
      • 2013-02-24
      • 2011-01-17
      相关资源
      最近更新 更多