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

时间:2012-03-10 18:35:14

标签: visual-c++ opengl sdl

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

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

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

1 个答案:

答案 0 :(得分:5)

你如何失去一个背景?在您销毁(或窗口/ HDC)之前,OpenGL上下文将一直存在。

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

  

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

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

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