2016-06-30 10 views
1

現在、私の関数は次のようになります。EGLエラー文字列を照会する標準的な方法はありますか? <code>eglGetError()</code>の結果を変換する

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()のようなものがありますか?

+0

GLUを使用している場合のみ 'gluErrorString'が利用可能です。現代のコードにはあまり関係ありません。実際には、無効なフレームバッファや失われたコンテキストのように、 'glGetError'が返すことができる最近のいくつかのエラーを処理しません。したがって、手動でエラーを管理する方がよいでしょう。 –

+0

@NicolBolasあなたの言葉の正確さを確信しているなら、なぜ答えに入れないのですか? – Ruslan

+0

あなたの質問は、EGLのための 'gluErrorString'のような関数があるかどうかについてでした。私のコメントは、自分のことを気にする必要はなく、自分のことだけを維持すべきだと言いました。それがあなたの問題を解決する間、あなたが尋ねた質問に本当に答えません。私が知っている限り、標準的な 'egluErrorString'関数がいくつか存在する可能性があります。それはあなたの質問に対する答えです。 –

答えて

1

EGL自体の一部ではありません。私はそれがそこにあるべきだとは思わない。 EGLは低レベルのウィンドウ・システム・インターフェースです。ユーザーが読める文字列を作成することは、実際にはその仕事ではありません。

文字列を生成する関数を持つのは簡単で無害だと考えるかもしれません。しかし、これはユーザーが読める文字列なので、国際化についてはほとんど考えなければなりません。異なる文字セットを使用する文字列を含む、さまざまな言語の文字列を取得できることを意味します。だからシンプルに見えるものは、はるかに複雑になります。そして、少なくとも私の意見では、英語の文字列だけをサポートすることは非常に恣意的なことでしょう。

さらに重要なことに、エラーコードを文字列に変換することは、概念上、ウィンドウシステムへのインターフェイスを提供するAPIの一部ではありません。 IMHO、これらの種類のAPIは最小限に抑える必要があります。この場合は、と正確にはの機能をウィンドウシステムとのインターフェイスに必要なものにする必要があります。

もちろん、誰もあなたにこの種の機能を提供する上位レベルのライブラリを実装することをやめることはありません。それはまさにGLU(gluErrorString()の由来)がOpenGLのためのものです。これは、OpenGLの上に階層化された一般的な機能を提供しています。

前段落のGLUについて話すときの過去時制の使用は意図的でした。以前の千年紀のOpenGL機能の上に構築されています。