我定义了以下函数,用于glDebugCallback
,它与 Linux 上的 GCC 和 Clang 完美配合。但是在 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 id、GLenum 严重性、GLsizei 长度、const GLchar *message、const void *userParam)”类型的参数与“GLDEBUGPROC”类型的参数不兼容
我一直试图找出为什么它只在 MSVC 上失败......但我很困惑,因为它看起来像逐字匹配。事实上它在 GCC/Clang 上编译也有点令人困惑,我不确定我错过了什么或者为什么会发生这种情况。
请注意,inline
关键字不会影响结果,我在没有关键字的情况下尝试过,也存在同样的问题。我只是将其保留在那里,因为我想复制并粘贴确切的内容。我还通过差异检查器检查了参数是否有任何错误,但它们是相同的。
这是在 Visual Studio 2017 中,使用 C++17、glew 2.1.0、现代 Opengl 等。我的 OpenGL 版本也是 4.6。