在OpenGL ES 1.1或2.0中,从glGetError()
(Android和iOS)和eglGetError()
(Android)获取错误字符串是否有标准?
我正在使用类似于以下内容:
#define AssertGL(x) { x; GLenum __gle = glGetError(); Assert(__gle == GL_NO_ERROR); }
希望能够改进此功能,提供文本给调试器,而不是手动查找存储在__gle
中的返回值的GLenum。
在OpenGL ES 1.1或2.0中,从glGetError()
(Android和iOS)和eglGetError()
(Android)获取错误字符串是否有标准?
我正在使用类似于以下内容:
#define AssertGL(x) { x; GLenum __gle = glGetError(); Assert(__gle == GL_NO_ERROR); }
希望能够改进此功能,提供文本给调试器,而不是手动查找存储在__gle
中的返回值的GLenum。
只需按照规范进行操作,GL是跨平台的:
char const* gl_error_string(GLenum const err) noexcept
{
switch (err)
{
// opengl 2 errors (8)
case GL_NO_ERROR:
return "GL_NO_ERROR";
case GL_INVALID_ENUM:
return "GL_INVALID_ENUM";
case GL_INVALID_VALUE:
return "GL_INVALID_VALUE";
case GL_INVALID_OPERATION:
return "GL_INVALID_OPERATION";
case GL_STACK_OVERFLOW:
return "GL_STACK_OVERFLOW";
case GL_STACK_UNDERFLOW:
return "GL_STACK_UNDERFLOW";
case GL_OUT_OF_MEMORY:
return "GL_OUT_OF_MEMORY";
case GL_TABLE_TOO_LARGE:
return "GL_TABLE_TOO_LARGE";
// opengl 3 errors (1)
case GL_INVALID_FRAMEBUFFER_OPERATION:
return "GL_INVALID_FRAMEBUFFER_OPERATION";
// gles 2, 3 and gl 4 error are handled by the switch above
default:
assert(!"unknown error");
return nullptr;
}
}
在Android上尝试这个:http://developer.android.com/reference/android/opengl/GLU.html#gluErrorString(int),在iOS上使用这个:https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/gluErrorString.3.html
如果这些不适用于您,您始终可以创建自己的映射,将整数错误值映射到相应的字符串 - 这应该很容易,因为只有少量错误值。只需查找来自gl2.h
和gl.h
头文件(它们以0x05开头)的错误值即可。