首页 > 解决方案 > Chrome 如何在 macOS 上支持 webgl?

问题描述

libGLESv2.dylib libswiftshader_libGLESv2.dylib libvk_swiftshader.dylib在 Chrome.app 中找到了。在https://webglreport.com/?v=2中它说:

Vendor: WebKit
Renderer:   WebKit WebGL
Unmasked Vendor:    ATI Technologies Inc.
Unmasked Renderer:  AMD Radeon Pro 560X OpenGL Engine
Antialiasing:   Available
ANGLE:  No

我听说铬在窗户上使用角度。这里的角度在 macOS 上不使用。那么chrome是如何运行webgl的呢?

标签: google-chromeopenglwebgl

解决方案


无法检测 ANGLE。WebGLReport 的猜测和它的猜测是错误的。这是他们的代码

function getAngle(gl) {
  var lineWidthRange = describeRange(gl.getParameter(gl.ALIASED_LINE_WIDTH_RANGE));

  // Heuristic: ANGLE is only on Windows, not in IE, and not in Edge, and does not implement line width greater than one.
  var angle = ((navigator.platform === 'Win32') || (navigator.platform === 'Win64')) &&
    (gl.getParameter(gl.RENDERER) !== 'Internet Explorer') &&
    (gl.getParameter(gl.RENDERER) !== 'Microsoft Edge') &&
    (lineWidthRange === describeRange([1, 1]));

  if (angle) {
    // Heuristic: D3D11 backend does not appear to reserve uniforms like the D3D9 backend, e.g.,
    // D3D11 may have 1024 uniforms per stage, but D3D9 has 254 and 221.
    //
    // We could also test for WEBGL_draw_buffers, but many systems do not have it yet
    // due to driver bugs, etc.
    if (isPowerOfTwo(gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)) && isPowerOfTwo(gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS))) {
      return 'Yes, D3D11';
    } else {
      return 'Yes, D3D9';
    }
  }

  return 'No';
}

这是错误的,而且已经过时了。

第一个猜测是看lineWidthRange,即使他们写了这只是一个猜测。规范说只有宽度为 1 的行是有效的。在 WebGL 发布时,通常 ANGLE 只支持大小为 1 的行,而 OpenGL 支持其他行。但是,当 WebGL2 发布时,情况发生了变化,因为 WebGL2 在桌面 OpenGL 上运行时,需要使用“Core”配置文件,而“Core”配置文件不允许使用大小 1 句点以外的行。

规格

E.2.1 已弃用但仍受支持的功能

以下功能已弃用,但仍存在于核心配置文件中。它们可能会从 OpenGL 的未来版本中删除,并在实现核心配置文件的前向兼容上下文中删除。

  • 宽线 - LineWidth 值大于 1.0 将生成 INVALID_VALUE 错误

他们的第二个猜测是查看浏览器。这显然不再有效。Edge 现在基于 Chromium,而且Safari 现在也使用 ANGLE

最后一个猜测是使用 ANGLE,因为它假设 ANGLE 运行在 D3D 之上,因此某些限制是特殊的,但现在 ANGLE 已在所有平台上使用,并且可以在桌面 OpenGL、D3D、OpenGL ES 之上运行、金属和 Vulkan。从截至 2021 年 1 月的角度项目图表

通过支持渲染器支持的 OpenGL ES 级别

Direct3D 9 Direct3D 11 桌面总帐 GL ES 伏尔甘 金属
OpenGL ES 2.0 完全的 完全的 完全的 完全的 完全的 完全的
OpenGL ES 3.0 完全的 完全的 完全的 完全的 进行中
OpenGL ES 3.1 不完整 完全的 完全的 完全的
OpenGL ES 3.2 进行中 进行中 进行中

这是 ANGLE 当前支持的平台列表

通过支持渲染器支持平台

Direct3D 9 Direct3D 11 桌面总帐 GL ES 伏尔甘 金属
视窗 完全的 完全的 完全的 完全的 完全的
Linux 完全的 完全的
Mac OS X 完全的 进行中
iOS 计划
铬操作系统 完全的 计划
安卓 完全的 完全的
GGP(体育场) 完全的
紫红色 进行中

所以,你不应该相信 WebGLReport。也许你应该去提交一个错误。

Chrome 能够在 MacOS 上使用桌面 OpenGL 来运行 WebGL,但目前所有 Chrome 平台都使用 AFAIK ANGLE,包括 MacOS。最近甚至将 ANGLE 添加到 Safari以启用 Safari 的 WebGL2 支持并通过其 WebGL1 支持修复一堆错误


推荐阅读