VirtualGL Changelog

What's new in VirtualGL 2.5

Feb 16, 2016
  • OS X 10.11 "El Capitan" no longer allows packages to install files under /usr/bin, and this was preventing the VirtualGL binary package for OS X from installing on that platform. The symlinks to vglclient and vglconnect that the OS X package previously installed under /usr/bin have thus been removed in this version of VirtualGL. It will therefore be necessary to invoke vglconnect and vglclient using the full pathname (/opt/VirtualGL/bin/vglconnect or /opt/VirtualGL/bin/vglclient) or to add /opt/VirtualGL/bin to the PATH.
  • Fixed a regression introduced by 2.5 beta1[13] that caused certain system commands (such as uname, hostname, etc.) to crash when running those commands using vglrun on current Arch Linux spins (glibc 2.22, GCC 5.2.) This possibly affected other non-OpenGL, non-X11 applications on other bleeding-edge Linux distributions as well.
  • vglserver_config should now work properly with MDM (MATE Display Manager), if its config files are installed in the standard location (/etc/mdm).
  • Fixed a regression introduced in 2.4 that caused vglrun to abort with "VGL_ISACTIVE=1: is not an identifier" when running on Solaris 10 (or other systems in which /bin/sh doesn't support "export VAR=value" syntax.)
  • Fixed a regression introduced by 2.5 beta1[3] whereby the VirtualGL faker would segfault on Solaris if the 3D application called one of the GLX/OpenGL functions that VirtualGL interposes and the underlying OpenGL library (libGL) did not implement that function.

New in VirtualGL 2.4 (Jan 27, 2015)

  • Fixed an issue that prevented recent versions of Google Chrome/Chromium from running properly in VirtualGL. [
  • VGL_SYNC now affects glFlush(). Although this does not strictly conform to the OpenGL spec (glFlush() is supposed to be an asynchronous command), it was necessary in order to make certain features of Cadence Allegro work properly. Since virtually no applications require VGL_SYNC, it is believed that this change is innocuous.
  • Fixed a bug in vglconnect introduced in VirtualGL 2.3 that prevented 'vglconnect -x' from working properly if the user did not have access to the current directory (vglconnect was erroneously creating a temporary file in the current directory instead of in /tmp.)
  • GLXspheres now warns if the specified polygon count would exceed the limit of 57600 polygons per sphere imposed by GLU and prints the actual polygon count with this limit taken into account. Also, a new option (-n) has been introduced to increase the sphere count.
  • VirtualGL will now only enable color index rendering emulation if a color index context is current. This specifically fixes an interaction issue with MSC Mentat, which occasionally calls glIndexi() when an RGBA context is current, but the fix may affect other applications as well.
  • VirtualGL can now interpose enough of the XCB API to make Qt 5 work properly. Qt 5 does not use XCB to perform 3D rendering (there is no suitable XCB replacement for GLX yet), but it does use XCB to detect whether the GLX extension is available and to handle the application's event queue(s). Thus, when attempting to run Qt 5 applications in VirtualGL, previously the OpenGL portion of the window would fail to resize when the window was resized, or the application would complain that OpenGL was not available and fail to start, or the application would fall back to non-OpenGL rendering. Currently, enabling XCB support in VirtualGL requires building VirtualGL from source and adding -DVGL_FAKEXCB=1 to the CMake command line. The XCB interposer is also disabled by default at run time. It must be enabled by setting the VGL_FAKEXCB environment variable to 1 or passing +xcb to vglrun.
  • Fixed a deadlock that occurred when running compiz 0.9.11 (and possibly other versions as well) with VirtualGL. The issue occurred when compiz called XGrabServer(), followed by glXCreatePixmap() and glXDestroyPixmap(). In VirtualGL, a GLX pixmap resides on the 3D X server, but the corresponding X11 pixmap resides on the 2D X server. Thus, VirtualGL has to synchronize pixels between the two pixmaps in response to certain operations, such as XCopyArea() and XGetImage(), or when the GLX pixmap is destroyed. VirtualGL was previously opening a new connection to the 2D X server in order to perform this synchronization, and because the 2D X server was grabbed, compiz locked up when VirtualGL called XCloseDisplay() on the new display connection. In fact, however, the new display connection was unnecessary, since the GLX/X11 pixmap synchronization occurs within the 3D rendering thread. Thus, VirtualGL now simply reuses the same display connection that is passed to glXCreate[GLX]Pixmap().
  • NetTest and TCBench for Windows are now supplied in a package called VirtualGL-Utils, which can be built from the VirtualGL source. When the VirtualGL Client for Exceed was discontinued, these utilities ceased to have a home, but they are still useful tools to have, irrespective of the thin client solution that is being used. The Windows build of TCBench was temporarily moved into the Windows TurboVNC Viewer packages, but it proved to be a pain to keep the source code synchronized between the two projects. The VirtualGL-Utils package additionally contains a WGL version of GLXspheres, which is a useful tool to have when benchmarking Windows virtual machines that are running in a VirtualGL environment.
  • Worked around an issue in recent versions of SPECviewperf and FEMFAT visualizer that caused them to segfault when used with VirtualGL. Those applications apparently use a dynamic loading mechanism for OpenGL extension functions, and this mechanism defines symbols such as "glGenBuffers" at file scope. Any symbol exported by an application will override a symbol of the same name exported by a shared library, so when VirtualGL tried to call glGenBuffers(), glBindBuffer(), etc., it was picking up the symbols from the application, not from libGL (and those symbols from the application were not necessarily defined.) VirtualGL now obtains the function pointers it needs for PBO readback directly from libGL using glXProcAddress() rather than relying on the dynamic linker to resolve them. Note that this issue could be worked around in previous versions of VirtualGL by setting VGL_READBACK=sync.

New in VirtualGL 2.3.3 (Oct 15, 2013)

  • VirtualGL will no longer throw an exception if a 3D application calls certain X11 and GLX functions with a NULL argument. It will instead allow the underlying X11 or GLX library to handle the error. This specifically works around an issue with Fiji.
  • Worked around an issue whereby, when ANSYS Workbench 14.5 was run with VirtualGL, subprocesses (such as the geometry editor) launched from within the Workbench environment would not exit properly (and thus would become zombies.) This issue also affected ANSYS HFSS, which would either lock up when exiting or would print an error message: "terminate called after throwing an instance of 'rrerror'".
  • Worked around an issue whereby, when using MAGMA5 with VirtualGL, the second and subsequent perspectives opened within the application would not always display correctly.
  • Added support for the GLX_EXT_texture_from_pixmap extension.
  • Added support for the GLX_EXT_swap_control and GLX_SGI_swap_control extensions and a new configuration variable (VGL_REFRESHRATE) that can be used to control them. See the User's Guide for more information.
  • Added support for depth=32 visuals and FB configs.
  • Added a new "window manager" mode that disables certain features in VirtualGL that interfere with 3D window managers such as compiz. This, combined with [6] and [4] above, should allow compiz to run properly with this version of VirtualGL, provided that the 2D X Server has support for the X Composite extension. See the User's Guide for more information.
  • Fixed a BadDrawable X11 error that occurred when running the Steam client in VirtualGL.
  • Improved the accuracy of TCBench and CPUstat

New in VirtualGL 2.3.2 (Oct 3, 2012)

  • Added new stereo options, including green/magenta and blue/yellow anaglyphic as well as three half-resolution passive stereo options that can be used to drive 3D TV's.
  • The 32-bit supplementary package for amd64 Debian systems should now work properly on MultiArch-compatible systems (such as Ubuntu 11 and later.)
  • vglserver_config should now work properly with LightDM.
  • VirtualGL was not advertising that it supported the GLX_ARB_create_context_profile extension, even though it does. This has been fixed.
  • VirtualGL now uses a separate OpenGL context to perform pixel readback. This fixes several issues, including an error ("GL_ARB_pixel_buffer_object extension not available") when trying to enable PBO readback with applications that use a 3.x or later OpenGL core profile, and incorrect rendering in JPCSP and other applications that modify certain pixel store parameters (such as GL_PACK_SWAP_BYTES or GL_PACK_ROW_LENGTH) that VirtualGL wasn't properly handling.

New in VirtualGL 2.3.1 (Jun 12, 2012)

  • Work around seg fault that occurred when running CoreBreach.
  • VirtualGL now properly handles implicit deletion of windows/subwindows via XCloseDisplay(), implicit deletion of subwindows via XDestroyWindow(), and explicit deletion of subwindows via XDestroySubwindows(). This specifically addresses BadDrawable errors that occurred when running certain applications in WINE 1.3.34 and later.
  • Fix crash in glXCreateGLXPbufferSGIX() that occurred when a NULL attribute list pointer was passed to it.
  • VirtualGL should now build and run properly on FreeBSD.
  • VirtualGL now works properly with applications that dynamically load libX11. This specifically fixes several issues that occurred when running SDL-based applications against a version of libSDL that was configured with --enable-x11-shared.
  • Changed Debian package names to lower case ("virtualgl" and "virtualgl32") to avoid an issue whereby the package was always being installed, even if the installed version was up to date.
  • vglserver_config now works properly with KDM on RHEL/CentOS 5 systems.
  • Added a new option (VGL_GLFLUSHTRIGGER) that, when set to 0, will cause VirtualGL to ignore glFlush() commands from the 3D application. This is intended for rare applications that do front buffer rendering and use glFlush() as an "intermediate" synchronization command but then subsequently call glFinish() to indicate the end of the frame.
  • Fixed an issue whereby drag & drop operations in certain Java applications would cause VNC servers (any VNC server, not just TurboVNC) to hang whenever the Java application was run using VirtualGL.

New in VirtualGL 2.2 (Oct 20, 2010)

  • Added VGL_SPOILLAST environment variable which, when set to 0, will change the
  • frame spoiling algorithm used for frames triggered by glFlush() calls.
  • This is necessary to make Ansoft HFSS display properly.

New in VirtualGL 2.1.4 (Apr 1, 2010)

  • Fixed a regression bug in vglserver_config which caused a "binary operator
  • expected" error when restricting framebuffer device access to the vglusers
  • group.
  • Fixed an issue in vglserver_config whereby the device permissions were not
  • being set correctly on SuSE Linux Enterprise Desktop 11.
  • VGL should now properly ignore GLX_BUFFER_SIZE if an application attempts to
  • specify it when requesting a true color visual. Specifically, this allows the
  • Second Life SnowGlobe client to run properly in VGL and WINE.
  • vglserver_config should now work even if /sbin and /usr/sbin are not in the
  • PATH.
  • The Solaris 10/x86 version of VirtualGL should now work properly with
  • the nVidia 18x.xx series drivers.
  • Fix memory leak that occurred when running VirtualGL in quad-buffered stereo
  • mode.
  • The DRI device permissions in RHEL 5 were being overridden whenever a user
  • logged in, because RHEL 5 uses a file in /etc/security/console.perms.d to
  • specify the default DRI permissions rather than using
  • /etc/security/console.perms. vglserver_config has been modified to handle
  • this.
  • Added support for the GLX_EXT_texture_from_pixmap extension so that compiz can
  • be run with VirtualGL.
  • Added an option to vglconnect on Linux/Unix to allow it to use gsissh from the
  • Globus Toolkit instead of the regular ssh program.

New in VirtualGL 2.1.3 (Jun 25, 2009)

  • VirtualGL 2.1.2 printed numerous "Cannot obtain a Pbuffer-enabled 24-bit FB
  • config ..." error messages when starting Google Earth. This has been fixed,
  • and the message has been changed to a warning and clarified. These error
  • messages were printed whenever the application called VirtualGL's interposed
  • version of glXChooseVisual() and that function subsequently failed to obtain an appropriate visual for performing 3D rendering. However, this is not
  • necessarily an error, because applications will sometimes call
  • glXChooseVisual() multiple times until they find a visual with desired
  • attributes.
  • Changed the matching criteria in VirtualGL's interposed version of dlopen().
  • In previous versions of VirtualGL, any calls to dlopen("*libGL*") would be
  • replaced with a call to dlopen("librrfaker.so"). This caused problems with
  • VisIt, which has a library named "libGLabelPlot.so" that was being interposed
  • by mistake. The matching criteria has been changed such that dlopen() only
  • overrides calls to dlopen("libGL.*") or dlopen("*/libGL.*").
  • vglserver_config should now work properly with DRI-compatible graphics drivers
  • (including ATI.)
  • VirtualGL's interposed version of dlopen() will now modify calls to
  • dlopen("libdl*") as well as dlopen("libGL*"). This is to work around an
  • interaction issue with v180.xx of the NVidia accelerated 3D drivers and WINE.
  • Fixed interaction issue with QT4 in which VirtualGL would not properly handle
  • window resize events under certain circumstances.
  • Moved dlopen() back into a separate faker library (libdlfaker.so.)
  • libdlfaker.so is loaded by default, which should maintain the behavior of
  • VGL 2.1.2. However, it can be unloaded by passing an argument of '-nodl' to
  • vglrun. The latter is necessary to make VirtualBox 2.2.x work with VirtualGL.
  • vglserver_config should now work properly on Ubuntu 9.04 when using gdm or kdm.
  • It should also (mostly) work on Fedora 11 (disabling XTEST does not work on
  • Fedora 11 when using gdm.)
  • Added fallback logic to VirtualGL's symbol loader which will try to directly
  • load the GLX/OpenGL symbols from libGL.so.1 and the X11 symbols from
  • libX11.so.6 if loading these symbols using dlsym(RTLD_NEXT, ...) fails. This
  • is to work around an issue with version 18x.xx of the nVidia Linux Display
  • Driver.
  • If an application window was destroyed by the window manager and the
  • application did not explicitly monitor and handle the WM_DELETE protocol
  • message, then previous versions of VirtualGL would, when using the X11 image
  • transport, generally abort with an X11 BadDrawable error. This occurred
  • because the window was basically being ripped out from underneath VirtualGL's
  • blitter thread without warning. This version of VirtualGL has been modified
  • to monitor WM_DELETE messages, so VirtualGL can now bow out gracefully if the
  • 3D application window is closed by the window manager but the application
  • does not handle WM_DELETE.
  • Worked around an interaction issue with IDL whereby the application was calling
  • XGetGeometry() with the same pointer for every argument, and this was causing
  • VirtualGL to lose the width and height data returned from the "real"
  • XGetGeometry() function. Subsequently, the Pbuffer corresponding to the main
  • IDL window would become improperly sized, and the rendering area would not
  • appear to update.
  • Added VGL_TRAPX11 option, which will cause VirtualGL to gracefully trap X11
  • errors, print a warning message when these occur, and allow the application to continue running.

New in VirtualGL 2.1.2 (Jan 23, 2009)

  • Fixed a buffer overrun issue in TurboJPEG/mediaLib that may have caused problems on Solaris/x86 VirtualGL servers.
  • Integrated libdlfaker.so into librrfaker.so to eliminate the need for invoking 'vglrun -dl'.
  • Developed a proper uninstaller app for the Mac OS X VirtualGL package.
  • Modified MAXINST variable in SUNWvgl Solaris package to prevent multiple instances of this package from being installed simultaneously.

New in VirtualGL 2.1.1 (Dec 9, 2008)

  • Fixed issues that occurred when displaying to the second or subsequent screens on a multi-screen X server.
  • Updated to wxWindows Library License v3.1.
  • Added uncompressed YUV encoding option to the Sun Ray plugin. This provides significantly better performance than DPCM on Sun Ray 1 clients, and it provides significantly better image quality in all cases. YUV encoding will generally use about 50% more network bandwidth than DPCM, all else being equal.
  • Further optimized the Huffman encoder in the mediaLib implementation of TurboJPEG. This should decrease the CPU usage when running VirtualGL on Solaris VirtualGL servers, particularly Solaris/x86 servers running 32-bit applications.
  • vglconnect now works properly with Cygwin.
  • Fixed regression that caused VirtualGL to remove any part of the VGL_XVENDOR string following the first white space.
  • vglserver_config now works properly with OpenSolaris systems.
  • glXUseXFont() now works if a Pixmap is the current drawable.
  • vglserver_config now works properly with Debian Linux systems.
  • Fixed a typo in vglconnect which caused it to leave temporary files lying about.
  • Removed libXm (Motif) dependency in the Solaris/x86 version of VirtualGL. This mainly affects OpenSolaris systems, on which Motif is not available. The libXm dependency was introduced in VirtualGL 2.0.x because that version of VirtualGL used libXt (X Intrinsics) to generate its popup configuration dialog. Java requires that libXm be loaded ahead of libXt, so it was necessary to explicitly link the VirtualGL faker library with libXm to guarantee that the libraries were loaded in the correct order. Since VirtualGL 2.1.x and later no longer use libXt, the binding to libXm could be safely removed on x86 systems. Note, however, that the libXm binding still has to be included on SPARC systems, because libGL on SPARC depends on libXmu, which depends on libXt.
  • Fixed an issue with GeomView whereby attempting to resize the oldest window in a multi-window view would cause the Exceed version of vglclient to crash.
  • When used to configure a Solaris server for GLX mode with open access (all users being able to access the local X server, not just members of the vglusers group), vglserver_config was incorrectly placing xhost entries at the top of /etc/dt/config/Xsetup instead of the bottom. This could have led to problems, since xhost is not guaranteed to be in the PATH until the bottom of that script.
  • VirtualGL should now build and run cleanly on Ubuntu systems (and possibly other Debian derivatives, although only Ubuntu has been tested.)
  • Certain applications call glFlush() thousands of times in rapid succession when rendering to the front buffer, even if no part of the 3D scene has changed. Sparing the gorey details, this caused the VirtualGL pipeline to become overloaded in certain cases, particularly on systems with fast pixel readback. On such systems, every one of the glFlush() commands resulted in VirtualGL drawing or sending a frame, even if the pixels in the frame were identical to those in the previous frame. This resulted in application delays of up to several minutes. This version of VGL includes a mechanism which ensures that no more than 100 glFlush() commands per second will actually result in an image being drawn or sent, and thus strings of rapid fire glFlush() commands can no longer overload the pipeline.
  • vglserver_config should now work with openSUSE systems.
  • It was discovered that 'xhost +LOCAL:' is a better method of enabling 3D X server access to all users of the VirtualGL server. This method works even if TCP connections are disabled in the X server (which is the case on recent Solaris and Linux distributions.) vglserver_config has thus been modified to use this method rather than 'xhost +localhost'. Also, since it is no longer necessary to set DisallowTCP=false in the GDM configuration file, vglserver_config now comments out this line if it exists.
  • Fixed deadlock that occurred when using the VirtualGL Sun Ray plugin and ParaView to render multi-context datasets.
  • Fixed an issue with Mac X11 2.1.x on OS X 10.5 "Leopard" whereby vglconnect would abort with "Could not open log file." X11 2.1.x uses a DISPLAY environment of the form /tmp/launch-*/:0, so it was necessary to remove everything up to the last slash before using this variable to build a unique vglclient log file path.
  • Include libgefaker.so in the Solaris VirtualGL packages (oops).
  • Added an interposed version of XSolarisGetVisualGamma() on SPARC servers so that applications that require gamma-corrected visuals can be fooled into thinking a gamma-corrected visual is available when in fact VirtualGL's software gamma correction mechanism is being used instead.
  • Fixed a bug in the color conversion routines of TurboJPEG/mediaLib which caused the Solaris VirtualGL Client to display incorrect pixels along the right-most edge of the window when 2X or 4X subsampling was used.

New in VirtualGL 2.1 (Mar 19, 2008)

  • Windows applications now link statically with OpenSSL to avoid dependency on msvcr71.dll that was introduced in the Win32 OpenSSL 0.9.8e DLLs. libeay32.dll and ssleay32.dll have been removed from the Windows package, since they are no longer needed.
  • Implemented a new interposer library (libgefaker.so) which, when active, will interpose on getenv() and return NULL whenever an application queries the value of the LD_PRELOAD environment variable (and, on Solaris, the LD_PRELOAD_32 and LD_PRELOAD_64 environment variables.) This fools an application into thinking that no preloading is occurring. This feature is currently undocumented and is subject to change, but it can be activated in this release by passing an argument of -ge to vglrun.
  • Extended VGL_SYNC functionality to include glXSwapBuffers() as well. This works around a couple of interaction issues between VirtualGL and AutoForm. The docs have been updated to explain this new functionality, to include an app recipe for AutoForm, and to include a warning about the performance consequences of using VGL_SYNC on a remote X connection.
  • Included a short paragraph in the Chromium section of the docs explaining how to use VirtualGL on the render nodes to redirect Chromium's rendering from a window to a Pbuffer.
  • Documented the patch revision necessary to make Exceed 2008 work properly with VirtualGL. Removed dire warnings.
  • Added full-screen rendering mode to GLXspheres.
  • Fixed regression (uninitialized variable) introduced by [2.1 beta1][7].
  • Fixed logic error that caused vglclient to fail when using OpenGL drawing and talking to a legacy (VGL 2.0 or earlier) server.
  • Fixed regression bug that would cause VGL to deadlock when the user closed the application window while using the X11 Image Transport.
  • Fixed issue whereby vglserver_config would fail to detect the presence of GLP because nm was not in the default PATH.
  • When running VirtualGL on Enterprise Linux 5 using the 100 series NVidia drivers, a normal exit from the application will result in glXChannelRectSyncSGIX() being called after the VirtualGL hashes have already been destructed. glXChannelRectSyncSGIX() calls XFree() (an interposed function), and under certain circumstances, the interposed version of XFree() was trying (and failing) to access one of the previously destructed VirtualGL hashes. This has been fixed.
  • vglclient -kill now works properly on Solaris systems.
  • Fixed a timing snafu in and raised the run priority of Windows version of TCBench. This improves the accuracy of TCBench on Windows in high client CPU usage scenarios.
  • Fixed an issue in the interactive mode of GLXSpheres whereby it would use 100% of the CPU when sitting idle. Added option to GLXSpheres to adjust the polygon count of the scene.
  • Added app recipes for ANSYS and Cedega to docs. Added notes describing ANSYS and Pro/E duplicate glFlush() issue and workarounds.
  • Changed default value for VGL_NPROCS to 1 (performance study indicates that there is no longer any measurable advantage to multi-threaded compression on modern hardware with VGL 2.1.)
  • Added a -bench option to nettest to allow it to measure actual usage on a given Solaris or Linux network device. This was necessitated by accuracy issues with other open source network monitoring solutions.
  • Change the way global hash tables are allocated in VGL in order to fix an interaction issue with applications that are built with MainWin.
  • vglclient -kill now works properly on Mac systems.
  • VirtualGL Configuration dialog now pops up properly when Caps Lock is active.
  • If a previously destroyed GLX context is passed as an argument to glXMake{Context}Current(), the function now returns False instead of throwing a fatal exception. This was necessary to make a couple of different commercial applications work properly.
  • There was some inconsistency regarding the interface for enabling lossless compression in the Sun Ray Image Transport. The User's Guide listed the interface as VGL_COMPRESS=srrgb, whereas the output of vglrun listed the interface as -c srlossless. VirtualGL 2.1rc only responded to the latter interface. It now responds to both interfaces, but VGL_COMPRESS=srrgb is the correct and documented interface. Any errant references to "srlossless" have been changed.