OpenGL中的错误处理

OpenGL中的错误处理方法有两种,一种是所有版本都能用的glGetError(),这个函数每次调用只会返回一个错误值,如果没有错误会返回GL_NO_ERROR。而4.3及之后的版本中有glDebugMessageCallback()函数,通过这个函数给OpenGL注册一个回调函数,可以在每次发生错误的时候OpenGL以人类可读的方式在屏幕上打印出错误。

这里使用glGetError()函数来进行错误处理,首先可以编写函数来清空所有的错误:

1
2
3
void GLClearError() {
  while (glGetError() != GL_NO_ERROR);
}

然后可以编写一个函数来对每个错误值输出:

1
2
3
4
5
6
void GLPrintError() {
  GLenum err;
  while ((err = glGetError()) != GL_NO_ERROR) {
    cout << "[OpenGL Error]:" << err << endl;
  }
}

最后可以编写一个宏来帮助我们在每次调用OpenGL函数时都捕捉错误并输出:

1
2
3
4
5
6
#define GLCall(x) \
do {
	GLClearError();
	x;
	GLPrintError();
} while(0)

这样我们每次通过GLCall()调用OpenGL函数就可以检测到错误了:

1
GLCall(glBindTexture(GL_TEXTURE0, 0));	// will print error code
updatedupdated2023-06-082023-06-08