cocos creator 2.4.4版本shader中CCTexture对同一材质多次采样产生重复定义错误

  • Creator 版本: 2.4.4

  • 目标平台:编辑器中即可复现

  • 重现方式:使用CCTexture对同一材质多次采样

  • 首个报错:
    编辑器中:
    ‘normalTexture_tmp’ : redefinition:
    vec4 normalTexture_tmp = texture2D(normalTexture, vec2(s1 + v_uv1.y, v_uv1.x));

  • 编辑器操作系统: macos catalina 10.15.6

  • 重现概率: 必现

最近在搞引擎升级, 按照2.4.4的版本升级说明升级了一下shader, 用CCTexture替换掉了之前的texture2D接口. 发现对同一材质多次采样时编辑器中会报xxxx_tmp重复定义的错误. 看了一下编辑器中编译的结果和引擎中的texture.inc的实现, 每次调用这个宏都会声明一个材质名加_tmp后缀的vec4, 看起来似乎没做作用域的控制. 多次对同一个材质调用会重复定义.

复现方式: 在.effect文件中使用CCTexture对同一个材质进行多次采样
比如:
CCTexture(normalMap, v_uv_0, o_0);
CCTexture(normalMap, v_uv_1, o_1);

texture.inc中宏的实现:
#define CCTexture(texture, uv, color)
vec4 texture##tmp = texture(texture, uv);
#if CC_USE_ALPHA_ATLAS
##texture
texture##_tmp.a *= texture(texture, uv + vec2(0, 0.5)).r;
#endif
#if INPUT_IS_GAMMA
color.rgb *= SRGBToLinear(texture##_tmp.rgb);
color.a *= texture##_tmp.a;
#else
color *= texture##_tmp;
#endif
#pragma // empty pragma trick to get rid of trailing semicolons at effect compile time

对同一材质多次采样似乎是挺常见的情况… 我现在不太确定这个是引擎的bug还是我调用的姿势不对, 麻烦了解的大佬们指点一下, 谢谢!

用 vec color = texture(texture, uv)吧