我在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月的角度项目图表