我是否必须通过glDelete*函数手动清理所有DisplayLists、纹理、(几何体)着色器等,或者当我的程序退出/崩溃时,GPU内存会自动释放吗?
注: GPU内存是指专用显卡上的专用内存,而不是CPU内存。
发布于 2010-02-15 12:12:17
释放上下文,其他所有内容都是上下文的本地内容(除非您启用了显示列表共享),并将随其一起消失。
发布于 2010-02-07 17:50:05
正如其他人提到的,您的操作系统(与驱动程序资源管理器协作)应该释放资源。这就是OSes的作用。值得注意的是,这与OpenGL无关,而是行为良好的OSes及其相关驱动程序章程的一部分。操作系统的作用是处理所有系统资源。OpenGL只是它们的一个子集,它们与文件句柄没有什么不同。现在,为了获得更具体的信息,您应该指定您关心的操作系统。
顺便说一句,这就是我反对克里斯夫的答案的地方。它不应该由驱动程序来决定它需要做清理。操作系统驱动程序模型将在用户模式OpenGL驱动程序(它不应该执行实际的gfx资源分配,因为它在机器中共享)、操作系统(它提供等同于分配资源的系统调用)和内核模式驱动程序(也就是仅仅以与gpu兼容的方式执行操作系统命令)之间有一个清晰的接口。至少WIN2K和WDDM模型是这样的。
所以..。如果您的进程崩溃或以其他方式终止,在这些模型中,调用内核模式驱动程序以释放与该进程关联的所有资源是操作系统的责任。
现在,您是否应该这样做,实际上有点像在源代码中询问制表符或空格。不同的人在这里有不同的信仰。“操作系统无论如何都会这么做的,立即退出是一种更好的最终用户体验”vs“我想知道我是否正在泄漏内存,因为如果我的程序是长时间运行的,我真的不希望它遇到OOM错误。做到这一点的最好方法是始终保持无泄漏”是我所知道的两条主线。
发布于 2010-02-07 07:09:42
当您的程序退出(或崩溃)时,它当前分配的任何内存最终都应该被释放,就像程序退出时通常释放主内存一样。在GPU“意识到”内存可再次使用之前,可能需要一段时间。
但是,您不应该依赖此行为,因为它可能取决于显卡驱动程序是如何实现的。当你(作为程序员)知道你不再需要那个内存时,进行显式的清理调用要好得多。
https://stackoverflow.com/questions/2215088
复制相似问题