OpenGL的指令,返回值均为void,因此没法通过返回值来判断 指令错误 。为了能够第一时间发现问题,需要加入一个封装来监测是否有指令调用失败。
原理
当OpenGL调用出现错误时,会将错误的ID储存到一个GLenum
中。这个值可以通过
glGetError();
获取到。
实现
通过一个宏可以封装出GL 指令错误 的调用检查接口。实现如下:
//.h
void CheckGLError(const char* file,int line);
#define GL_CALL(x) do{x;CheckGLError(__FILE__,__LINE__);}while(0)
然后去实现这个检测函数:
//.cpp
void CheckGLError(const char* file,int line)
{
GLenum error = glGetError();
if(error != GL_NO_ERROR)
{
switch (error)
{
case GL_INVALID_ENUM:
printf("GL Error: GL_INVALID_ENUM %s : %d \n",file,line);
break;
case GL_INVALID_VALUE:
printf("GL Error: GL_INVALID_VALUE %s : %d \n",file,line);
break;
case