WebGL 警告:texImage:Alpha-premult 和 y-flip 对于非 DOM 元素上传已弃用

Posted

技术标签:

【中文标题】WebGL 警告:texImage:Alpha-premult 和 y-flip 对于非 DOM 元素上传已弃用【英文标题】:WebGL warning: texImage: Alpha-premult and y-flip are deprecated for non-DOM-Element uploads 【发布时间】:2020-04-20 09:50:36 【问题描述】:

所以我一直在尝试使用 Map-box 在我的应用程序中绘制坐标,但是当我提供 .png 文件作为标记时,我收到以下错误:

Screenshot

【问题讨论】:

【参考方案1】:

您是自己上传纹理还是通过 mapbox 上传?

在任何情况下,您都可以通过 3 种方式上传纹理

    通过类型数组的原始数据 来自 htmlImageElement、HTMLCanvasElement 或 HTMLVideoElement 来自 ImageBitmap

另外还有一些选项,当您上传时,您可以使用gl.pixelStorei 进行设置。两个选项是UNPACK_FLIP_Y_WEBGL,设置为true它会在上传到GPU之前垂直翻转数据。 UNPACK_PREMULTIPLY_ALPHA_WEBGL 设置为 true 会在上传前将 RGB 预乘 alpha。

过去,所有 3 种上传数据的方法都尊重这些标志,但浏览器决定方法 (1) 和 (3) 不应继续使用这些标志,因此如果将它们设置为 true,您将收到消息它们已被弃用。

对于 ImageBitmap,它们被弃用的原因是 ImageBitmap itself has those options 所以你应该在那里使用它们,它们可以异步完成。对于 TypedArrays,由于您可以 100% 控制数据,因此您可以自己处理。

【讨论】:

以上是关于WebGL 警告:texImage:Alpha-premult 和 y-flip 对于非 DOM 元素上传已弃用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 texSubImage2D 在 webgl 中显示精灵?

WebGL 中的图片解码优化

WebGL - 发送数组缓冲区 VS 将图像/画布/位图从 CPU 发送到 GPU

我可以在 webgl2 的单通道中存储签名的 16 位值吗?

WebGL 警告:“属性 0 已禁用。这会显着降低性能”

Unity WebGL 取消浏览器警告