【问题标题】:Why does CreateWICTextureFromFile require ShowWindow?为什么 CreateWICTextureFromFile 需要 ShowWindow?
【发布时间】:2020-09-08 22:34:19
【问题描述】:

我正在编写一些 D3D11 应用程序并使用 DirectXTK 的 CreateWICTextureFromFile 将纹理文件加载到 SRV。我只想在开始绘制场景时(在初始化模型、纹理、着色器、常量缓冲区等之后)才显示我的渲染窗口,所以我很早就创建了这个窗口,但后来我省略了 ShowWindow。

很遗憾,除非在创建纹理之前显示窗口,否则我会收到错误消息:

// ShowWindow(hwnd, SW_SHOW); // works
hr = DirectX::CreateWICTextureFromFile(device.Get(), L"../../Common/Resources/Textures/green_grid.png", nullptr, psTexture.GetAddressOf());
ShowWindow(hwnd, SW_SHOW); // fails

H结果错误:

No such interface supported

如果我在初始化结束时显示窗口,只要我不使用此函数加载任何纹理,它似乎也可以正常工作。

也许我不太了解窗口在 D3D API 方面的工作原理。查看 CreateWICTextureFromFile 的参数,我只看到对设备和 SRV 的依赖。我不确定为什么依赖于窗口可见性?

【问题讨论】:

    标签: c++ textures direct3d


    【解决方案1】:

    在调用 WICTextureLoader(它使用 Windows Imaging Component)之前,您需要按照 documentation 中的说明初始化 COM。

    在您的主要入口点中,添加:

    if (FAILED(CoInitializeEx(nullptr, COINIT_MULTITHREADED)))
        // error
    

    ShowWindow 恰好初始化 COM 的事实是一个有趣的副作用,但这绝对是不是您需要调用才能使用我的 GitHub 库的函数。

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 2020-05-03
      • 1970-01-01
      • 2020-03-22
      • 2011-08-11
      • 2019-06-09
      • 2012-05-21
      • 2020-02-26
      • 2019-10-12
      相关资源
      最近更新 更多