好吧,我想尝试在 Firefox(Linux 上的 v38.0.5)上检查 WebGL;我意识到在 中about:config
,webgl.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.gz
,MesaGLUT-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-osmesa
并make
,事实上,我确实得到了构建的共享库文件 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
:
...然后运行 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
,与上面的相同:
所以,无论如何,它仍然指的是 Mesa 7.10.2 - 我不知道为什么?
顺便说一句,我现在才意识到配置设置webgl.osmesalib
可能是我早期版本的配置文件中挂着的东西,因为如果我firefox
从默认配置文件和安全模式开始,我得到的只是gfx.blacklist.suggested-driver-version
和gfx.prefer-mesa-llvmpipe
设置:
那么 - 我怎样才能说服 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 install
Mesa 之后):
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 来说还不够好:
呃,好吧...