Chrome如何在macOS上支持webgl ?



我在Chrome.app中找到了libGLESv2.dylib libswiftshader_libGLESv2.dylib libvk_swiftshader.dylib。在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

我听说chrome在窗户上使用了角度。这里的角度在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";简介和"核心"配置文件不允许使用大于1的行

从规格

E.2.1已弃用但仍支持的特性

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

  • 宽行- LineWidth值大于1.0将产生INVALID_VALUE错误

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

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

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

OpenGL ES 3.0OpenGL ES 3.1OpenGL ES 3.2

最新更新