如何在linux平台上表达openGL glDebugOutput / glDebugMessageCallback

how to phrase openGL glDebugOutput / glDebugMessageCallback on linux platform

本文关键字:openGL glDebugOutput glDebugMessageCallback linux 平台      更新时间:2023-10-16

我正在尝试调试我的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*('} 到 'GLDEBUGPROC' {aka 'void (((unsigned int, unsigned int,

unsigned int, unsigned int, int, const char, constvoid*('} [-fpermissive]

根据 OpenGL 4.6 规范,第 20.2 节调试消息回调

回调必须是其原型的函数,其形式为

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, unsigned int, int, const char, void*(

不匹配
void (((unsigned int, unsigned int, unsigned int, unsigned int, int,const char, const void*(

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