思考如何编写可以使用不同类型参数的GLSL functions。
据我所知,在GLSL中,double
,<Label DockPanel.Dock="Bottom"
HorizontalAlignment="Center"
Content="{lex:Loc View.Application.Realm.CreateNew}" />
,...,a * b
等可以称为vec2 * vec2
。大概有几十种组合。我想知道如何将该函数编写为函数,以更好地理解该语言。
想知道是否需要实际写出每个组合:
vec2 * vec3
或者您可以编写一个处理所有这些功能的函数:
vec2 * mat3
不确定其工作原理。也许他们都需要使用不同的名称:
vec2
multiply(vec2 a, vec2 b) {
return a * b
}
vec3
multiply(vec3 a, vec3 b) {
return a * b
}
....
更新:
第一部分是solved:
vec or mat
multiply(a, b) {
return a * b
}
您可以重载函数。
答案 0 :(得分:2)
GLSL没有模板或泛型,因此您无法让编译器自动为您生成针对不同类型的函数实例。但是,正如您所发现的那样,它确实支持函数重载,因此您可以使用宏来为类似的不同类型实例化相同的函数,从而减少代码重复。
#define MULTIPLY_TEMPLATE(type) \
type multiply(type a, type b) { \
return a * b; \
}
MULTIPLY_TEMPLATE(vec2)
MULTIPLY_TEMPLATE(vec3)
MULTIPLY_TEMPLATE(vec4)