在 Firefox 中检测合成后端

Detect Compositing Backend in Firefox

有没有办法通过 WebGL API 在客户端上检测 Firefox 中的合成后端(无论是 OpenGL、Basic/Cairo 还是 D3D)?我对区分 OpenGL/D3D 和基本合成特别感兴趣。如果无法使用 WebGL API,是否有任何其他方法来确定合成后端(about:support 除外)?

简短的回答是 ,您无法在 Firefox 中检测到合成后端,至少在 JavaScript

中检测不到

在 Chrome 中您可以使用 WEBGL_debug_renderer_info extension

至于为什么在 Firefox 中不可用而在 Chrome 中可用,对于隐私或实用性哪个更重要存在不同意见。

隐私问题很容易用下面的例子来描述。如果您了解 GPU,那么您对用户的了解又多了一件事。例如,检查 GPU,发现它是 AMD FirePro D500。如果是,您现在知道此人拥有 4000 美元 Mac Pro。向他们投放昂贵的广告。

有用的一面是,有许多较旧的 GPU 可以 运行 许多 webgl 演示,但不能 运行 像 Google 地图这样的复杂 webgl。由于不能 运行,他们要么 运行 太慢,要么甚至可能崩溃 "WebGL hit a snag, rats!"。如果无法分辨哪个 GPU 是哪个,就无法为使用这些 GPU 的人提供良好的用户体验。

还有其他提议,例如让 WebGL 拥有某种性能指标,站点可以使用该指标来决定制作图形的复杂程度。不幸的是,没有真正有效的指标。每种类型的 GPU 都有其优点和缺点。一个 GPU 的顶点变换速度可能很快,但光栅化速度可能很慢。另一个可能是快速渲染不透明的东西,但渲染半透明的东西很慢。其他人可能只会表现出超过一定限度的缓慢。最重要的是,以某种方式将基准写入 运行 某个地方(远程,在用户的机器上,......)以提供此类指标会给浏览器供应商带来很大的负担。换句话说,这个解决方案被考虑但被放弃了。

还有一件事,WEBGL_debug_renderer_inforeturns 用户计算机的 GPU 和驱动程序信息,但这并不能真正直接告诉您浏览器的合成后端是什么。它只是告诉您浏览器对 WebGL 使用的是什么。虽然这两个可能是一样的。