使用硬件渲染图形时,我在SDL 2.0.3中遇到了一个莫名其妙的错误。由于某种原因,程序启动后大约5分钟我的图形窗口关闭但我的控制台窗口保持打开状态。没有抛出错误或任何表示问题的东西。
当我暂停调试器时,程序将断点放在SDL_RenderPresent()中。我跟着调用堆栈到了一个名为WaitForSingleObject()的ntdll.dll里面的函数,但是我不知道是什么导致它永远挂起。
此外,当我使用软件渲染图形时,这不会发生。我在装有最新驱动程序的AMD FirePro M5100 FireGL V上运行它。
我的问题是,是否有人知道什么可能导致SDL_RenderPresent()永远不会返回?
答案 0 :(得分:1)
从描述中可以看出,图形管道的下层没有释放锁。
从5分钟后发生的事实看来,某处存在资源泄漏。
所有这些当然只是一个疯狂的猜测,但我要说应用程序代码或SDL代码泄漏资源(纹理,顶点缓冲区之类的句柄等)和代码的那部分(在SDL的较低级别或驱动程序中),当用完时表现不佳(这种情况经常发生......在很多情况下,资源条件不足,测试和处理不当)。
这在软件渲染中不会发生,因为资源基本上是无限的。这种问题的确认是,当在软件中运行时,程序可以运行,但是进程内存使用量不断增长和增长。
还要注意任何"捕捉"任何异常/失败并在此之后继续运行。编写在异常状态之后正常工作的复杂软件非常困难(基本上不可能超出微不足道的情况,因为异常安全不会按组合进行扩展:不会使复杂性爆炸的唯一方法是进行逻辑分区和#34;墙壁"并重新初始化整个子系统。)