为什么CreateWICTextureFromFile需要ShowWindow?

问题描述

我正在编写一些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

HResult错误:

No such interface supported

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

也许我对窗口相对于D3D API的工作方式没有很好的了解。查看CreateWICTextureFromFile的参数,我只看到对设备和SRV的依赖。我不确定为什么对窗口的可见性有依赖性吗?

解决方法

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

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...