現在、私は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')と関数ポインタの両方を渡す必要があります。型はすでに型を持っています。あなたがしようとしているようなことをする優れた方法がなければなりません。 –