C++ OpenGL:运行大量应用程序时,内存(纹理存储)会损坏

C++ OpenGL:运行大量应用程序时,内存(纹理存储)会损坏,c++,opengl,C++,Opengl,我正在构建一个基于OpenGL的应用程序。它使用一些高分辨率纹理。有时,当切换到计算机上运行的其他应用程序并返回时,我的一些纹理存储的内存会损坏。我不是100%确定发生了什么,但感觉驱动程序内存不足,所以它窃取了我应用程序纹理存储的一些内存块,并将其提供给其他应用程序。一旦我回到我的应用程序,我的一些纹理中就会出现矩形黑洞 我完全理解系统耗尽了VRAM,并且发生了类似的事情,但我希望在发生这种情况时得到通知,因此当用户返回应用程序时,如果内存缓冲区失效,我可以恢复它们 这种行为是否正常,或者驱动

我正在构建一个基于OpenGL的应用程序。它使用一些高分辨率纹理。有时,当切换到计算机上运行的其他应用程序并返回时,我的一些纹理存储的内存会损坏。我不是100%确定发生了什么,但感觉驱动程序内存不足,所以它窃取了我应用程序纹理存储的一些内存块,并将其提供给其他应用程序。一旦我回到我的应用程序,我的一些纹理中就会出现矩形黑洞

我完全理解系统耗尽了VRAM,并且发生了类似的事情,但我希望在发生这种情况时得到通知,因此当用户返回应用程序时,如果内存缓冲区失效,我可以恢复它们

这种行为是否正常,或者驱动程序是否应该对纹理数据进行排序,并在以后进行恢复(但没有这样做或没有这样做)?如果这种行为是正常的,我如何检测到这种情况发生,以及如何处理这种情况


为了完整性:我在macOS Sierra上的MacBook Pro 8,1上遇到了这种情况,它有Intel HD Graphics 3000和16 GB的ram。

这是不正常的。在OS X上你无法检测到类似的东西,但同样的道理,如果驱动程序正常工作,这种情况也不应该发生。比OS X支持更新的OpenGL版本具有健壮性扩展,在重置上下文时会通知您,以便您可以根据需要决定重新加载资源。任何不支持这些通知的实现都无法从您的脚下拔出地毯,并且应该根据需要透明地处理VRAM中的资源交换,以处理上下文重置。这是不正常的。您无法检测到这样的内容(在OS X上),但出于同样的原因,如果驾驶员能够正常工作,就不应该发生这种情况。比OS X支持更新的OpenGL版本具有健壮性扩展,在重置上下文时会通知您,以便您可以根据需要决定重新加载资源。任何不支持这些通知的实现都无法从您的脚下拔出地毯,并且应该根据需要透明地处理VRAM中的资源交换,以处理上下文重置。