【问题标题】:OpenGL ES Error to StringOpenGL ES错误到字符串
【发布时间】:2013-08-21 13:50:32
【问题描述】:

在 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,那就太好了。

【问题讨论】:

    标签: android ios opengl-es error-handling native-activity


    【解决方案1】:

    遵循规范即可,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】:

      在 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 开头)。

      【讨论】:

      • 我认为没有任何类似于 EGL afaik 的 GLU 库的东西,无论如何您可能都必须手动完成。但同样,只有几个错误需要处理。
      • 我想是的。是的,我也必须手动执行 Android,因为 gluGetError() 没有公开。不过我最终还是找到了这个:code.google.com/p/glues
      • 请注意,iOS 链接已损坏。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多