我正在尝试将 DirectX11/XAML UWP 模板移植到 C++-WinRT 版本......其中一切都通过 C++-WinRT 完成,我可以关闭 CX。
我目前被困在如何ResizeBuffers
使用交换链。我不断收到错误消息,提示我尚未释放所有缓冲区引用。如果我注释掉与调整缓冲区大小有关的任何内容并且只是硬编码某个大小,则该应用程序可以正常工作。所以......我可能做错了什么。
我相信这与新的winrt::com_ptr
. Reset
WRL ComPtr 上没有类似的方法。我已将它们设置为nullptr
就像在原始 C++/CX 模板中一样,但这似乎还不够。
我必须做的其他事情可能会影响正在发生的事情:
DeviceResources 类现在是一个 C++/WinRT 类,我默认使用 nullptr_t 参数在所有其他类(SampleScene3DRenderer、DirectXPage 和 Main)中创建它。这样,我可以在 DirectXPage 中创建它,传入 swapChainPanel 引用,然后将这个 DeviceResources 实例传递给我创建的所有其他类。
在 DirectX 初始化中有一个地方你必须传入一个
**IUnknown
. C++/WinRT 的文档提到使用调用函数winrt::get_unknown
来返回*IUnknown
. 我无法让它适用于以下DWriteCreateFactory
方法,所以我尝试了这种方式:DX::ThrowIfFailed( DWriteCreateFactory( DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory3), reinterpret_cast<::IUnknown**>(m_dwriteFactory.put()) ) );
我不确定还能做什么。只有交换链调整大小不起作用。我在PC(不是Windows Phone)上这样做。