检测客户端的 webgl 功能

detecting webgl capabilities of the client

当 运行 webgl 时,我如何猜测我正在处理的是哪种机器?

我可以查询 MAX_VERTEX_ATTRIBUTESOES_texture_float 和其他类似属性并猜测它是更高端还是更低端的 GPU?

我认为更好的方法是查看 WEBGL_debug_renderer_info 中的用户代理字符串 (navigator.userAgent)、WEBGL_UNMASKED_VENDORWEBGL_UNMASKED_RENDERER 以尝试找出用户的平台 (移动或桌面)和 GPU(来自 WEBGL_UNMASKED_RENDERER)。

例如,这是我的 UA 和渲染器名称:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
Intel Iris OpenGL Engine

据此您可以猜到我是 运行 具有英特尔 iGPU(来自渲染器)的桌面 Mac(Intel Mac UA 的一部分)。

另一个例子,来自 iPhone:

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 Mobile/14F89 Safari/602.1
Apple A9 GPU

从中你显然可以检测到,你正在处理 iPhone 6S(因为它有 A9 芯片)。

同样,您可以检测 Android 和 WinPhone 并查询 GPU。