对于D3D,在退出进程之前是否需要调用release

With D3D, do I need to call release before I exit my process?

本文关键字:是否 调用 release D3D 退出 进程 对于      更新时间:2023-10-16

我为direct3d学习的教程是这样说的:

"…基本上,如果你创建了Direct3D,但从未关闭它,它只会在计算机的后台继续运行,直到你下次重新启动,即使程序本身关闭。糟糕。尤其糟糕的是,如果你的游戏中有很多资源。释放这两个界面可以让一切摆脱困境,并允许Windows收回它的内存。"(链接)

我真的不相信这个教程所说的,在你退出这个过程后,资源仍然会挂在那里。。。

比如,如果我的程序崩溃,或者我只是在调试时按下停止键。。资源还在吗?和其他使用directx的游戏,我经常通过杀死过程来关闭它们。

如果我退出进程并且不调用设备->Release,那么资源会对操作系统免费吗?

简单地说,不是。当进程终止时,所有DirectX资源将被释放,GPU或系统内存不会泄漏。

虽然确实会回收与进程相关的资源,如内存、线程、句柄等,但请记住,D3D也在利用视频硬件上的内存和资源。根据您的具体实现,如果不通知D3D您正在关闭可能也不会在进程退出时清除所有这些。

我在使用Managed DX9接口的软件中看到了一些非常有趣的渲染工件,这些工件在调用EvictManagedResources之前无法清理。这些工件发生在一个自动化的测试套件中,是的,它们在同一进程的单独调用之间持续存在(作为显示/帧缓冲区上的小矩形垃圾)。

正确编码的应用程序仍然可以对内部异常和/或处理终止请求(WM_QUERYENDESSION等)做出适当反应,并执行此清理。