我正在尝试将DirectX11 / XAML UWP模板移植到C-WinRT版本......其中一切都通过C -WinRT完成,我可以关闭CX .
我目前仍然坚持如何在交换链上使用 ResizeBuffers
. 我一直收到错误,说我没有释放所有的缓冲区引用 . 如果我评论任何与调整大小缓冲区和只是大小硬编码有关的事情,该应用程序的工作原理 . 所以...我可能做错了什么 .
我认为这与新的 winrt::com_ptr
有关 . WRL ComPtr上没有 Reset
方法 . 我将它们设置为 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手机) .
1 回答
上面使用
winrt::com_ptr<T>
和put
成员的DWriteCreateFactory
调用是正确的 . 同样使用nullptr
赋值是重置com_ptr<T>
的正确方法 .如果您希望与C / WinRT报告错误的方式保持一致,您也可以使用
winrt::check_hresult
而不是ThrowIfFailed
. 这是一个完全用C / WinRT编写的简单DirectX示例:https://github.com/kennykerr/cppwinrt/blob/master/Store/Direct2D/App.cpp