假设我已经加载了一个或两个纹理,可能还有一些着色器、一个 VAO、一个 VBO,然后我运行程序。
假设程序遇到某种运行时错误并在所有这些缓冲区对象和纹理被删除之前终止。
在我重新启动计算机之前,它们是否会卡在视频内存中?
我知道 java 会自己进行清理,但我认为 opengl 不会,所以我很好奇会发生什么。
在我重新启动计算机之前,它们是否会卡在视频内存中?
不会。图形卡由图形驱动程序管理,该图形驱动程序通知或通知处理它的进程已终止。与一个进程相关联且未被其他进程使用的所有资源都将被释放。
在某些操作系统上,可以在进程之间共享 OpenGL 上下文。如果其中一个进程终止,这些当然会保留下来。
顺便说一句:OpenGL 不使用术语“视频内存”。内存有快有慢之分,但根据实现的不同,它们可能是相同的。此外,当您上传纹理时,它的副本也会保存在系统内存中,因为 OpenGL 不会对纹理和缓冲区对象施加内存限制。如有必要,它将交换数据以为所需资源腾出空间。