Я пытаюсь перенести шаблон DirectX11 / XAML UWP на версию C ++ - WinRT ... где ВСЕ выполняется через C ++ - WinRT, и я могу отключить CX.
В настоящее время я застрял на том, как ResizeBuffers
на swapchain.Я продолжаю получать ошибку, которая говорит, что я не выпустил все ссылки на буфер.Если я закомментирую что-либо, связанное с изменением размера буферов и просто жестким кодом в размере, приложение работает.Итак ... Я, вероятно, делаю что-то не так.
Я считаю, что это связано с новым winrt::com_ptr
.Нет метода Reset
, как на WRL ComPtr.Я установил для них значение nullptr
, как в исходных шаблонах C ++ / CX, но этого, похоже, недостаточно.
Другие вещи, которые мне приходилось делать, могут влиять на происходящееon:
Класс DeviceResources теперь является классом C ++ / WinRT, который я создаю по умолчанию во всех других классах (SampleScene3DRenderer, DirectXPage и & Main) с помощью параметра nullptr_t.Таким образом, я могу создать его в 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())
)
);
Я не уверен, что еще делать.Только изменение размера swapchain не работает.Я делаю это на ПК (не Windows Phone).