我正在使用openGL最新的 glDebugMessageCallback
惯例来帮助我处理openGL错误。我希望能够做的是有一种方法来查看是哪个函数导致了openGL错误。我认为回调方法的唯一方法是在我的回调函数中插入一个断点,这样当一个错误在visual studio中产生时,我就可以回过头来检查调用堆栈,看看到底是哪个函数导致了这个问题。
void GLAPIENTRY MyOpenGLErrorCallbackFunc(GLenum source, GLenum debugErrorType, GLuint errorID, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
{
switch(debugErrorType)
{
case GL_DEBUG_TYPE_ERROR:
{
BGZ_CONSOLE("GL Type error: %s\nGL error id: %i\n", message, errorID);
#if _MSC_VER
__debugbreak();
#endif
}break;
case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
{
BGZ_CONSOLE("GL deprecated gl function usage error: %s\nGL error id: %i\n", message, errorID);
#if _MSC_VER
__debugbreak();
#endif
}break;
case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
{
BGZ_CONSOLE("GL undefined behavior error: %s\nGL error id: %i\n", message, errorID);
#if _MSC_VER
__debugbreak();
#endif
}break;
};
};
然而,当我试图通过向其中一个openGL函数传递一个无效的枚举来进行测试时,当程序确实中断时,我的调用堆栈显示的是:
myProgram.exe!MyOpenGLErrorCallbackFunc(GLenum source, GLenum debugErrorType, GLuint errorID, GLenum severity, GLsizei length, const GLchar *message, const void *userParam)
[External code]
所以我的代码没有任何执行树可查 有什么方法可以让这个程序正常工作吗?