有没有办法通过WebGL API在客户端上检测Firefox中的合成后端(无论是OpenGL,Basic / Cairo还是D3D)?我特别感兴趣的是区分OpenGL / D3D和Basic合成。如果使用WebGL API无法实现,是否还有其他方法可以确定合成后端(about:support
除外)?
答案 0 :(得分:2)
简短的回答是否,您无法在Firefox中检测到合成后端,至少不能从JavaScript中检测到
在Chrome中,您可以使用WEBGL_debug_renderer_info
extension。
至于为什么它在Firefox中不可用并且在Chrome中可用,对于哪个更重要,隐私或有用性存在意见分歧。
使用以下示例可以轻松描述隐私问题。如果您了解GPU,那么您就会了解有关用户的更多信息。例如,检查GPU,看它是AMD FirePro D500。如果是的话,你现在知道这个人有4000美元的Mac Pro。向他们提供昂贵的广告。
有用的一面是,有许多较旧的GPU可以运行许多webgl演示,但不能像Google Maps一样运行复杂的webgl。由于无法运行,它们要么运行速度太慢,要么甚至可能会崩溃。#WebGL会遇到障碍,老鼠!"。无法分辨哪些GPU无法为使用这些GPU的用户提供良好的用户体验。
还有其他提案,例如WebGL可以使用某种性能指标,网站可以使用它来决定制作图形的复杂程度。不幸的是,没有任何指标可以真正起作用。每种类型的GPU都有其优点和缺点。一个GPU在顶点变换时可能很快但在光栅化时速度很慢。另一个可能是快速渲染不透明的东西,但在渲染半透明的东西时很慢。其他人可能只会表现出他们的缓慢超过某些限制。最重要的是,它会给浏览器供应商带来很大的负担,以某种方式编写基准来运行某个地方(远程,在用户的机器上......)来提供这样的指标。换句话说,这个解决方案被考虑但被放弃了。
还有一件事,WEBGL_debug_renderer_info
会返回用户计算机的GPU和驱动程序信息,但这并不能直接告诉您浏览器的合成后端是什么。它只是告诉你浏览器用于WebGL的内容。虽然2可能是相同的。