OpenGL-gpu内存超出,可能的情况

OpenGL - gpu memory exceeded, possible scenarios

本文关键字:情况 内存 OpenGL-gpu      更新时间:2023-10-16

我可以使用glTexImage2DglBufferData向gpu内存发送一些数据。假设我请求驱动程序向gpu发送更多数据,但gpu内存已经满了。我可能得到GL_OUT_OF_MEMORY。渲染线程可能会发生什么?可能的情况是什么?是否有可能终止渲染线程?

这取决于实际的OpenGL实现。但最有可能的情况是,你只会遇到严重的性能下降,但事情会继续下去。

OpenGL使用一个抽象内存模型,实际实现威胁到GPU自己的内存作为缓存。事实上,对于大多数OpenGL实现,当你加载纹理数据时,它一开始甚至不会直接进入GPU。只有当渲染实际需要时,它才会加载到GPU RAM中。如果使用的纹理比GPU RAM中的纹理多,则会根据需要从GPU RAM中交换纹理以完成渲染。

旧一代GPU需要一个纹理来完全适应他们的RAM。2012年之后推出的GPU实际上可以根据需要从主机内存访问纹理子集,从而提高了这一限制。事实上,您很快就会遇到最大纹理尺寸限制,而不是内存限制(BT;DT)。

当然,其他开发得不太好的OpenGL实现可能会出现内存不足的错误。但至少对AMD和NVidia来说,这不是问题。