如何在 linux 平台上使用 openGL glDebugOutput / glDebugMessageCallback
how to phrase openGL glDebugOutput / glDebugMessageCallback on linux platform
我正在尝试调试我的 opengl 程序。并尝试使用错误记录功能。 glDebugMessageCallback。然而,我能找到的唯一示例使用 "typedef void (APIENTRY *DEBUGPROC)" 或 void APIENTRY glDebugOutput(...)。而且我知道 APIENTRY 是一个基于 windows WINAPI 的编译器标志,所以,我如何使用 g++ 编译器编写一个可以在 linux 上运行的函数?...甚至可能吗?
如果我不这样做,我会得到..
error: invalid conversion from ‘void* ()(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar, void*)’ {aka ‘void* ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, void*)’} to ‘GLDEBUGPROC’ {aka ‘void ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, const void*)’} [-fpermissive]
根据 OpenGL 4.6 spec, Section 20.2 Debug Message Callback
callback must be a function whose prototype is of the form
void callback( enum source, enum type, uint id,
enum severity, sizei length, const char *message,
const void *userParam );
定义中没有提及 APIENTRY。但即使如此,大多数 gl.h 文件将包含类似于
的定义
#define APIENTRY GLAPIENTRY
但这一切都与你的问题无关。您遇到的真正问题是您的函数参数与调试消息回调定义不匹配。如错误消息所述:
void* () (unsigned int, unsigned int, unsigned int, unsigned int, int, const char, void*)
does not match
void ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, const void*)
基本上,您缺少最后一个参数的 const
。
我正在尝试调试我的 opengl 程序。并尝试使用错误记录功能。 glDebugMessageCallback。然而,我能找到的唯一示例使用 "typedef void (APIENTRY *DEBUGPROC)" 或 void APIENTRY glDebugOutput(...)。而且我知道 APIENTRY 是一个基于 windows WINAPI 的编译器标志,所以,我如何使用 g++ 编译器编写一个可以在 linux 上运行的函数?...甚至可能吗? 如果我不这样做,我会得到..
error: invalid conversion from ‘void* ()(GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar, void*)’ {aka ‘void* ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, void*)’} to ‘GLDEBUGPROC’ {aka ‘void ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, const void*)’} [-fpermissive]
根据 OpenGL 4.6 spec, Section 20.2 Debug Message Callback
callback must be a function whose prototype is of the form
void callback( enum source, enum type, uint id, enum severity, sizei length, const char *message, const void *userParam );
定义中没有提及 APIENTRY。但即使如此,大多数 gl.h 文件将包含类似于
的定义#define APIENTRY GLAPIENTRY
但这一切都与你的问题无关。您遇到的真正问题是您的函数参数与调试消息回调定义不匹配。如错误消息所述:
void* () (unsigned int, unsigned int, unsigned int, unsigned int, int, const char, void*)
does not match
void ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, const void*)
基本上,您缺少最后一个参数的 const
。