有没有标准的方法来查询EGL错误字符串?

时间:2016-06-30 15:06:07

标签: c++ egl

目前我转换eglGetError()结果的功能如下:

std::string eglErrorString(EGLint error)
{
    switch(error)
    {
    case EGL_SUCCESS: return "No error";
    case EGL_NOT_INITIALIZED: return "EGL not initialized or failed to initialize";
    case EGL_BAD_ACCESS: return "Resource inaccessible";
    case EGL_BAD_ALLOC: return "Cannot allocate resources";
    case EGL_BAD_ATTRIBUTE: return "Unrecognized attribute or attribute value";
    case EGL_BAD_CONTEXT: return "Invalid EGL context";
    case EGL_BAD_CONFIG: return "Invalid EGL frame buffer configuration";
    case EGL_BAD_CURRENT_SURFACE: return "Current surface is no longer valid";
    case EGL_BAD_DISPLAY: return "Invalid EGL display";
    case EGL_BAD_SURFACE: return "Invalid surface";
    case EGL_BAD_MATCH: return "Inconsistent arguments";
    case EGL_BAD_PARAMETER: return "Invalid argument";
    case EGL_BAD_NATIVE_PIXMAP: return "Invalid native pixmap";
    case EGL_BAD_NATIVE_WINDOW: return "Invalid native window";
    case EGL_CONTEXT_LOST: return "Context lost";
    }
    return "Unknown error "+to_hex_string(int(error));
}

但对于例如OpenGL本身有gluErrorString(),这使我们不必手动维护错误列表。

EGL是否有类似gluErrorString()的内容?

2 个答案:

答案 0 :(得分:1)

绝对不是EGL本身的一部分。而且我认为它不应该存在。 EGL是一个低级窗口系统界面。生成用户可读的字符串实际上不是它的工作。

你可能认为拥有一个产生一些字符串的函数是微不足道的,无害的。但由于这将是用户可读的字符串,因此您几乎不得不考虑国际化。这意味着您可以使用各种语言获取字符串,包括使用不同字符集的语言。所以看起来简单的东西突然变得复杂得多。至少在我看来,只支持英文字符串会非常随意。

更重要的是,将错误代码转换为字符串在概念上不是提供窗口系统接口的API的一部分。恕我直言,这些API应该是最小的。在这种情况下,它应该提供完全与窗口系统接口所需的功能,仅此而已。

当然,没有人阻止您(或其他任何人)实现提供此类功能的更高级别的库。这正是GLU(gluErrorString()来自哪里)是OpenGL的原因。它提供了一些在OpenGL之上分层的常用功能。

在前一段中讨论GLU时使用过去时是故意的。它建立在上一个千年的OpenGL功能之上。

答案 1 :(得分:1)

宏魔术可以为您节省一些打字:

#define CASE_STR( value ) case value: return #value; 
const char* eglGetErrorString( EGLint error )
{
    switch( error )
    {
    CASE_STR( EGL_SUCCESS             )
    CASE_STR( EGL_NOT_INITIALIZED     )
    CASE_STR( EGL_BAD_ACCESS          )
    CASE_STR( EGL_BAD_ALLOC           )
    CASE_STR( EGL_BAD_ATTRIBUTE       )
    CASE_STR( EGL_BAD_CONTEXT         )
    CASE_STR( EGL_BAD_CONFIG          )
    CASE_STR( EGL_BAD_CURRENT_SURFACE )
    CASE_STR( EGL_BAD_DISPLAY         )
    CASE_STR( EGL_BAD_SURFACE         )
    CASE_STR( EGL_BAD_MATCH           )
    CASE_STR( EGL_BAD_PARAMETER       )
    CASE_STR( EGL_BAD_NATIVE_PIXMAP   )
    CASE_STR( EGL_BAD_NATIVE_WINDOW   )
    CASE_STR( EGL_CONTEXT_LOST        )
    default: return "Unknown";
    }
}
#undef CASE_STR