有趣的是,我之前从未遇到过OpenGL上下文丢失(即所有缓冲区资源被擦除)的情况,但现在遇到了。我目前使用的是OpenGL 4.2,通过SDL 1.2和GLEW在Win7 64上运行,我的应用程序是窗口化的,无法在运行时切换到全屏模式(只能在启动时允许)。
在我的开发机上,重新调整大小似乎不会导致上下文丢失,但在其他机器上,我的应用程序可能会失去OpenGL上下文(这似乎很少见)。由于内存限制(我的应用程序中有很多内存被其他部分使用),我没有在系统内存中备份我的gl缓冲区内容(VBO、FBO、纹理等),奇怪的是,这在过去对我来说并不是问题,因为上下文从未被擦除过。
从谷歌搜索中很难确定OpenGL上下文何时会丢失(即所有GPU内存缓冲区都被擦除),除了可能在全屏和窗口模式之间切换。
回想起我DX时代,上下文丢失可能发生的原因很多,当它发生时,我会得到通知,并从系统内存备份中重新加载我的缓冲区。我曾经认为(也许是我错误地认为),OpenGL(或像SDL这样的管理库)会为我处理这个缓冲区重新加载。这在任何程度上甚至部分正确吗?
我遇到的问题之一是,在调整大小时丢失上下文非常不方便,我使用了大量的GPU内存,重新加载所有内容可能会暂停应用程序一段时间(比我想要的时间长)。
这是一个设备相关的问题还是驱动程序相关的问题?它是设备、驱动程序和SDL版本的组合吗?如何检测到这种上下文丢失,以便我可以对其做出反应?
保留所有gl缓冲区内容的系统内存副本以便在上下文丢失时重新加载,这是标准做法吗?还是上下文丢失太少见,不是标准做法?
在我的开发机上,重新调整大小似乎不会导致上下文丢失,但在其他机器上,我的应用程序可能会失去OpenGL上下文(这似乎很少见)。由于内存限制(我的应用程序中有很多内存被其他部分使用),我没有在系统内存中备份我的gl缓冲区内容(VBO、FBO、纹理等),奇怪的是,这在过去对我来说并不是问题,因为上下文从未被擦除过。
从谷歌搜索中很难确定OpenGL上下文何时会丢失(即所有GPU内存缓冲区都被擦除),除了可能在全屏和窗口模式之间切换。
回想起我DX时代,上下文丢失可能发生的原因很多,当它发生时,我会得到通知,并从系统内存备份中重新加载我的缓冲区。我曾经认为(也许是我错误地认为),OpenGL(或像SDL这样的管理库)会为我处理这个缓冲区重新加载。这在任何程度上甚至部分正确吗?
我遇到的问题之一是,在调整大小时丢失上下文非常不方便,我使用了大量的GPU内存,重新加载所有内容可能会暂停应用程序一段时间(比我想要的时间长)。
这是一个设备相关的问题还是驱动程序相关的问题?它是设备、驱动程序和SDL版本的组合吗?如何检测到这种上下文丢失,以便我可以对其做出反应?
保留所有gl缓冲区内容的系统内存副本以便在上下文丢失时重新加载,这是标准做法吗?还是上下文丢失太少见,不是标准做法?