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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值