定义glDebugMessageCallbackARB回调方法
Define glDebugMessageCallbackARB callback method
Im使用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);
但是当添加行时
glDebugMessageCallbackARB(&DebugCallback, NULL);
生成以下错误
cannot convert parameter 1 from 'void (__stdcall *)(unsigned int,unsigned int,unsigned int,unsigned int,int,const char *,void *)' to 'GLDEBUGPROCARB'
有人能帮我理解这个错误吗?这样我就可以解决了。
来自OpenGL官方标题:
typedef void (APIENTRY *GLDEBUGPROCARB)(
GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
const GLchar *message, const void *userParam);
所以最后一个参数需要是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);
4.3规范文件中userParam
没有const
,但在4.4和4.5规范中添加了const
。来自4.4规范中的更改日志:
在第20.2节中,为DebugMessageCallback和DEBUGPROC的userParam参数添加const属性。
我不知怎么发现GLDEBUGPROCARB
的原型是:
typedef GLvoid (APIENTRY *GLDEBUGPROCARB)(GLenum source, GLenum type,
GLuint id, GLenum severity, GLsizei length,
const GLchar* message, GLvoid* userParam);
因此,你的DebugCallback
必须是这个原型。
相关文章:
- 处理影响跨不同线程共享对象的定时回调的最佳方法是什么?
- C++ - 如何在不静态的情况下将回调绑定到类方法?
- 使用回调函数从构造函数调用虚拟/派生方法的替代方法?
- 重写另一个方法 [C++] 使用的超类回调函数
- 将类方法设置为 OpenSSL 回调
- 具有指向方法回调的指针的通用回调模板类
- 如何将提升回调作为参数传递给方法?
- 带有类方法的 Cython 回调
- 为什么可以在没有实例变量的情况下访问静态回调方法中的静态成员变量?
- 回调方法显示错误,类型为"void(*)"的值不能用于初始化类型的实体
- 全局挂钩 DLL 仅在 C# 主窗口处于活动状态/前台时调用 C# 回调方法
- 实现此"on error, throw"回调的最佳方法是什么?
- 从触摸回调访问向量元素的方法时,不良访问错误
- 注册和调用 DLL 回调的正确方法是什么
- 一个类的方法作为回调
- 破坏vulkan以测试调试回调是否正确设置的好方法是什么
- 从异步启动的方法回调的最优雅方式
- 未知类方法回调,它接受 0 个参数并返回可转换为 int 的类型
- 使用 Rice 在 C++ 中构建 Ruby 扩展:如何将 Ruby 方法(回调)的指针传输到C++函数
- 从C函数回调vs从c++方法回调