我已经在GL课程上工作了一段时间,突然间它开始出错了.在尝试解决这些问题一段时间后,我编写了一个生成相同行为的简短测试程序:
#include <GL/glut.h>
#include <iostream>
#define CHECK_GL_ERR() printError(__LINE__)
void printError(int line)
{
GLenum err = glGetError();
if(err != GL_NO_ERROR)
{
std::cerr << "GL error on line " << line << ": " << gluErrorString(err) << std::endl;
}
}
void displayFunc()
{
CHECK_GL_ERR();
glBegin(GL_POINTS);
CHECK_GL_ERR();
glVertex3f(0, 0, 0);
CHECK_GL_ERR();
glEnd();
CHECK_GL_ERR(); //line 23
exit(0);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitWindowSize(300, 300);
glutCreateWindow("Test");
glutDisplayFunc(displayFunc);
glutMainLoop();
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个程序时,它给出了输出:
GL error on line 23: invalid operation
Run Code Online (Sandbox Code Playgroud)
所以似乎glEnd();导致错误.文档说:
如果执行glEnd而没有前面的glBegin,则会生成GL_INVALID_OPERATION.
在我的代码中并非如此.所以有人看到,为什么这段代码会给出错误信息?
PS:我当然知道glBegin/End已经被弃用/删除了很长时间,但是将一些少量代码合并在一起非常方便.此外,该程序在没有错误的情况下工作,直到GL决定脾气暴躁.
编辑
我刚跟glslDevil做了一个跟踪,它给出了:
W! Program Start
| glXQueryExtension(0x1ab03f0, (nil), (nil))
| glXChooseFBConfig(0x1ab03f0, 0, 0x7fffb8fcf8b0, 0x7fffb8fcf8a4)
| glXGetVisualFromFBConfig(0x1ab03f0, 0x111)
| glXGetProcAddressARB(0x7f93c37526e5)
| glXCreateNewContext(0x1ab03f0, 0x111, 32788, (nil), 1)
| glXIsDirect(0x1ab03f0, 0x1ac8de8)
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glDrawBuffer(GL_FRONT)
| glReadBuffer(GL_FRONT)
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glViewport(0, 0, 300, 300)
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glGetError()
| glBegin(GL_POINTS)
| glGetError()
| glVertex3f(0,000000, 0,000000, 0,000000)
| glGetError()
| glEnd()
W! OpenGL error GL_INVALID_OPERATION detected
| glGetError()
| glXMakeContextCurrent(0x1ab03f0, 123731970, 123731970, 0x1ac8de8)
| glXDestroyContext(0x1ab03f0, 0x1ac8de8)
E! Child process exited
W! Program termination forced!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2561 次 |
| 最近记录: |