3

拡張機能を使用してARB_DEBUG_OUTPUTOpenGL エラーをキャッチしていますが、エラー ログ機能を呼び出すとプログラムがクラッシュします。

このブログ投稿のコードを使用して拡張機能をセットアップしました。コールバックを設定するために使用する正確なコードは次のとおりです。

glDebugMessageCallback((GLDEBUGPROC)debugCallbackARB, stderr);
glEnable(GL_DEBUG_OUTPUT);
glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB);

こちらですdebugCallbackARB

void debugCallbackARB(GLenum source, GLenum type, GLuint id, GLenum severity,
                     GLsizei length, const GLchar *message, GLvoid *userParam)
{
    (void)length;
    FILE *outFile = (FILE*)userParam;
    char finalMessage[256];
    formatDebugOutputARB(finalMessage, 256, source, type, id, severity, message);
    logger->debug("%s", finalMessage);
}

glEnable無効なパラメーターを使用して、コールバックをトリガーします。

glEnable(GL_DEPTH);

エラーメッセージを正常に出力した後、プログラムは未処理の例外をトリガーしますAccess violation executing location 0x00000500.

SDL2 を使用して OpenGL 3.3 コア プロファイルのデバッグ コンテキストを作成し、GL Loadを使用して GL 拡張ポインタを取得しています。

glEnable拡張機能を無効にすると、無効な呼び出しでプログラムがクラッシュすることはありません。

どうすればこれを修正できますか?

コンピューターの仕様:

  • NVIDIA GeForce GT 630
  • フォースウェア 327.23
  • ウィンドウズ 7 x64

編集:デバッグコールバックを手動で呼び出してみましたが、例外はトリガーされません。

4

1 に答える 1