Func

fun <RT : GenType, F : Func<RT>> Func(funcFactory: (GlslGenerator) -> F, body: () -> RT): FunctionDelegate<RT, F>
fun <RT : GenType, F : Func<RT>, P1 : Variable> Func(    funcFactory: (GlslGenerator) -> F,     p1Factory: (GlslGenerator) -> P1,     body: (p1: P1) -> RT): FunctionDelegate1<RT, F, P1>
fun <RT : GenType, F : Func<RT>, P1 : Variable, P2 : Variable> Func(    funcFactory: (GlslGenerator) -> F,     p1Factory: (GlslGenerator) -> P1,     p2Factory: (GlslGenerator) -> P2,     body: (p1: P1, p2: P2) -> RT): FunctionDelegate2<RT, F, P1, P2>
fun <RT : GenType, F : Func<RT>, P1 : Variable, P2 : Variable, P3 : Variable> Func(    funcFactory: (GlslGenerator) -> F,     p1Factory: (GlslGenerator) -> P1,     p2Factory: (GlslGenerator) -> P2,     p3Factory: (GlslGenerator) -> P3,     body: (p1: P1, p2: P2, p3: P3) -> RT): FunctionDelegate3<RT, F, P1, P2, P3>
fun <RT : GenType, F : Func<RT>, P1 : Variable, P2 : Variable, P3 : Variable, P4 : Variable> Func(    funcFactory: (GlslGenerator) -> F,     p1Factory: (GlslGenerator) -> P1,     p2Factory: (GlslGenerator) -> P2,     p3Factory: (GlslGenerator) -> P3,     p4Factory: (GlslGenerator) -> P4,     body: (p1: P1, p2: P2, p3: P3, p4: P4) -> RT): FunctionDelegate4<RT, F, P1, P2, P3, P4>