У вас есть исходный код glad.c всякий раз, когда вызывается функция glad_set_post_callback.Там вы можете видеть, что параметры зависят от того, какая функция была вызвана.Поэтому я думаю, что вам нужно проверить параметр 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);
}
, что означает, что первым параметром является GLenum.См. Этот вопрос пример использования 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".Я не проверял это.Приведенный выше код является лишь примером, я бы написал по-другому.