在OpenGL上下文丢失后必须做什么?

aCu*_*ria 1 opengl sdl visual-c++

考虑这个问题的好方法是什么?手柄丢失了吗?

glCreateProgram()?glCreateShader()?glGenTextures()?glGenBuffers()?

我想知道我是否正在做必要的事情(或做太多和泄漏记忆)

Nic*_*las 5

你怎么会失去一个背景?OpenGL上下文将一直存在,直到你销毁它(或窗口/ HDC).

但是,所有OpenGL对象都绑定到它们所创建的上下文.如果销毁上下文,所有对象也会被销毁(除非您有另一个上下文的共享对象.在这种情况下,只有可共享对象将保持).所以你必须重装它们.

例如,我是否调用所有3个函数调用:glCreateProgram()glAttachShader()glLinkProgram()还是最后两个?

如果销毁OpenGL上下文,则必须调用重新创建对象所需的任何OpenGL函数.从旧上下文中获得的任何OpenGL对象都消失了.它们无效.它们是删除的指针,使用删除的指针总是错误的.

新的OpenGL上下文是新的.因此,您必须创建对象,就像它是一个新的上下文一样.因为它是.