我使用glew来使用openGL扩展.我正在尝试使用GL_ARB_debug_output扩展名.
我在创建上下文时添加了标志WGL_CONTEXT_DEBUG_BIT_ARB,因此使用调试支持创建了上下文.
在尝试为glDebugMessageCallbackARB定义回调方法时,我从博客中找到了以下函数
void CALLBACK DebugCallback(unsigned int source, unsigned int type,
unsigned int id, unsigned int severity,
int length, const char* message, void* userParam);
Run Code Online (Sandbox Code Playgroud)
但是当添加线
glDebugMessageCallbackARB(&DebugCallback, NULL);
Run Code Online (Sandbox Code Playgroud)
生成以下错误
cannot convert parameter 1 from 'void (__stdcall *)(unsigned int,unsigned int,unsigned int,unsigned int,int,const char *,void *)' to 'GLDEBUGPROCARB'
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我理解这个错误,以便我可以解决.
typedef void (APIENTRY *GLDEBUGPROCARB)(
GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
const GLchar *message, const void *userParam);
Run Code Online (Sandbox Code Playgroud)
所以最后一个论点需要const void*而不是void*你试过的.其余参数可能没问题,具体取决于您的平台上GL类型的定义方式.但是在函数声明中使用GL类型会更安全.
请注意,OpenGL 4.3中添加了此核心版本.如果您有4.3可用,则可以使用glDebugMessageCallback()而不是glDebugMessageCallbackARB().相应的回调声明在标题中看起来相同:
typedef void (APIENTRY *GLDEBUGPROC)(
GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
const GLchar *message, const void *userParam);
Run Code Online (Sandbox Code Playgroud)
有没有const对userParam4.3规范文件中,但是const是在4.4和4.5规格加入.从4.4规范中的更改日志:
在第20.2节中将const属性添加到DebugMessageCallback和DEBUGPROC的userParam参数中.