我正在开发一个仅使用OpenGL的项目(它应该成为一个特定的游戏),现在经过几周的开发后,我偶然发现了用GL.GetError()
捕获OpenGL错误的可能性。
因为我不喜欢它只说出了什么问题而不是出现在哪里,所以我希望得到固定的错误。
所以这是发生的事情:
启动应用时,使用StackUnderflow
的帧数很少(三个或四个),它会切换到StackOverflow
并保持这种状态。
我检查了我的矩阵 - Push
- Pop
一致性,但没有发现任何未公开的矩阵。可能有趣的是,据我所知,照明不起作用(各种物体的所有面都具有相同的亮度)。
还有其他可能的原因吗?
(如果您想查看来源,请参阅:http://galwarcom.svn.sourceforge.net/viewvc/galwarcom/trunk/galwarcom/)
答案 0 :(得分:4)
您需要在弹出之前设置矩阵模式,因为每个模式都有一个单独的堆栈。如果您执行此类操作,则会下溢:
glMatrixMode(GL_MODELVIEW)
glPushMatrix();
... stuff with model view ...
glMatrixMode(GL_PROJECTION)
glPushMatrix()
... stuff with project matrix ...
glPopMatrix() // projection popped
glPopMatrix() // projection again
你在drawHUD()中做过类似的事情,可能是其他地方。