2013-08-19 43 views
3

在OpenGL ES 1.1或2.0中是否有一个从glGetError()(Android和iOS)和eglGetError()(Android)获取错误字符串的标准?OpenGL ES错误字符串

我使用的是这样的:

#define AssertGL(x) { x; GLenum __gle = glGetError(); Assert(__gle == GL_NO_ERROR); } 

将是不错的加强这方面的提供文本到调试器,而不必手动查找存储在__gle返回值的GLenum。在 的iOS http://developer.android.com/reference/android/opengl/GLU.html#gluErrorString(int)这:

回答

2

试试这在Android https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/gluErrorString.3.html

如果那些不为你工作,你总是可以创建一个从整误差值自己的映射到相应的字符串 - 它应该是容易,因为只有少数的错误值。只需查找gl2.hgl.h标题中的错误值(它们以0x05开头)。

+0

什么有关EGL(没有做手工)? –

+0

我不认为有任何与EGL afaik的GLU库类似的东西,您可能必须手动执行此操作。但是,再次,只有一些错误需要处理。 –

+0

我想是这样。是的,我也必须手动执行Android,因为gluGetError()没有公开。我确实最终找到了这个:https://code.google.com/p/glues/ –

0

只要按照规范,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; 
    } 
}