我试图将DirectX11 11/XAML UWP模板移植到C++-WinRT版本.所有事情都是通过C++-WinRT完成的,我可以关闭CX。
目前,我一直在研究如何在交换链上使用ResizeBuffers。我一直收到一个错误,它说我没有释放所有的缓冲区引用。如果我注释掉任何与调整缓冲区大小和大小的硬代码有关的内容,该应用程序就能工作。所以..。我可能做错了什么。
我相信这与新的winrt::com_ptr有关。没有像WRL ComPtr中那样的ComPtr方法。我已经将它们设置为nullptr,就像在最初的C++/CX模板中一样,但这似乎还不够。
我不得不做的其他事情可能会对发生的事情产生影响:
**IUnknown。C++/WinRT的文档提到使用一个名为winrt::get_unknown的函数返回一个*IUnknown。我无法让它在下面的DWriteCreateFactory方法中工作,所以我尝试了这样做:
DX::ThrowIfFailed( reinterpret_cast<::IUnknown**>(m_dwriteFactory.put()),DWRITE_FACTORY_TYPE_SHARED,__uuidof(IDWriteFactory3) );我不知道还能做什么。只有交换链调整不起作用。我在电脑上做这个(不是windows )。
发布于 2018-06-11 15:08:58
使用DWriteCreateFactory和上面的put成员进行的put调用是正确的。同时,使用nullptr赋值也是重置com_ptr<T>的正确方法。
com_ptr<IUnknown> ptr = ...
assert(ptr);
ptr = nullptr;
assert(!ptr);如果希望与C++/WinRT报告错误的方式保持一致,也可以使用winrt::check_hresult而不是ThrowIfFailed。下面是一个完全用C++/WinRT编写的简单DirectX示例:
https://github.com/kennykerr/cppwinrt/blob/master/Store/Direct2D/App.cpp
https://stackoverflow.com/questions/50788733
复制相似问题