2.x Texture加载的bug

版本2.4.4,测试平台Web
在对Texture设置FlipY,PremultiplyAlpha这两个参数后执行ccTexture2D的update,此时需要updateImg,web平台使用了bitmap,问题在于传入_checkImageBitmap的回调函数中所带的参数options是Texture2D的SharedOptions,而不是对象的拷贝,此处不懂为什么这么做,猜测是出于GC上的优化。


当bitmap加载完成后执行回调_upload,在options中两个参数,一个是bitmap类型的image,一个是bitmap[]类型的images。upload开始的时候将这次加载的bitmap赋值给了option的image,这表明这个属性里面的数据是正确的。对Images的疑惑如下图所示

后续的接口调用中,在调webgl接口前有个setMipmap,里面又重新构造了一个options,然后将images数组里面的数据赋值给了options的image。

最终导致如果在同一时刻批量修改好几张图片的alpha预乘或者Y翻转(比如加载了几张龙骨的纹理,并且要设置alpha预乘),最终提交到GPU的纹理全都变成同样的纹理。sprite也显示出了同样的图片

AlphaTest.rar (1.7 MB)
附上测试DEMO

附上异常结果,代码中加载了Texture1跟2,


实际上渲染出来的是

手动置顶。

等待官方。

等待官方。

等等官方。

有官方可以出来解释下么

问题还在确认,暂时不要动态设置预乘,翻转可以先通过 spriteFrame.setFlipY

image
或者暂时将这个宏关掉,注意不是在onLoad,start 中调用, cc.macro.ALLOW_IMAGE_BITMAP = false

如果是引擎 bug 的话,请把 issues 发过来。

我试下禁用宏,后续定位到问题了辛苦大佬们告知下

后续在这个 issue 跟进:https://github.com/cocos/cocos-engine/issues/11312

好的,感谢

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。