小编Lee*_*son的帖子

C++-WinRT 的 com_ptr 重置?

我正在尝试将 DirectX11/XAML UWP 模板移植到 C++-WinRT 版本...其中一切都是通过 C++-WinRT 完成的,我可以关闭 CX。

我目前陷入了如何ResizeBuffers使用交换链的困境。我不断收到错误消息,提示我尚未释放所有缓冲区引用。如果我注释掉与调整缓冲区大小有关的任何内容并仅硬编码大小,则该应用程序可以正常工作。所以...我可能做错了什么。

我相信这与新的winrt::com_ptr. 没有Reset像 WRL ComPtr 上那样的方法。我已将它们设置为nullptr与原始 C++/CX 模板中一样,但这似乎还不够。

我必须做的其他事情可能会影响正在发生的事情:

  1. DeviceResources 类现在是一个 C++/WinRT 类,我使用 nullptr_t 参数在所有其他类(SampleScene3DRenderer、DirectXPage 和 Main)中默认创建该类。这样,我可以在 DirectXPage 中创建它,传入 swapChainPanel 引用,然后将这个 DeviceResources 实例传递给我创建的所有其他类。

  2. 在 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)执行此操作。

directx-11 c++-winrt

0
推荐指数
1
解决办法
1257
查看次数

标签 统计

c++-winrt ×1

directx-11 ×1