【问题标题】:how to phrase openGL glDebugOutput / glDebugMessageCallback on linux platform如何在 linux 平台上表达 openGL glDebugOutput / glDebugMessageCallback
【发布时间】:2020-03-21 06:52:08
【问题描述】:

我正在尝试调试我的 opengl 程序。并尝试使用错误记录功能。 glDebugMessageCallback。但是,我能找到的唯一示例使用“typedef void (APIENTRY *DEBUGPROC)”或 void APIENTRY glDebugOutput(...)。而且我知道 APIENTRY 是一个基于 Windows WINAPI 的编译器标志,所以,我如何编写一个可以使用 g++ 编译器在 linux 上运行的函数?...甚至可能吗? 如果我尝试不这样做,我会得到..

错误:从 '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]

【问题讨论】:

  • 至少 mesa gl.h(你可能在 linux 上使用)定义了#define APIENTRY GLAPIENTRY。所以这应该不是问题。

标签: c++ linux debugging opengl g++


【解决方案1】:

根据OpenGL 4.6 spec, Section 20.2 Debug Message Callback

callback 必须是原型形式为

的函数
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*)
不匹配
void ()(unsigned int, unsigned int, unsigned int, unsigned int, int, const char, const void*)

基本上,您缺少最后一个参数的const

【讨论】:

  • AHHH 成本无效是的.. 我很困惑。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
  • 2015-04-02
  • 2015-12-15
  • 1970-01-01
相关资源
最近更新 更多