考虑这个问题的好方法是什么?句柄丢失了吗?
glCreateProgram()? glCreateShader()? glGenTextures()? glGenBuffers()?
我想知道我是否正在做必要的事情(或者做太多事情和泄漏记忆)
答案 0 :(得分:5)
你如何失去一个背景?在您销毁(或窗口/ HDC)之前,OpenGL上下文将一直存在。
但是,所有OpenGL对象都绑定到它们所创建的上下文。如果销毁上下文,所有对象也会被销毁(除非你有另一个上下文的共享对象。在这种情况下,只有可共享的对象将保留)。所以你必须重装它们。
例如,我是否调用所有3个函数调用:glCreateProgram()glAttachShader()glLinkProgram()或者只是最后两个?
如果销毁OpenGL上下文,则必须调用重新创建对象所需的任何OpenGL函数。您从旧上下文中获得的任何OpenGL对象都已消失。它们无效。它们是删除的指针,使用删除的指针总是错误的。
新的OpenGL上下文是 new 。因此,您必须创建对象,就像它是一个新的上下文一样。因为它是。