google-chrome - 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的呢?
解决方案
无法检测 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 支持修复一堆错误
推荐阅读
- python - 如何使用连接删除mysql行
- android - 底部导航栏 - 矩形操作按钮
- java - 如何在 javafx/java 中调用 json 的字段
- oledb - 使用 oledb 更新 dbf 文件中以数字开头的列名
- python - 访问在远程 Windows VM 上运行的 Jupyter 笔记本/实验室?
- java - File.createTempFile() 出现意外的 Spock MissingMethodException
- excel - 如何在谷歌表格的单元格中进行索引匹配拆分和连接多个 ID?
- assembly - 为什么内核代码在加载时会发生变化?加载时指针地址是否改变?
- php - 从 MySQL 中获取 PHP 运算符
- tomcat - 将spring boot部署到tomcat时出现“没有找到指定孩子的publicKey”错误