OpenGL ES错误转字符串

6

在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。

2个回答

3

只需按照规范进行操作,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;
  }
}

2

据我所知,EGL库中没有类似于GLU库的东西,你可能需要手动处理。但是再说一遍,只有几个错误需要处理。 - Arttu Peltonen
我想是这样。是的,我也必须手动进行Android开发,因为gluGetError()没有暴露出来。不过我最终找到了这个:https://code.google.com/p/glues/ - Mike Weir
请注意,iOS链接已损坏。 - Alexis Wilke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接