在测试时,发现有些模型会导致opengl报1283错误,代码如下:
// check for errors
m_glErrorCode=glGetError();
if(m_glErrorCode != GL_NO_ERROR)
{
const GLubyte *estring;
CString mexstr;
// get the error descritption from OGL
estring = gluErrorString(m_glErrorCode);
// prepare and show a message box
mexstr.Format(L"GLEnabledView:\n\tAn OpenGL error occurred: %s\n", estring);
AfxMessageBox(mexstr,MB_OK | MB_ICONEXCLAMATION);
}
调试时m_glErrorCode的值是1283,estring是堆栈溢出
跟朋友交流和google后,得出的结论是:
opengl中的push和pop类的函数没有匹配上。
那其实问题的原因是:在某个push之后,运行某个opengl函数时出错了,然后return掉,导致后面的pop没有运行,报了这个错误。
问题解决后,发现前人写的代码会对一些opengl函数的返回值做判断,学习下。这样有助于快速找到问题出在哪里。
if(!gluUnProject(winx,winy,winz,modelMatrix,projMatrix,viewport,&objx1,&objy1,&objz1))
return FALSE;
要讨论的话,请发邮件给我。