unity打包webgl在不同浏览器中渲染结果不同

症状

同样的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