Что нужно сделать после потери контекста OpenGL? - PullRequest
1 голос
/ 10 марта 2012

Какой хороший способ думать об этом? Ручки потеряны?

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

Мне интересно, делаю ли я то, что необходимо (или делаю слишком много и теряю память)

1 Ответ

5 голосов
/ 10 марта 2012

Как вы теряете контекст?Контекст OpenGL будет существовать до тех пор, пока вы не уничтожите его (или окно / HDC).

Однако все объекты OpenGL связаны с контекстом (ами), в котором они созданы. Если выуничтожить контекст, все объекты также будут уничтожены (если у вас нет общих объектов с другим контекстом. В этом случае останутся только разделяемые объекты).Поэтому вы должны перезагрузить их.

Например, я вызываю все 3 вызова функций: glCreateProgram () glAttachShader () glLinkProgram () или только последние два?

Если контекст OpenGL разрушен, вы должны вызывать любые функции OpenGL, которые вам нужны, чтобы воссоздать ваших объектов.Любые объекты OpenGL, которые вы получили из старого контекста, исчезли .Они недействительны.Это удаленные указатели, а использование удаленных указателей всегда неправильно.

Новый контекст OpenGL - new .Таким образом, вы должны создавать свои объекты, как если бы это был новый контекст.Потому что это так.

...