현재 OpenGL 쉐이더 클래스를 작성 중입니다. 각각의 유니폼 타입을 설정하는 기능을 사용하는 대신, 유니폼 함수 (예 : glUniform1f)를 매개 변수로 전달하려고합니다. 그것을 할 수glUniform 함수를 매개 변수로 전달 (C++)
cannot convert argument 1 from 'void (__stdcall *)(GLint,GLfloat)' to 'void (__cdecl *)(GLint,GLfloat)'
:
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);
호출 같은 :
나의 현재의 시도는 다음과 같이 보입니다 의도 한대로 작동합니까?
감사
참고 :이 가끔 주석됩니다
OpenGL에 익숙하지 않지만 함수 포인터 대신'std :: function'을 통해 함수를 전달하려고 시도한 적이 있습니까? – Exagon
아직 없습니다. –
더 나은 질문은 ... 왜하고 싶습니까? 당신의 목표는'glUniform' 계열의 함수를위한 템플릿 래퍼를 갖는 것 같습니다. 그러나 그것을하기위한 당신의 방법은 사용자가 타입 (''GLfloat'')와 함수 포인터를 전달할 것을 요구합니다. 당신이하려고하는 것처럼 보이는 것을하는 우수한 방법이 있어야합니다. –