我很高兴生成 OpenGL 绑定,并生成了一个调试版本,其中包括以下内容:
// this symbol only exists if generated with the c-debug generator
#define GLAD_DEBUG
typedef void (* GLADcallback)(const char *name, void *funcptr, int len_args, ...);
/*
* Sets a callback which will be called before every function call
* to a function loaded by glad.
*
*/
GLAPI void glad_set_pre_callback(GLADcallback cb);
/*
* Sets a callback which will be called after every function call
* to a function loaded by glad.
*
*/
GLAPI void glad_set_post_callback(GLADcallback cb);
文档给出了一个如何定义这个回调的例子,它看起来像这样:
void _post_call_callback_default(const char *name, void *funcptr, int len_args, ...) {
GLenum error_code;
error_code = glad_glGetError();
if (error_code != GL_NO_ERROR) {
fprintf(stderr, "ERROR %d in %s\n", error_code, name);
}
}
我不明白我应该如何访问可变参数。我猜它们是传递给 OpenGL 函数的值,因此可以是任何类型。但是,我必须为va_arg指定类型才能访问这些值。
我觉得该参数len_args
暗示有某种方法可以迭代可变参数,但我不明白在不知道类型的情况下应该如何使用它。它们的用途是什么?