Я хотел бы использовать функцию `glDebugMessageCallback 'в качестве помощи для отладки моей программы openGL. Я реализовал свой обратный вызов отладки как:
void MyDbgCallback(GLenum source, GLenum type, GLenum id, GLenum severity, GLsizei length, const GLchar* msg, GLvoid* user)
{
fprintf(stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n", (type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : ""), type, severity, msg);
}
, как показано в примере, расположенном здесь: https://www.khronos.org/opengl/wiki/Debug_Output Кроме того, во время инициализации я включил следующие две строки:
// Enable debugging output
glEnable(GL_DEBUG_OUTPUT);
glDebugMessageCallback(MyDbgCallback, 0);
Теперь при компиляции (VS2015) я получаю следующее сообщение об ошибке:
1>error C2664: 'void (GLDEBUGPROC,const void *)': cannot convert argument 1 from 'overloaded-function' to 'GLDEBUGPROC'
1> note: None of the functions with this name in scope match the target type
При поиске в Интернете (включая этот сайт) я видел несколько постов, что последний аргумент в функции обратного вызовадолжно быть const GLvoid* user
, и я пробовал оба способа с одной и той же ошибкой.
Наведение над волнисто-красными линиями в IDE я получаю следующее сообщение: "аргумент типа void () (GLenum souce, тип GLenum, идентификатор GLenum, серьезность GLenum, длина GLsizei, const GLchar msg, GLvoid * user) несовместим с параметром типа GLDEBUGPROC ". Теперь, просматривая заголовочные файлы, я обнаружил GLDEBUGPROC
, объявленный в строке 2709 из glcorearb.h
, и он объявлен как:
typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,GLvoid *userParam);
, что выглядит идентично используемой мной функции DbgCallback. Что мне не хватает? Что мне нужно сделать, чтобы заставить это работать на Windos 10