抱歉前两次方向判断错了,水平条纹不是预乘 alpha 的问题。
重新分析后,怀疑是 iOS 26 的 WebKit 在美团小游戏环境中,texSubImage2D 接收 ArrayBufferView(Uint8Array)时的兼容性问题。引擎原来的流程是 getImageData → Uint8ClampedArray → new Uint8Array(buffer) → texSubImage2D,这中间的 buffer 转换在某些平台会出问题。
已重新提交修复,改为直接用 ImageData 对象调用 texSubImage2D(WebGL2 原生支持 ImageData 作为 TexImageSource),完全跳过 Uint8Array 转换。这走的是浏览器内部完全不同的上传路径。
如果想立即验证,在编译后的引擎 JS 中搜索 setPixelsToTexture,把里面的:
var data = imgdt.data;
if (data instanceof Uint8ClampedArray) data = new Uint8Array(data.buffer);
LayaGL.textureContext.setTextureSubPixelsData(...)
替换为:
LayaGL.textureContext.setTextureSubImageData(tex._texture, imgdt, x, y, true, false);
如果这次还是不行,麻烦提供一下:美团小游戏 SDK 版本、iOS 具体版本号(26.0.x),以及这个问题在 iOS Safari 浏览器里是否也能复现。
🔧 已提交修复 PR(待官方 review 合并,可点击查看改动):
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。