使用本地构建的 libOSMesa 在 Firefox 中启用 WebGL?

使用本地构建的 libOSMesa 在 Firefox 中启用 WebGL?

好吧,我想尝试在 Firefox(Linux 上的 v38.0.5)上检查 WebGL;我意识到在 中about:configwebgl.osmesalib设置为/usr/lib/libOSMesa.so.6,而about:support声明:

Graphics
--------

Adapter Description: Tungsten Graphics, Inc -- Mesa DRI Intel(R) IGD GEM 20100330 DEVELOPMENT x86/MMX/SSE2
Device ID: Mesa DRI Intel(R) IGD GEM 20100330 DEVELOPMENT x86/MMX/SSE2
Driver Version: 1.4 Mesa 7.10.2
GPU Accelerated Windows: 0/1 Basic Blocked for your graphics card because of unresolved driver issues.
Vendor ID: Tungsten Graphics, Inc
WebGL Renderer: Blocked for your graphics card because of unresolved driver issues.
windowLayerManagerRemote: false
AzureCanvasBackend: cairo
AzureContentBackend: cairo
AzureFallbackCanvasBackend: none
AzureSkiaAccelerated: 0

所以我发现列入阻止列表/阻止的图形驱动程序 - MozillaWiki,其中指出:

如果 Mesa 版本至少为 7.10.3,则 Mesa 驱动程序将被列入白名单(参见错误 659560)。

例外:使用 Nouveau 3D 驱动程序时,要求 Mesa 版本至少为 8.0(参见错误 729817)

好的,所以libOSMesa.so.6实际上并没有签出1.4 Mesa 7.10.2,但我认为无论如何我都会从源代码重建。

因此,我获得了 7.10.3 的源代码(MesaLib-7.10.3.tar.gzMesaGLUT-7.10.3.tar.gz)并libdrm-2.4.24解压,运行PKG_CONFIG_PATH=/path/to/Mesa-7.10.3/libdrm-2.4.24 ./configure --enable-gl-osmesamake,事实上,我确实得到了构建的共享库文件 libOSMesa.so -> libOSMesa.so.7 -> libOSMesa.so.7.10.3; 如果我们怀疑版本信息在文件名中,我们也可以尝试这个:

$ strings -a lib/libOSMesa.so.7 | grep 'Mesa 7'
%u.%u Mesa 7.10.3
OpenGL ES-CM 1.%d Mesa 7.10.3
OpenGL ES 2.0 Mesa 7.10.3

很好,所以现在我想,我只需将这个库替换为webgl.osmesalib

测试.png

...然后运行 ​​Firefox:

LD_LIBRARY_PATH=/path/Mesa-7.10.3/lib LD_PRELOAD=/path/Mesa-7.10.3/lib/libOSMesa.so.7 strace /path/to/firefox -P default -safe-mode -new-instance 2>&1 | grep --color=always 'Mesa.*\.so'

...甚至strace告诉我图书馆已经开放了:

open("/path/Mesa-7.10.3/lib/libOSMesa.so.7", O_RDONLY) = 4

... 并且仍然 - 我得到了这个about:support,与上面的相同:

测试2.png

所以,无论如何,它仍然指的是 Mesa 7.10.2 - 我不知道为什么?

顺便说一句,我现在才意识到配置设置webgl.osmesalib可能是我早期版本的配置文件中挂着的东西,因为如果我firefox从默认配置文件和安全模式开始,我得到的只是gfx.blacklist.suggested-driver-versiongfx.prefer-mesa-llvmpipe设置:

测试3.png

那么 - 我怎样才能说服 Firefox 尝试新建的 Mesa 库,而不是旧的库?

答案1

好的,我想我现在明白了:按照在 Ubuntu 中为 Intel GMA3150 启用 OpenGL 2.0 和 WebGL,新版 Firefox 所看到的图形驱动程序并不是某个特定的文件版本,而是报告的版本glxinfo

$ glxinfo | grep -i "OpenGL version"
flushing GPU caches before/after each draw call
OpenGL version string: 1.4 Mesa 7.10.2

然后我再次配置了一个前缀/usr(否则默认为/usr/local),这是 Ubuntu Natty 希望存储这些内容的地方;然后安装:

./configure --enable-gl-osmesa --prefix=/usr
sudo make install

然后,过了一会儿,glxinfo返回了7.10.3,这就是 Firefox 所看到的;但是对于一个,我的磁盘空间不足;对于另一个,现在重启后我得到:

$ glxinfo 
name of display: :0.0
Error: couldn't find RGB GLX visual or fbconfig

这显然(图形 - 错误:找不到 RGB GLX visual 或 fbconfig ubuntu 12.04)需要弄乱xserver-xorg,所以它比仅仅替换库要复杂一些,看起来……


编辑:实际上得到了它:来自这个12.2 版 nvidia 驱动程序存在问题 - glxinfo“无法找到 RGB GLX 视觉对象”,我学会了做:

$ grep -B2 EE /var/log/Xorg.0.log
...
[    37.353] (II) AIGLX: Trying DRI driver /usr/lib32/dri-alternates/i915_dri.so
[    37.353] (II) AIGLX: dlopen of /usr/lib32/dri-alternates/i915_dri.so failed (/usr/lib32/dri-alternates/i915_dri.so: cannot open shared object file: No such file or directory)
[    37.353] (EE) AIGLX: reverting to software rendering
...

我提到我的磁盘空间不足;因此我执行了此操作(在sudo make installMesa 之后):

sudo mv /usr/lib/dri /media/external/_mv/
sudo ln -s /media/external/_mv/dri /usr/lib/
sudo mv /usr/lib/egl /media/external/_mv/
sudo ln -s /media/external/_mv/egl /usr/lib/

然后我们实际上需要重新启动 x-server,以便它可以在加载时“看到”符号链接位置中的 .so 文件,根据如何从命令行重新启动 x-server? - 询问 Ubuntu对我来说sudo service gdm restart

之后,得到了这个:

$ LIBGL_DEBUG=verbose glxinfo
name of display: :1.0
libGL: OpenDriver: trying /usr/local/lib/dri/i915_dri.so
libGL error: dlopen /usr/local/lib/dri/i915_dri.so failed (/usr/local/lib/dri/i915_dri.so: cannot open shared object file: No such file or directory)
libGL error: unable to load driver: i915_dri.so
libGL error: driver pointer missing
....

...然后简单地做了:

sudo ln -s /media/external/_mv/dri /usr/local/lib/

...瞧瞧:

$ LIBGL_DEBUG=verbose glxinfo
name of display: :1.0
libGL: OpenDriver: trying /usr/local/lib/dri/i915_dri.so
libGL: Can't open configuration file /etc/drirc: No such file or directory.
libGL: Can't open configuration file /etc/drirc: No such file or directory.
flushing GPU caches before/after each draw call
display: :1  screen: 0
direct rendering: Yes
...

... 但这对于 Firefox 来说还不够好:

测试.png

呃,好吧...

相关内容