overloadingFn
overloadingFn
允许将多个针对不同参数类型(如 float, vec3)的函数实现打包成一个统一的重载函数,TSL 会根据调用时的输入类型自动选择正确的版本。
核心优势
核心优势在于统一了 API,允许开发者用一个函数名处理多种数据类型(如一个 `noise` 函数同时支持 2D 和 3D 坐标),同时 TSL 编译器会自动解析并匹配正确的函数实现,从而创建出既整洁又类型安全的着色器函数库。
常见用途
创建多态数学工具函数(如一个能处理 float 和 vec3 的 `abs` 函数)
实现灵活的自定义噪声函数(一个 `noise` 函数,可接受 vec2 或 vec3 坐标)
设计一个能对不同类型(float, vec3 等)进行插值的通用 `mix` 函数
如何调整
通过修改创建时传入的函数实现数组来调整。例如,向数组中添加一个新的、处理 `vec4` 类型的函数实现,会使你的重载函数“学会”如何处理 `vec4` 输入。反之,移除一个实现则会使其失去处理对应类型的能力,并在调用时报错。
代码示例
1// 1. 定义 float 和 vec3 版本的实现
2const addFloat = fn( [ float(), float() ], ( a, b ) => a.add( b ) );
3const addVec3 = fn( [ vec3(), vec3() ], ( a, b ) => a.add( b ) );
4
5// 2. 将它们打包成一个重载函数
6const addValue = overloadingFn( [ addFloat, addVec3 ] );