我无法让基于硬件的 OpenGL 渲染在 MATLAB R2015a 或 R2014b 中工作。在 R2014b 和重写 MATLAB 图形堆栈之前,一切工作正常。来自 MATLAB
>> opengl info
Version: '3.0 Mesa 10.6.5'
Vendor: 'Intel Open Source Technology Center'
Renderer: 'Mesa DRI Intel(R) Sandybridge Mobile '
MaxTextureSize: 8192
Visual: 'Visual 0xac, (RGBA 32 bits (8 8 8 8), Z depth 16 bits, Hardware acceleration, Double buffer, Antialias 4 samples)'
Software: 'true'
SupportsGraphicsSmoothing: 1
SupportsDepthPeelTransparency: 1
SupportsAlignVertexCenters: 1
Extensions: {199x1 cell}
MaxFrameBufferSize: 8192
我期待/希望“软件”是假的。
$ ldd /opt/tmw/matlab/bin/glnxa64/glren.so | grep libGL
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f0a3b871000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00007f0a3b5ef000)
表明 MATLAB 正在查找系统库(这就是 TMW 所说的我想要的),并且 TMW 确认库版本 libGL.so.1.2.0 和 libGLU.so.1.3.1 是兼容的。
$ LIBGL_DEBUG=verbose matlab
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/tls/i965_dri.so
libGL: OpenDriver: trying /usr/lib/xorg/modules/dri/i965_dri.so
libGL: Using DRI2 for screen 0
不提供任何有用的信息。我已经与 TMW 技术支持联系,他们认为这不是 MATLAB 问题,尽管
$ glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
建议基于硬件的 OpenGL 在 MATLAB 之外工作。我在使用 Intel 显卡的 Arch Linux 上完成了大部分测试,但也尝试过 ATI 和 Nvidia 显卡,但没有成功。我最近创建了一个 Debian 7 chroot,因为这是官方支持的操作系统,但仍然没有使用 Intel 卡。
一切都已使用库存 Arch 内核完成。这可能是问题的原因吗?如何调试/跟踪问题?
答案1
对我来说,以下工作(在带有 R2017a(预发行版)的 ArchLinux 下,笔记本电脑只有英特尔显卡):
export LD_PRELOAD=/usr/lib/libstdc++.so
export LD_LIBRARY_PATH=/usr/lib/xorg/modules/dri/
/net/sw/MATLAB/R2017a/bin/glnxa64/MATLAB
请注意,在最后一步中,我直接调用 MATLAB 可执行文件(而不是执行某些 LD_* 操作的帮助程序脚本)
>> opengl info
Version: '3.0 Mesa 17.0.0'
Vendor: 'Intel Open Source Technology Center'
Renderer: 'Mesa DRI Intel(R) Haswell Mobile '
MaxTextureSize: 16384
Visual: 'Visual 0xcb, (RGBA 32 bits (8 8 8 8), Z depth 16 bits, Hardware acceleration, Double buffer, Antialias 8 samples)'
Software: 'false'
HardwareSupportLevel: 'full'
SupportsGraphicsSmoothing: 1
SupportsDepthPeelTransparency: 1
SupportsAlignVertexCenters: 1
Extensions: {230×1 cell}
MaxFrameBufferSize: 16384
答案2
MATLAB 的安装路径中是否有 libstdc++.so.6* 库? MATLAB 附带了过时版本的 C++ 标准库。如果您使用较新版本的 GCC 发行版编译 Mesa,它将无法加载实际的硬件加速后端,这将强制软件渲染。你可以尝试仅从您的 MATLAB 安装中删除该文件(不要从您的发行版安装中删除它,这会完全破坏它),这可能会有所帮助。我从我的安装中执行此操作,但您不想小心不要删除不必要的内容。
我不确定这是否有帮助,因为我期望从你的opengl info
命令中得到稍微不同的消息,但这是值得尝试的。