如何在GLSL中编写简单的加或乘函数

时间:2019-03-15 01:11:09

标签: function glsl

思考如何编写可以使用不同类型参数的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
}

您可以重载函数。

1 个答案:

答案 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)