Skip to content

2.0.1

Compare
Choose a tag to compare
@dcommander dcommander released this 28 Jul 20:06

Assets

  • VirtualGL-2.0.1.tar.gz is the official source tarball for this release. The automatically generated "Source code" assets are not supported.
  • Refer to https://VirtualGL.org/Downloads/DigitalSignatures for information regarding the methods used to sign the files in this release and instructions for verifying the signatures.

Support

Code Quality: Stable
Current Support Category: EOL

Documentation

User’s Guide for VirtualGL 2.0.1 and TurboVNC 0.3.3

Release Notes

This release was historically part of the Sun Shared Visualization v1.0.1 product.

Significant changes relative to 2.0:

  1. The Linux and Solaris versions of VirtualGL are now statically linked with OpenSSL. This fixes an issue whereby a 3D application that uses OpenSSL could override VirtualGL's SSL bindings, thus causing VirtualGL to crash if SSL was enabled (VGL_SSL=1 or vglrun +s) and if the application's version of OpenSSL was incompatible with VirtualGL's.

    This, combined with [5] below, has the added benefit of allowing a single VirtualGL RPM to be used across multiple Linux platforms. It is no longer necessary to use a separate RPM for different versions of Enterprise Linux, SuSE, etc.

  2. librrfaker.so and libturbojpeg.so are now being linked with map files (AKA "anonymous version scripts" on Linux.) This is mainly a preventative measure, because it hides any non-global symbols in the shared objects, thus preventing those symbols from accidentally interposing on a symbol in an application or in another shared object. However, this was also necessary to prevent [1] from causing the opposite problem from the one it was intended to fix (without [2], VirtualGL could interpose on an application's SSL bindings rather than vice versa.)

    Linux users will need to upgrade to TurboJPEG 1.04.2 (or later) to get this fix. For other platforms, the fix is included in the VGL 2.0.1 packages.

  3. librr.so, rr.h, and the rrglxgears.c sample application have been removed from the distribution packages. These demonstrated a strawman API for creating a VGL movie player. The API was somewhat ill-conceived and broken, and it needs to be revisited.

  4. VirtualGL's custom version of glxinfo is now included in the distribution packages, under /opt/SUNWvgl/bin or /opt/VirtualGL/bin. This version of glxinfo supports GLP on SPARC servers and also has the ability to query GLX FB Configs as well as X visuals.

  5. VGL now uses direct linking to link against libCrun on Solaris and static linking to link against libstdc++ on Linux. This is to prevent a problem similar to [1], in which an application that overrides the default C++ new and delete operators could force VGL to use its custom new and delete operators rather than the default operators provided in libCrun/libstdc++. Specifically, this addresses an issue whereby Pro/E would spuriously crash on multi-processor Solaris/SPARC machines.

    libstdc++ is statically linked on Linux because Linux has no equivalent of Direct linking, but static linking against libstdc++ has the added benefit of allowing one VirtualGL RPM to be used across multiple Linux platforms.

  6. Eliminated the use of the X DOUBLE-BUFFER extension in Raw Mode and replaced it instead with X Pixmap drawing. Previously, VGL would try to use the MIT-SHM extension to draw rendered frames in Raw Mode, then it would fall back to using the X DOUBLE-BUFFER extension if MIT-SHM was not available or could not be used (such as on a remote X connection), then it would fall back to single-buffered drawing if DOUBLE-BUFFER could not be used. However, the DOUBLE-BUFFER extension crashes on some Sun Ray configurations (specifically Xinerama configurations), so VGL 2.0 disabled the use of DOUBLE-BUFFER on all Sun Ray configurations to work around this issue. [6] replaces that hack with a more solid fix that ensures that Raw Mode is always double-buffered, even if the X DOUBLE-BUFFER extension is not available or is not working. Pixmap drawing has the same performance as DOUBLE-BUFFER.

    This generally only affects cases in which Raw Mode is used to transmit rendered frames over a network. When Raw Mode is used to transmit rendered frames to an X server on the same machine, it is almost always able to use the MIT-SHM X extension.

  7. Numerous doc changes, including:

    • Restructuring the User's Guide to create a more clear delineation between what needs to be done on the server and what needs to be done on the client.
    • (Re-)added instructions for how to use VGL with a direct X11 connection, since it has become apparent that that configuration is necessary in some cases.
    • Changed procedure for doing Direct Mode SSH tunneling. The previous procedure would not have worked if multiple users were trying to tunnel Direct Mode from the same server. The new procedure requires running a program (see [8] below) that prints out an available TCP port, and using that port on the server end of the SSH tunnel.
    • Added application recipe for ANSA 12.1.0.
    • Added procedures for using VGL with TurboVNC and for using TurboVNC in general.
    • Added information for using VGL with GLP (which, unbelievably, was never really included in the User's Guide. Major oversight on our part.)
  8. Modified the nettest program such that it finds a free TCP port number and prints out the port number to the console when you pass an argument of -findport to the program.

  9. Fixed glXGetProcAddressARB() and glXGetProcAddress() on SPARC platforms. Due to an erroneous #ifdef statement, these interposed functions were not getting compiled into VirtualGL when VirtualGL was built with Sun OpenGL on SPARC platforms.

    This, combined with [16], allows Java 2D apps running in VirtualGL on SPARC platforms to successfully use the OpenGL pipeline to perform Java 2D rendering.

  10. Sun OpenGL 120812-15 (and later) now includes a SwapBuffers() command for GLP, which VirtualGL will now use if available. Some applications that use front buffer drawing (Pro/E and UGS/NX v4, specifically) did not work properly with VirtualGL 2.0 in GLP mode, because the back buffer in the double-buffered Pbuffer was not being swapped.

  11. Some applications call XListExtensions() rather than XQueryExtension() to probe for the existence of the GLX extension. Such applications, when displaying to VNC or another X server that lacks the GLX extension, would fail. VirtualGL now interposes on XListExtensions() and makes sure that the GLX extension is always reported as present. This fixes a specific issue with UGS/NX v4 whereby NX, if run with VirtualGL and TurboVNC, would refuse to use OpenGL to perform its 3D rendering.

  12. VGL will now print a warning if the GLX context it obtains on the server's display is indirect. This will occur on Solaris if the framebuffer device permissions do not allow read/write access for the current user.

  13. Normally, if X11 drawing is the default in the VirtualGL Client (which is the case on non-SPARC systems, on SPARC systems with 2D framebuffers, or on any system if vglclient is invoked with the -x argument), then the VirtualGL Client will only use OpenGL for drawing stereo frames. This fixes a bug whereby the VirtualGL Client would not switch back to X11 drawing (if X11 drawing was the default) after the application ceased rendering in stereo.

  14. You can now specify a listen port number of 0 to make the VirtualGL Client pick an available port. This is of only marginal use at the moment, since there is no way to make the server automatically connect to that port, but we got this for free as a result of [8].

  15. Fixed an issue that was causing the multithreaded tests in rrfakerut to crash some of the nVidia 7xxx series drivers. rrfakerut should now run cleanly on the 7xxx series, but the multithreaded tests still cause the 8xxx series drivers to crash & burn, and they cause the 9xxx series drivers to generate incorrect pixels. Further investigation is needed.

  16. Fixed two issues that were preventing Java 2D on Solaris/SPARC from properly detecting that OpenGL is available:

    • glXChooseFBConfig() now ignores the GLX_VISUAL_ID attribute. That attribute doesn't really have any meaning in VGL, and passing it through to the 3D X server was causing Java 2D apps to fail.
    • glXGetFBConfigAttrib(..., GLX_DRAWABLE_TYPE, ...) now always returns GLX_PIXMAP_BIT|GLX_PBUFFER_BIT|GLX_WINDOW_BIT, so that Java 2D apps will properly detect that window rendering is available in VirtualGL.
  17. vglrun will now print usage information if you fail to provide an application command to run.

  18. Upgraded the OpenSSL DLL included with the Windows VirtualGL Client to OpenSSL 0.9.8d (previously 0.9.8c.)

  19. VirtualGL now buffers the output from the profiler class so that the profiling output from multiple compression threads doesn't intermingle when redirected to a log file.

  20. If the DISPLAY environment variable is unset on the VirtualGL server, vglrun will now set it automatically to {ssh_client}:0.0 (where {ssh_client} = the IP address of the SSH client.) If DISPLAY is set to localhost:{n}.0 or {server_hostname}:{n}.0, VGL assumes that SSH X11 forwarding is in use and sets VGL_CLIENT={ssh_client}:0.0 instead (without modifying DISPLAY.) vglrun prints a warning that it is doing this. You must still explicitly set VGL_CLIENT or DISPLAY if you are doing something exotic, such as tunneling VGL's client/server connection through SSH or displaying to an X server with a display number other than 0. But this fix should eliminate the need to set VGL_CLIENT and DISPLAY in most cases. Note that the Sun Ray plugin also reads the VGL_CLIENT environment variable, so if you are connecting to the VirtualGL server from a Sun Ray server using SSH X11 forwarding, this eliminates the need to explicitly set VGL_CLIENT in that case as well.

  21. Implemented the "spoil last frame" algorithm in the Sun Ray plugin whenever VGL reads back/compresses/sends the framebuffer in response to a glFlush(). This fixes issues with slow model regeneration and zoom operations in Pro/E when using the Sun Ray plugin.

    Normally, the Sun Ray plugin uses the "spoil first frame" algorithm, which causes the frames in the queue to be discarded whenever a new frame is received. However, this algorithm requires that the framebuffer be read back every time a frame is rendered, even if that frame is ultimately going to be spoiled. This causes problems with applications (Pro/E, specifically) that call glFlush() frequently when doing front buffer drawing. Each of these glFlush() calls triggers a framebuffer readback in VirtualGL, which can cause significant interaction delays in the application. The "spoil last frame" algorithm discards the newest frame if the queue is currently busy, so when this algorithm is used, most of the duplicate frames triggered by the repeated glFlush() events are discarded with no framebuffer readback (and thus very little overhead.)

    This fix does not affect Direct Mode and Raw Mode, since those modes already use the "spoil last frame" algorithm in all cases.

  22. Added an option (VGL_INTERFRAME), which, when set to 0, will disable interframe comparison of rendered frames in Direct Mode. This was necessary to work around an interaction issue between VGL and Pro/E Wildfire v3 that led to slow performance when zooming in or out on the Pro/E model.

  23. Added an option (VGL_LOG), which can be used to redirect the console output from the VirtualGL Faker to a file instead of stderr.

  24. The mediaLib implementation of TurboJPEG and the mediaLib-accelerated gamma correction code have been modified slightly, to avoid calls to mediaLib functions that wrap memalign() and free(). This works around an interaction issue with Pro/E v3 (and potentially with other applications that use their own custom memory allocators.)