В настоящее время я пишу класс шейдера openGL. Вместо того, чтобы запускать функции для установки каждого однородного типа, я пытаюсь передать в качестве параметра единую функцию (например, glUniform1f).Передача glUniform функций в качестве параметра (C++)
мой текущий попытка выглядит примерно так:
template <typename T1>
void Shader::setUniform(void (* fnc)(GLint, T1), const GLchar *name, const T1 value1)
{
fnc(getUniformLocation(name), value1);
}
под названием с
shader.setUniform<GLfloat>(*glUniform1f, "test", 5);
однако, я постоянно получаю ошибки преобразования типа:
cannot convert argument 1 from 'void (__stdcall *)(GLint,GLfloat)' to 'void (__cdecl *)(GLint,GLfloat)'
Можно ли заставить это работать по назначению?
Благодаря
Примечание: Я использую GLEW и glfw, если это важно
Я не знаком с openGL, но вы пробовали передать функцию через 'std :: function' вместо указателя на функцию? – Exagon
Пока еще нет. –
Лучший вопрос будет ... почему вы хотите? Кажется, у вашей цели есть шаблонные обертки для семейства функций glUniform. Но ваш способ сделать это требует, чтобы пользователь передавал тип ('GLfloat') и указатель функции, который ... уже имеет тип. Должны быть превосходные способы делать то, что вы пытаетесь сделать. –