我试图将DirectX12 12/XAML UWP模板移植到C++-WinRT版本.所有事情都是通过C++-WinRT完成的,我可以关闭CX。目前,我一直在研究如何在交换链上使用ResizeBuffers。在调整缓冲区大小之前,我必须释放所有缓冲区引用。在C++/CX ComPtr中,有Reset()方法来释放renderTarget缓冲区的引用,但是在C++/winrt com_ptr中不存在这样的Reset()方法,如果我将renderTarget设置为nullptr以释放它,它会抛出下面的屏幕显示的异常。如果不将renderTarget设置为nullptr,则不会引发异常,但也不会调整swapChain的大小。
后来,我还使用了wrl::ComPtr和Reset()方法尝试了它,它仍然抛出相同的错误。有人知道在swapChain中调整DirectX12大小的正确方法吗?
发布于 2022-08-06 02:53:42
您不能使用“快速失败”错误处理程序,如ThrowIfFailed用于ResizeBuffers或Present。这两个代码都必须在运行时返回有意义的故障代码。
具体来说,两者都可以返回DXGI_ERROR_DEVICE_REMOVED或DXGI_ERROR_DEVICE_RESET,您需要处理它。事实上,在UWP环境中,您会看到这发生在启动时,所以您必须处理它--一些“经典”的Win32桌面应用程序只是忽略它,在奇怪的时候崩溃,比如Windows在游戏运行时更新驱动程序。
有关处理“丢失设备”(实际上是“删除设备”)的详细信息,请参阅DeviceResources .h / .cpp。
请参见Microsoft,它是为DirectX 11编写的,但是对于DirectX 12,必须发生所有类似的事情。
https://stackoverflow.com/questions/73244770
复制相似问题