我正在尝试将 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())
)
);
Run Code Online (Sandbox Code Playgroud)我不知道还能做什么。只有交换链调整大小不起作用。我是在 PC 上(不是 Windows Phone)执行此操作。