我可以使用glTexImage2D
或glBufferData
将一些数据发送到gpu内存。让我们假设我请求驱动程序向gpu发送更多数据,但gpu内存已经满了。我可能得到了GL_OUT_OF_MEMORY。渲染线程可能会发生什么?有哪些可能的情景?是否有可能终止渲染线程?
答案 0 :(得分:1)
这取决于实际的OpenGL实现。但最有可能的情况是,您只会遇到严重的性能下降,但事情会继续发挥作用。
OpenGL使用抽象内存模型,实际实现威胁GPU自己的内存作为缓存。事实上,对于大多数OpenGL实现,当您加载纹理数据时,它甚至不会直接进入GPU。只有在实际需要渲染时才会将其加载到GPU RAM中。如果使用的纹理多于适合GPU RAM的纹理,则根据需要将纹理从GPU RAM中交换出来以完成渲染。
较旧的GPU代需要纹理完全适合其RAM。 2012年之后出来的GPU实际上可以根据需要从主机内存访问纹理子集,从而提升了这个限制。实际上,您很快就会遇到最大纹理尺寸限制,而不是内存限制(BT; DT)。
当然,其他不太完善的OpenGL实现可能会因内存不足错误而挽救。但至少对于AMD和NVidia而言,这不是问题。