Ошибка OpenGL underflow превращается в переполнение? - PullRequest
0 голосов
/ 14 декабря 2010

Я работаю над проектом, который использует только OpenGL (предполагается, что он станет игрой один раз, чтобы быть конкретным), теперь после нескольких недель разработки я наткнулся на возможность ловить ошибки OpenGL с помощью GL.GetError(). Так как мне не нравится, что в нем говорится только о том, что пошло не так, а не где, я хочу исправить ошибку, которая возникает.

Итак, вот что происходит: При запуске приложения есть несколько кадров (три или четыре) с StackUnderflow, оно переключается на StackOverflow и остается таким же.

Я проверил свою согласованность Matrix- Push - Pop и не нашел никаких закрытых матриц. Возможно, было бы интересно узнать, что из того, что я вижу, освещение не работает (все лица различных объектов имеют одинаковую яркость).

Есть ли другая возможная причина?

(Если вы хотите увидеть источник, есть много на: http://galwarcom.svn.sourceforge.net/viewvc/galwarcom/trunk/galwarcom/)

1 Ответ

4 голосов
/ 14 декабря 2010

Вам нужно установить режим матрицы перед тем, как всплыть, так как каждый режим имеет отдельный стек. Если вы сделаете что-то вроде этого, это приведет к потере:

glMatrixMode(GL_MODELVIEW)
glPushMatrix(); 
... stuff with model view ...
glMatrixMode(GL_PROJECTION)
glPushMatrix() 
... stuff with project matrix ...
glPopMatrix()  // projection popped
glPopMatrix()  // projection again

Вы делаете что-то подобное в drawHUD (), возможно, в других местах.

...