首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在swapChain中调整DirectX12大小的正确方法

在swapChain中调整DirectX12大小的正确方法
EN

Stack Overflow用户
提问于 2022-08-05 04:43:02
回答 1查看 143关注 0票数 0

我试图将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大小的正确方法吗?

代码和错误的截图

EN

回答 1

Stack Overflow用户

发布于 2022-08-06 02:53:42

您不能使用“快速失败”错误处理程序,如ThrowIfFailed用于ResizeBuffersPresent。这两个代码都必须在运行时返回有意义的故障代码。

具体来说,两者都可以返回DXGI_ERROR_DEVICE_REMOVEDDXGI_ERROR_DEVICE_RESET,您需要处理它。事实上,在UWP环境中,您会看到这发生在启动时,所以您必须处理它--一些“经典”的Win32桌面应用程序只是忽略它,在奇怪的时候崩溃,比如Windows在游戏运行时更新驱动程序。

有关处理“丢失设备”(实际上是“删除设备”)的详细信息,请参阅DeviceResources .h / .cpp

请参见Microsoft,它是为DirectX 11编写的,但是对于DirectX 12,必须发生所有类似的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73244770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档