3.5 shader中define-meta选择方法被裁剪

最新的3.5.1

我要写shader的溶解效果,现在实现了两种溶解算法,DissolveFunction, DoubleDissolveFunction。
为了特效同学的方便,我做成了选择标签

#pragma define-meta DissolveModeFunc options([DissolveFunction, DoubleDissolveFunction])

定义了两个方法
    vec4 DissolveFunction(vec4 c, float dissolveTex, float dissolve, float hardness, float width, vec4 WidthColor) {}

    vec4 DoubleDissolveFunction(vec4 c, float dissolveTex, float dissolve,float hardness,float width, vec4 WidthColor) {}

// 后面用这个宏去选择方法
DissolveModeFunc(finalColor, dissolveT, dissolveParams.y, dissolveParams.z, dissolveParams.w, dissolveWidthColor);

效果长这个样子

结果编辑器报错
ERROR: 0:68: ‘DissolveFunction’ : no matching overloaded function found

我翻了下编辑器给的报错详情,发现编译出来的shader中,宏定义确实有,但DissolveFunction和DoubleDissolveFunction这两个方法确实没有。
我理解这些方法被裁切的原因,一堆#include,不裁切整个shader就巨大,这是合理的。

所以现在的问题是,我要怎么做才能让我写的这两个方法不被编译裁切掉?还是说现阶段做不到
@panda

算解决了,用

#if LAYERS == 4
  // ...
#elif LAYERS == 5
  // ...
#endif

变通了一下

1赞