假设我有这样一个函数,
vec2 myFun(vec2 v){
return vec2(length(v));
}
是否有可能避免为 vec2 和 vec3 值参数和输出分别定义完全相同的函数?或者更一般地说,如果我的函数体只包含其他 genType 函数,我可以为所有参数类型只定义一次吗?
GLSL 本身不支持这一点,但您可以使用宏让预处理器为您完成工作:
#define _(TYPE)\
TYPE myFun(TYPE v){\
return TYPE(length(v));\
}
// define above functions for gentypes
_(float)_(vec2)_(vec3)_(vec4)
请注意,您必须转义宏中的换行符,因此您可能希望宿主应用程序以这种方式将其拼接在一起。