问题描述
我正在编写一些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库时需要调用的函数。