Safari 14 WebGL alpha 与帧缓冲区渲染的混合似乎坏了
Safari 14 WebGL alpha blending with framebuffer rendering seems broken
我 运行 最近遇到了一个非常棘手的 运行ge 问题,我很好奇是否有其他人遇到过这个问题,或者是否有人发现了我的 WebGL alpha 混合功能的问题。
当启用 alpha 混合并结合帧缓冲区渲染时,Safari 14 似乎没有渲染任何东西。它曾经在 Safari 13 中按预期工作,它也适用于所有其他主要浏览器(测试 Chrome、Edge、Firefox)
演示: https://jsfiddle.net/flek/rc6zbk0d/58/
您应该会看到三个红点和一个三角形,它们会在 2.5 秒后变成紫色。这适用于 Chrome、Firefox、Safari 13,但不适用于 Safari 14!
似乎使 Safari 14 关闭的关键部分如下(fiddle 中的第 89 和 146 行)。
blend: {
enable: true, // This prevents Safari v14 from rendering the points.
func: {
srcRGB: 'src alpha',
srcAlpha: 'src alpha',
dstRGB: 'one minus src alpha',
dstAlpha: 'one minus src alpha',
},
},
这可能是 Safari 本身、Regl 或我的代码中的错误。我很好奇是否有人发现混合函数 + 帧缓冲区渲染有问题。
我找到了解决方法。或者我应该说,Firefox 通过在控制台打印一些有用的警告来拯救!
显然 Safari 14 改变了加载扩展的方式。以前,当 OES_texture_float
被激活时,EXT_float_blend
扩展也会被激活。这也是 MDN 上描述的行为,如果我理解正确的话:
On devices that support the EXT_float_blend
extension, it is
automatically, implicitly, enabled when any one or more of
EXT_color_buffer_float
, OES_texture_float
, or WEBGL_color_buffer_float
are enabled. This ensures that content written before EXT_float_blend
was exposed by WebGL will function as expected.
来源:https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend#usage_notes
然而,这似乎不再是这样了。所以必须手动激活 WEBGL_color_buffer_float
然后 EXT_float_blend
.
这是与上面完全相同的演示,其中两个扩展被显式激活,现在它可以在 Safari 14 中正常运行
我 运行 最近遇到了一个非常棘手的 运行ge 问题,我很好奇是否有其他人遇到过这个问题,或者是否有人发现了我的 WebGL alpha 混合功能的问题。
当启用 alpha 混合并结合帧缓冲区渲染时,Safari 14 似乎没有渲染任何东西。它曾经在 Safari 13 中按预期工作,它也适用于所有其他主要浏览器(测试 Chrome、Edge、Firefox)
演示: https://jsfiddle.net/flek/rc6zbk0d/58/
您应该会看到三个红点和一个三角形,它们会在 2.5 秒后变成紫色。这适用于 Chrome、Firefox、Safari 13,但不适用于 Safari 14!
似乎使 Safari 14 关闭的关键部分如下(fiddle 中的第 89 和 146 行)。
blend: {
enable: true, // This prevents Safari v14 from rendering the points.
func: {
srcRGB: 'src alpha',
srcAlpha: 'src alpha',
dstRGB: 'one minus src alpha',
dstAlpha: 'one minus src alpha',
},
},
这可能是 Safari 本身、Regl 或我的代码中的错误。我很好奇是否有人发现混合函数 + 帧缓冲区渲染有问题。
我找到了解决方法。或者我应该说,Firefox 通过在控制台打印一些有用的警告来拯救!
显然 Safari 14 改变了加载扩展的方式。以前,当 OES_texture_float
被激活时,EXT_float_blend
扩展也会被激活。这也是 MDN 上描述的行为,如果我理解正确的话:
On devices that support the
EXT_float_blend
extension, it is automatically, implicitly, enabled when any one or more ofEXT_color_buffer_float
,OES_texture_float
, orWEBGL_color_buffer_float
are enabled. This ensures that content written before EXT_float_blend was exposed by WebGL will function as expected.
来源:https://developer.mozilla.org/en-US/docs/Web/API/EXT_float_blend#usage_notes
然而,这似乎不再是这样了。所以必须手动激活 WEBGL_color_buffer_float
然后 EXT_float_blend
.
这是与上面完全相同的演示,其中两个扩展被显式激活,现在它可以在 Safari 14 中正常运行