SDL_RenderPresent 永远挂起
SDL_RenderPresent Hangs Forever
我在使用硬件渲染图形时遇到了 SDL 2.0.3 中无法解释的错误。出于某种原因,程序启动后大约 5 分钟,我的图形 window 关闭但我的控制台 window 保持打开状态。没有抛出错误或任何表示问题的东西。
当我暂停调试器时,程序将断点放在 SDL_RenderPresent() 内。我跟随调用堆栈找到了 ntdll.dll 中一个名为 WaitForSingleObject() 的函数,但我不确定是什么导致它永远挂起。
此外,当我使用软件渲染图形时,不会发生这种情况。我 运行 它安装在安装了最新驱动程序的 AMD FirePro M5100 FireGL V 上。
我的问题是,有谁知道什么可能导致 SDL_RenderPresent() 永远不会 return?
从描述来看,似乎有图形管道的较低级别未释放的锁。
从 5 分钟后发生的事实来看,似乎某处存在资源泄漏。
当然,所有这些都只是一个大胆的猜测,但我想说的是应用程序代码或 SDL 代码正在泄漏资源(纹理句柄、顶点缓冲区等)和那部分代码(无论是在较低级别的 SDL 还是在驱动程序中)当 运行 out 表现不佳时(这种情况经常发生......在许多情况下 low-resource 条件没有得到很好的测试和处理)。
这不会发生在软件渲染中,因为那里的资源基本上是无限的。确认此类问题的是,当 运行 在软件渲染中程序运行时,进程内存使用量不断增长。
还要注意 "catches" 任何 exception/failure 并在此之后保留 运行 的任何代码。编写在异常状态后正常工作的复杂软件非常困难(除了微不足道的情况基本上是不可能的,因为异常安全性不按组合扩展:不使复杂性爆炸的唯一方法是进行逻辑分区 "walls"和 re-initialize 整个子系统)。
我在使用硬件渲染图形时遇到了 SDL 2.0.3 中无法解释的错误。出于某种原因,程序启动后大约 5 分钟,我的图形 window 关闭但我的控制台 window 保持打开状态。没有抛出错误或任何表示问题的东西。
当我暂停调试器时,程序将断点放在 SDL_RenderPresent() 内。我跟随调用堆栈找到了 ntdll.dll 中一个名为 WaitForSingleObject() 的函数,但我不确定是什么导致它永远挂起。
此外,当我使用软件渲染图形时,不会发生这种情况。我 运行 它安装在安装了最新驱动程序的 AMD FirePro M5100 FireGL V 上。
我的问题是,有谁知道什么可能导致 SDL_RenderPresent() 永远不会 return?
从描述来看,似乎有图形管道的较低级别未释放的锁。
从 5 分钟后发生的事实来看,似乎某处存在资源泄漏。
当然,所有这些都只是一个大胆的猜测,但我想说的是应用程序代码或 SDL 代码正在泄漏资源(纹理句柄、顶点缓冲区等)和那部分代码(无论是在较低级别的 SDL 还是在驱动程序中)当 运行 out 表现不佳时(这种情况经常发生......在许多情况下 low-resource 条件没有得到很好的测试和处理)。
这不会发生在软件渲染中,因为那里的资源基本上是无限的。确认此类问题的是,当 运行 在软件渲染中程序运行时,进程内存使用量不断增长。
还要注意 "catches" 任何 exception/failure 并在此之后保留 运行 的任何代码。编写在异常状态后正常工作的复杂软件非常困难(除了微不足道的情况基本上是不可能的,因为异常安全性不按组合扩展:不使复杂性爆炸的唯一方法是进行逻辑分区 "walls"和 re-initialize 整个子系统)。