拡張機能を使用してARB_DEBUG_OUTPUT
OpenGL エラーをキャッチしていますが、エラー ログ機能を呼び出すとプログラムがクラッシュします。
このブログ投稿のコードを使用して拡張機能をセットアップしました。コールバックを設定するために使用する正確なコードは次のとおりです。
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
編集:デバッグコールバックを手動で呼び出してみましたが、例外はトリガーされません。