Ошибка OpenGL ES в строке
Есть ли стандарт для получения строки ошибки из glGetError()
(Android и iOS) и eglGetError()
(Android) в OpenGL ES 1.1 или 2.0?
Я использую что-то вроде этого:
#define AssertGL(x) { x; GLenum __gle = glGetError(); Assert(__gle == GL_NO_ERROR); }
Было бы неплохо улучшить это для предоставления текста отладчику, вместо того, чтобы искать вручную GLenum возвращаемого значения, хранящегося в __gle
,
2 ответа
Попробуйте это на Android: http://developer.android.com/reference/android/opengl/GLU.html и на iOS: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/gluErrorString.3.html материалы / страница Справочник / man3 / gluErrorString.3.html
Если они не работают для вас, вы всегда можете создать свое собственное отображение из целочисленного значения ошибки в соответствующую строку - это должно быть легко, поскольку имеется только несколько значений ошибок. Просто найдите значения ошибок из gl2.h
а также gl.h
заголовки (они начинаются с 0x05).
Просто следуйте спецификациям, 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;
}
}