无论何时调用glad\u set\u post\u回调函数,都有glad.c的源代码。在这里,您可以看到参数取决于调用了哪个函数。因此,我认为您需要检查name/funcptr参数。
例如,如果叫glEnable,则您有:
void APIENTRY glad_debug_impl_glEnable(GLenum arg0) {
_pre_call_callback("glEnable", (void*)glEnable, 1, arg0);
glad_glEnable(arg0);
_post_call_callback("glEnable", (void*)glEnable, 1, arg0);
}
an-example-of-use-of-varargs-in-c
关于如何使用变量参数:
可能是这样的(未经测试):
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 && funcptr == (void*)glEnable /* or strcmp(name,"glError") == 0*/) {
va_list ap;
va_start(ap, len_args);
GLenum arg0 = va_arg(ap, GLenum);
va_end(ap);
printf("Called glError(%d) with Error %d\n", arg0, error_code);
}
}
也许最好将funcptr与指向glEnable的指针进行比较,而不是将字符串名与“glError”进行比较。我没有测试它。上面的代码只是一个示例,我将以不同的方式编写它。