У меня есть следующая определенная мной функция, которую я использую с glDebugCallback
, которая прекрасно работает с GCC и Clang в Linux. Однако в Windows следующий код не хочет регистрироваться как обратный вызов отладки для OpenGL:
inline void messageCallback(GLenum source, GLenum type, GLuint id,
GLenum severity, GLsizei length, const GLchar* message,
const void* userParam) {
// ...
}
и затем я настроил его с помощью
glDebugMessageCallback(messageCallback, nullptr);
Посмотрев, какие заголовки glew имеют, он показывает:
typedef void (GLAPIENTRY *GLDEBUGPROC)(GLenum source, GLenum type, GLuint id, GLenum severity,
GLsizei length, const GLchar* message,
const void* userParam);
но я получаю сообщение об ошибке
Ошибка (активная) Аргумент E0167 типа "void (*) (источник GLenum, тип GLenum, идентификатор GLuint, серьезность GLenum, длина GLsizei, сообщение const GLchar *, const void * userParam)" несовместим с параметром типа " GLDEBUGPROC "
Я пытался выяснить, почему это не удается только с MSVC ... но я довольно застрял, поскольку похоже, что он соответствует дословно. Тот факт, что он компилируется в GCC / Clang, также немного сбивает с толку, я не уверен, что мне не хватает или почему это происходит.
Обратите внимание, что ключевое слово inline
не влияет на результат, я пробовал без ключевого слова, и та же проблема есть. Я просто держал это там, потому что я хотел скопировать и вставить точную вещь. Я также проверил это через проверку различий, чтобы проверить, правильно ли я сделал параметры, но они идентичны.
Это в Visual Studio 2017 с использованием C ++ 17, glew 2.1.0, современного Opengl и т. Д. Моя версия OpenGL также составляет 4.6.