症状
同样的unity工程,打包成webgl后,在2个不同的机器上运行时,一个渲染正常,一个不正常
原因
经过排查,是因为代码中用到了这样的操作
在c端使用位操作把4个RGBA(255)颜色值合并成一个float,然后存到R8Float纹理中
float ColorToFloat(Color32 color)
{
uint colorValue = (color.r << 24) | (color.g << 16) | (color.b << 8) | color.a;
return *reinterpret_cast<float *>(&colorValue);
}
在shader端取出R8Float纹理的值,然后拆分成4个RGBA值
vec4 unpackColor(float color)
{
unit d = floatBitsToUint( color );
return vec4((d>>24)&0xff, (d>>16)&0xff, (d>>8)&0xff, d&0xff) / 255.0;
}
float color = texture(texture, uv).x;
vec4 colorRGBA = unpackColor(color);
结果这些操作在有的机器上正常,有的机器上不正常
解决
去掉所有位操作,改用多张纹理
比如 单独用一张 RGBA 纹理来存储Color