-
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还是我调用的姿势不对, 麻烦了解的大佬们指点一下, 谢谢!