功能无法匹配GLDEBUGPROC,仅在MSVC上(使用相同的glew版本2.1.0,在linux上使用gcc / clang就可以了)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了功能无法匹配GLDEBUGPROC,仅在MSVC上(使用相同的glew版本2.1.0,在linux上使用gcc / clang就可以了)相关的知识,希望对你有一定的参考价值。
我有以下函数,我已经定义了我使用的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 source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar * message,const void * userParam)”的参数与“GLDEBUGPROC”类型的参数不兼容
我一直试图弄清楚为什么它只能用MSVC失败...但是我很卡住,因为它看起来像是逐字逐句。它在GCC / Clang上编译的事实也有点令人困惑,我不确定我错过了什么或者为什么会这样。
请注意,inline
关键字不会影响结果,我尝试了没有关键字,并且存在同样的问题。我只是把它放在那里因为我想要复制并粘贴确切的东西。我还通过diff检查器来查看我是否以任何方式错误地执行了参数,但它们是相同的。
这是在Visual Studio 2017中,使用C ++ 17,glew 2.1.0,现代Opengl等。我的OpenGL版本也是4.6。
您可能需要包含GLAPIENTRY
限定符:
void GLAPIENTRY messageCallback(...)
这指定了一个调用约定,它告诉编译器修改函数参数的传递方式。在某些平台上它没有任何区别,但我猜它可能在Windows上。
以上是关于功能无法匹配GLDEBUGPROC,仅在MSVC上(使用相同的glew版本2.1.0,在linux上使用gcc / clang就可以了)的主要内容,如果未能解决你的问题,请参考以下文章
std::ofstream 无法在 win7/64 和 msvc2013 上使用 std::ios::ate 打开大文件