在我的笔记本上安装了ENVI 4.3后一直无法执行,但IDL没有问题。经检查,应该是I915的驱动所导致的问题,不过可以在XGL环境下执行,非常奇怪。
不过现在终于找到了解决办法:
LIBGL_ALWAYS_INDIRECT=1 /usr/local/bin/envi
最终是在ITT的forum上找到了答案:
Hi there. We came across Tech Tip “OpenGL Direct Hardware Rendering on Linux. Article ID: 3524” that showed a workaround.
Disabling (OpenGL) direct rendering made the trick (at the expense of speed):
debian10$ export LIBGL_ALWAYS_INDIRECT=1
I still wonder why other software work fine.Cheers,
Juan P.
同时,他还给出了一种解释:
Hi there,
After talking to Xorg/DRI/Debian developers, it seems that direct rendering is working ok on my system but a conflict exists between system libGL and IDL’s own copy of Mesa.
They suggest that the system libGL and IDL’s own copy of Mesa shouldn’t be used at the same time, or that IDL should at least make sure their symbols don’t interfere with each other. They suggested a possible workaround (to start the program with LD_PRELAD=/usr/local/rsi/idl_6.3/bin/bin.linux.x86/libMesaGL6_2.so.1 or some variation thereof), which unfortunately didn’t work for me.Cheers,
J.P. Rigol
不过这种hack方法在我的机器也不能工作。
在这个地方给出了更多的说明:
Troubleshooting
RSI cannot control driver quality, so you may have trouble with some drivers that might be buggy. Besides obtaining a driver update from the vendor, there are several things you can do to make IDL usable again in the presence of a buggy driver:* Read the documentation that came along with your driver software carefully. There may be a number of diagnostic tools or environment variables that you can set to provide some relief.
* When using an X server based on XFree86, modifying the XFree86 configuration file may solve any problems. Consult the XFree86 documentation for details. Also, the XFree86 server startup log, usually found in /var/log, can provide many clues about the problem.
* Set the LIBGL_ALWAYS_INDIRECT environment variable. This causes OpenGL to ignore IDL’s request to use direct rendering and would then avoid any bugs that may exist in the direct path.
* Configure your IDL session to use software rendering when required or code your IDL application to use software rendering. These details are covered in IDL documentation.
* As a last resort, remove/rename the gl_driver shared library from your IDL installation (in the binary directory). This will keep IDL from attempting to use direct or indirect hardware rendering. IDL will instead perform all rendering itself and send the results to the X server with “2D” commands.
* One expert IDL programmer reported in March 2004 on the IDL Newsgroup this promising workaround on a host running Fedora Linux:
“If you’re a user of a recent Linux (like Fedora), and you’ve experienced IDL crashes that post the following fatal error:Floating exception
when attempting to use any of IDL’s OpenGL 3D stuff (like the Demo->Itools, for example), you might try the following:
setenv MESA_NO_ASM 1This disables some specific ASM code in the Mesa library which was causing these types of crashes for me. I use an ATI Radeon 7500 plus XFree86 4.3.0’s Radeon drivers. With this environment variable set, IDL’s 3D hardware rendering seems stable, and definitely executes much faster than the alternative software rendering option.”
现在就能解释为何在XGL环境下可以使用ENVI了:现在的XGL环境不支持OPENGL直接调用!
发表回复