2013-08-19 71 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; 
    } 
}