所以说我有一个Shader类,我想拥有一个Uniform函数,该函数将传递给我的数据传递给加载的Shader程序
class Shader{
unsigned int programid;
template<typename Type>
void Uniform(unsigned int location,Type object){
//Some logic that passes the type data to the uniform using glUniform[?]()
}
}
我将如何编写Uniform函数(使用C ++中的模板)以接受任何类型(原始OR对象)并将其传递给Shader?
示例:
GLSL:uniform float Amount;
C ++:shader.Uniform(somefloat);
GLSL:uniform vec3 Position;
C ++:
template<typename Type,size_t Size>
Vector{ Type data[Size]; }
Vector<float,3> position = {0.0f,1.0f,1.0f}
shader.Uniform(position);
GLSL:
struct Light
{
vec3 position;
vec4 rotation;
float luminosity;
bool status;
};
uniform Light object;
C ++:
struct Light {
Vector<float,3> position;
Vector<float,4> rotation;
float luminosity;
bool status;
}
Light object = {{1.0f,0.0f,0.0f},{0.0f,0.75f,true};
shader.Uniform(object);