User Tools

Site Tools


h1 VRUI Change History

h2 {link:Vrui-1.0-046|} (bug fix release) - Fixed include file names in Geometry/Cone.h; was obviously never used or compiled. - Added missing include file to GL/Extensions/GLARBVertexShader.h

h2 {link:Vrui-1.0-045|} - Fixed bug in clipping algorithm in Geometry::Polygon. - Added extension class for GL_ARB_shader_objects. - Added extension class for GL_ARB_vertex_shader. - Added extension class for GL_ARB_fragment_shader. - Fixed typo in Misc::File::WriteError. - Added Misc::MemMappedFile class to provide a Misc::File wrapper around blocks of memory or memory-mapped files. - Added Comm::TCPPipe to provide an endianness-safe pipe abstraction over TCP sockets. - Fixed missing endianness conversion in std::string read/write methods in Comm::ClusterPipe. - Added glCompileShaderFromFile() convenience function to GLARBShaderObjects extension class. - Changed API of Comm::TCPPipe to allow explicit specification of network endianness during construction. - Fixed bug in wrong endianness conversion in Comm::TCPPipe's write() methods. - Added VR device driver for Vicon Tarsus optical tracking system. - Added resize() method to Images::Image; currently uses bilinear interpolation and clamps against image borders. - Added getAddress() and getHostname() methods to Comm::TCPSocket to retrieve the dotted IP address and resolved host name of the local socket. - Added mutex to Vrui state to protect asynchronous calls to Vrui::requestUpdate from multiple background threads. - Added GL/GLShader, a convenience class for simple GLSL shaders compiling any number of vertex and fragment shaders into a single program object. - Changed implementation of Vrui::VRWindow to pass eye position into private render function instead of eye index; API unchanged. - Added Autostereoscopic rendering capability to Vrui::VRWindow.

h2 {link:Vrui-1.0-044|} - Changed BuildRoot/Packages to make it clearer how to find libraries in non-standard locations. - Added Geometry/Random.h with functions to create random points and vectors such as random unit vectors or normally-distributed error vectors. - Removed superfluous semicola from all C++ files to get rid of warnings when compiling with -pedantic. - Changed return type of (obsolete) glGetFunctionPtr in GL/GLExtensions.h from object pointer to function pointer. - Added indirection workaround when using dlsym() to get rid of warnings when compiling with -pedantic to Plugins/FactoryManager and VRDeviceDaemon/VRFactory.cpp. - Moved all Vrui tool plug-ins to Vrui/Tools directory. - Fixed problem when trying to exit a window-less Vrui application instance; now prints note and exits on ESC (or any other) key. - Redesigned Vrui cluster startup process to send the application's command line via a multicast pipe instead of the remote login command's command line to get around command line length limitations and double-globbing. - Added simple timeout mechanism to Comm::MulticastPipeMultiplexer to detect communication failures or master node crashes from the slaves (to shut them down reliably in case of cluster failure). - Added spinThreshold setting to Vrui::MouseNavigationTool. Spinning animation is only enabled if the mouse moved by more than the given threshold on the screen, measured in physical coordinate units. - Added invertDolly flag to Vrui::MouseNavigationTool to invert the switch between dolly and zoom mode for those who are so inclined. - Added extension class for the GL_EXT_framebuffer_object OpenGL extension. - Fixed bug in Images::writeImageFile: PNG images were shifted downwards by one pixel row. - Added descriptions to many Vrui configuration file options in Vrui configuration file reference HTML page. - Added HTML page describing the Vrui input model to documentation. - Added OpenGL extension class for GL_NV_point_sprite. - Added OpenGL extension class for GL_ARB_point_sprite. - Added virtual Jell-O example program to Vrui release. Contains several versions of the same program to show how to develop cluster-aware multithreaded applications. - Changed makefile in ExamplePrograms to use pattern rules.

h2 {link:Vrui-1.0-043|} - Added Images/GetImageFileSize containing a function to read the size of an image file without having to read the entire image. - Added getNode() method to Geometry::ArrayKdTree. - Fixed method scope in GL/GLTransformationWrappers.cpp. - Added GLFrustum class for software-based frustum culling and LOD calculation to GLGeometryWrappers library.

h2 {link:Vrui-1.0-042|} - Extended use of GLMotif::StyleSheet to assign default attributes during widget creation. Deprecated widget constructors that expect certain attributes (such as fonts) as arguments; all initialization now done through the widget manager's style sheet. - Added GLMotif::SubMenu class to more elegantly handle cascading pop- up menus. - API change in GLMotif::StyleSheet: public element sliderWidth is now called sliderHandleWidth. Client code should stop using the now deprecated method passing sliderWidth into the GLMotif::Slider constructor and use the new constructor instead. - Added convenience method to add new toggle buttons to GLMotif::RadioBox and finished interface to completely handle radio buttons using indices. - Added Vrui::TransparentObject as a base class for objects that need a second rendering pass to render transparency. Transparency pass is called in physical coordinates, with alpha blending enabled and the depth buffer locked, after the application's display function. - Added per-chunk functor applicator to class Misc::ChunkedArray. - Fixed shutdown behavior in Vrui; closes VR windows and destroys context data items before returning from the main loop. - Fixed layout bug in GLMotif::Slider: calcZRange method used sliderbox and shaftbox before they were properly initialized. - Fixed wrong setting names for Frustum tool kill zones in Vrui configuration file.

h2 {link:Vrui-1.0-041|} - Added library interdependencies to makefile to allow parallel build using make -j <numjobs>. - Added required environment variable for MacOS X builds to Vrui makefile fragment. - Fixed bug in Comm::MulticastPipeMultiplexer causing a segmentation fault when slaves are waiting on an empty send queue. - Added new method to class Rotation that creates a rotation transforming a “from” vector into a “to” vector. - Added ValueCoder class for class Plane to geometry library. - Added forward direction to Vrui environment state to help applications that need a general direction pointing “into” the VR environment. Can be queried using the Vrui::getForwardDirection() function. - Added floor plane equation to Vrui environment state to help applications that want to have a user walk on a virtual environment, for example. Can be queried using the Vrui::getFloorPlane() function. - Added WalkNavigationTool class to navigate immersive VR environments by walking and gaze direction. - Added accessor methods to Vrui::Glyph. - Added generic waldo tool to scale translations and rotations of 6-DOF input devices (generalization of WaldoLocatorTool and WaldoDraggingTool). - Added facilities for automatic garbage collection using reference counting to Misc library (classes RefCounted and Autopointer), and a thread-safe version of RefCounted class to Threads library. - Added code to Vrui.General.cpp to re-normalize navigation transformation on every set… and concatenate… call. - Fixed a leftover bug in Misc::MulticastPipeMultiplexer that prohibited opening/closing pipes dynamically and broadcasting high-bandwidth bulk data. Multicast pipes now get average transfer rates of about 70MB/s on 1Gb/s Ethernet, and are reliable to use for application-level data streaming. - Added shift() method to Geometry::Box to shift boxes by a given offset vector. - Fixed synchronization bug in Vrui: application time was only synchronized after the first complete frame. - Added isJoined() method to Threads::Thread. - Added Vrui::Rotation class to Vrui/Geometry.h, to create a shortcut when writing rotation code. - Added Misc/Utility.h header file containing basic helper functions. - Improved Geometry::Polygon class. Now has robust point-in-polygon test for 2- and 3-dimensional general polygons. - Improved Comm::TCPSocket class (reduced latency/increased through-put) by adding methods to enable/disable TCP_NODELAY or TCP_CORK. TCP_CORK momentarily only supported by Linux kernels >= 2.4. - Added configuration file setting to specify the UDP port to use on a multicast master, to simplify getting through firewalls. Still defaults to dynamic port assignment by the OS. - Changed Vislet API to allow vislet classes to read default settings from the Vislet manager's section in the Vrui configuration file. – CAVERenderer vislet class now reads texture file names and rendering settings from configuration file; can still be overridden by command line parameters. – Added Vrui::getVisletManager(void) function to Vrui kernel interface in Vrui/Vrui.h. - Added shutdown method to Comm::TCPSocket to selectively close the read or write direction of a connected socket. - Slightly changed error handling in Comm::TCPSocket blocking read and write to more reliably detect unexpected socket closures. - Fixed Mac OS X version of HIDDevice input device driver module by filtering out non-axis device capabilities (fix by Braden Pellett). - Added clarification comment about Vrui::openPipe() returning NULL in non-cluster environments to Vrui/Vrui.h - Added header file Vrui/ClusterSupport.h with helper functions to simplify writing cluster-aware applications. - Finally fixed Vrui::WaldoTool to behave as expected. - Fixed access priviledge bug in converting copy constructor of Geometry::AffineTransformation. - Fixed several bugs in Comm::MulticastPipeMultiplexer, but still not working reliably. - Changed Vrui's shutdown behavior. Previous implementation destroyed Vrui state before an application object's destructor was called, leading to persistent crashes on shutdown. New approach has explicit deinit() function. This change is transparent to applications using the application object interface. - Changed Vrui's internal cluster communication protocol to flush the internal multicast pipe as early in the frame as possible to increase parallelism between the master and the slaves. - Added “multipipeRemoteCommand” setting to Vrui configuration file to select the command used to start slave application instances (defaults to “ssh”). - Changed order of Vrui state elements and initialization from configuration file. Now properly reads physical unit size before reading other sizes depending on it. - Supported more key names in Vrui::InputDeviceAdapterMouse. Now covering most keys on standard keyboards. - Added a reference page listing all settings in the Vrui configuration file to the HTML documentation. - Enabled spinning animation for Vrui::MouseNavigationTool. - Added Comm::ClusterPipe abstraction for transparent TCP communication between clusters connected via Comm::MulticastPipeMultiplexer. - Changed Comm::TCPSocket to optionally fall back to returning dotted addresses if the peer's host name cannot be resolved instead of throwing an exception. Default behavior is to still throw. - Finished implementing behavior of Vrui::VRWindow for desktop environments where panningViewport and navigate are enabled. Navigation coordinates scale with the window size, and Vrui's display center and size are updated such that applications can center their displays properly. - Added input device adapter to support the (proprietary) head tracker on VisBox and VisWall immersive environments. - Added Vrui::ButtonInputDeviceTool to manipulate virtual 6-DOF input devices using keyboard keys or other buttons. - Added Vrui::ToolKillZoneFrustum to simplify deleting tools in a desktop environment. - Added facility to draw fake mouse cursors to Vrui::MouseNavigationTool. - Replaced Images::RBGImage class with a templatized base class Images::Image and specialized derived classes for RGB and RGBA images. - Added function to read Xcursor cursor files in Images/ReadImageFile.h. - Added missing template instantiation of value coder class for Geometry::ComponentArray to Geometry/GeometryValueCoders. - Fixed crash in Images::readImageFile when reading a PNG image with alpha channel into an RGB image.

h2 {link:Vrui-1.0-040|} - Fixed bulk data transfer in Comm::MulticastPipeMultiplexer. Can now reliably send large amounts of data across the broadcast/multicast connection. Throughput for 100Mb/s Ethernet is stable at 11.34MB/s, throughput for 1Gb/s Ethernet is fluctuating up to 91.4MB/s. - Changed SpaceBallNavigationTool to additionally allow zooming. - Changed build system to allow per-package compiler flags. - Improved desktop embedding: – Windows in panningViewport can be configured to keep the tool kill zone in a fixed user-specified position when moved/resized. – Windows in panningViewport moved can be configured to move the 3D scene along with them. – Mouse navigation in panningViewport windows zooms around the window center and dollys in a line from the eye to the window center - Changed API of Vrui::ToolManager and Vrui::ToolKillZone. - Added function to Vrui.h to concatenate navigation transformations from the left. - Added function to Vrui.h to detect whether the local node is the master (i.e., a single node or the head node of a cluster). - Added Laserpointer tool to simplify pointing out features in 3D displays (no more need to abuse the ray menu tool). - Provided new navigation tool for desktop input devices such as joysticks and spaceballs. Supercedes previous JoystickNavigationTool and SpaceballNavigationTool. - Fixed bug in VRWindow that reported a wrong window center in SplitViewportStereo windows. - Added option that InputDeviceTools create their own virtual input devices when created. - Rolled in most recent MacOS X changed provided by Braden Pellett. – Now supports HID devices using MacOS X's HID API.

h2 Vrui-1.0-039 - Fixed typo in error message strings for Threads::Thread exception classes. - Added support for thread-local storage using POSIX TLS mechanism to Threads library. - Fixed bug in multithreaded rendering: current GLContextData object and current GL extension objects were stored process-global instead of local to each rendering thread. – Seems to fix crashes when using OpenGL extensions and lock-ups when exiting Vrui applications in multithreaded environments. - Changed destination directory for plug-ins during build from Share to library directory. - Updated Vrui.cfg and VRDevices.cfg to most recent settings from IDAV and KeckCAVES VR environments. Supported environments: – Power wall in IDAV main lab (anaglyphic stereo or mono, with spaceball) – Tiled display wall in IDAV VR lab (with optional VR binoculars) – Responsive workbench in IDAV VR lab (with new low-cost DLP projector) – KeckCAVES – Desktop simulator with optional spaceball, optimized for 20“ LCD

h2 Vrui-1.0-038 - Small improvements in Vrui's desktop embedding.

h2 Vrui-1.0-037 - Changed API of GLFont to report average character width. - Changed API of GLMotif::TextField to automatically format numerical- value fields. - Temporarily changed RayMenuTool and RayScreenMenuTool to double as widget tools by setting interactWithWidgets to true in their configuration file sections. - Added new lower-resolution fonts (*12.fnt) that look better on low- resolution displays and in desktop environments.

h2 Vrui-1.0-036 - Added Mac OS X support to Misc::LargeFile class. - Changed plug-in interface to use generic creator/destructor function names instead of class-specific names. - Added cross-platform support to create plug-in modules to makefile fragment. - Added several OpenGL extensions to GLExtensionManager. - Added example program showing how to create application-specific tool classes and register them with the Vrui tool manager.

h2 Vrui-1.0-035 - Added new barrier class to Threads library. - Initial support for multi-threaded rendering to optimally use shared- memory multipipe rendering systems such as SGI PRISMs. – New windowsMultithreaded flag in Vrui root section to switch from sequential multiwindow to parallel multiwindow rendering. - Fixed OpenGL extension handling for the Mac OS X version. - Improved behavior of panning viewport windows by relating mouse navigation to the current window center. - Fixed long-standing bug in font rendering when using convolution to perform antialiasing.

h2 Vrui-1.0-034 - Improved build system to better handle debug and release versions of the toolkit in the same installation directory; example application makefiles now respect DEBUG make parameter. - Started adding a very preliminary user's manual and library documentation in HTML format in the Documentation directory.

h2 Vrui-1.0-033 - Changed behavior of Vrui windows to provide a consistent window into the virtual world by panning their viewports across the maximum viewport defined by the display containing the window. – Still need to fix MouseNavigationTool such that it rotates/scales around the current window center instead of the display center – Should change panning behavior to move a VRScreen inside the bounds of the screen given in the configuration file instead of moving the window inside the screen – will simplify integrating moving windows with other parts of Vrui - Changed behavior of modifier keys inside InputDeviceAdapterMouse such that buttons and button keys are “sticky” when changing the current button set with a modifier key - Added navigation/virtual device tool to better integrate SpaceBall input devices into Vrui – Should implement generic HIDNavigationTool to convert valuators into arbitrary translational/rotational axes

h2 Vrui-1.0-032 - Changed build system and some sources to provide preliminary support for Mac OS X – Requires OS version 10.4 – Requires X11 emulation – Can be configured to use Apple's OpenAL package – Can be configured to use libpng for PNG image file support and libjpeg for JPEG image file support - Removed plug-in handling from Misc library and moved it to Plugins library to remove dependency of Misc on libdl – Factory and FactoryManager moved from namespace Misc to namespace Plugins

h2 Vrui-1.0-031 - Added image handling library (libImages) with PNG and JPEG support - Added vislet plug-in API to Vrui to handle dynamic loading of visualization plug-ins into unaware Vrui applications - Added prototype offset tool to translate the position of any input device by a fixed vector and replicate one device button to the offset device. h2 RIMS Read Me File

RIMS release - requirements and short instructions

author: Tony Bernardin date: 03/30/2006 updated: Eric Cowgill date: 10/30/2006

copyright © 2006, Tony Bernarding and Eric Cowgill.

This readme provides essential information needed to run RIMS in either demo or release mode.

Contents: 1. Important Overview 2. Minimal System Requirements 3. Installation 4. Removal 5. License, Distribution, Bug-reporting, and Suggestions.

h4 1. Important Overview (read this!)

If you publish results obtained using RIMS, please cite the G-Cubed paper that is associated with this software release: “Bernardin, T., E. Cowgill, R. Gold, B. Hamann, O. Kreylos, and A. Schmitt, 2006, Interactive mapping on 3-D terrain models: Geochemistry, Geophysics, Geosystems, 7, Q10013, doi:10.1029/2006GC001335.”

RIMS is a proof-of-concept research application. While it isn't as polished as a commercial package, we have found it quite useful.

If you have trouble running RIMS, find bugs, or have suggestions, please submit that information through the KeckCAVES Wiki found at and not to the authors directly. The Wiki will allow us to both track and effectively respond to this important information.

RIMS only runs in Windows (specifications below). Mac/Linux versions are under development.

Two modes of RIMS are available:

- DEMO: Executable automatically loads preprocessed data (a DEM

and image) provided with the demo.  Fastest way to play with
RIMS, but doesn't allow you to load your own data.

- RELEASE: Runs from the command line and requires you to load

your own DEM and image (texture) data that have been prepared using a separate
image processing application and then preprocessed using Quadbuild.exe.

Three barebones manuals are available:

- Quadbuild Manual: lists requirements for input files and provides

instructions for running the quadbuild tool to preprocess DEM
and image data to create RIMS input files.

- RIMS Manual: directions for launching and running both DEMO and

RELEASE versions of RIMS.

- Troubleshooting: Some tips on troubleshooting Quadbuild and RIMS.

h4 2. Minimal System Requirements

The current demo/release versions of RIMS require at least the following capabilities for the host system:

- 32bit Microsoft Windows 200x or XP (may also run on older Microsoft

Windows operating systems but we have not checked this)

- The demo will *use* 512MB of main system memory (RAM) and 50MB of

dedicated graphics memory (VRAM).

- The following OpenGL Extensions *must* be supported by your graphics system:


If these requirements are not met, RIMS may fail to launch or operate with severely degraded performance.

h4 3. Installation

Installation of both the demo and release versions of RIMS on your windows system is fairly simple. Please follow these steps:

a) Save the ZIP-compressed archive ( and/or

b) Save the relavent manuals: DEMO manual files:

 RIMS Manual.doc
 Troubleshooting Manual.doc (not strictly needed but may be helpful).

RELEASE manual files:

 Quadbuild Manual v##.doc
 RIMS Manual v##.doc
 Troubleshooting Manual v##.doc

c) Use your favorite archiving tool to unpack the files contained in the bundle to a folder of your choosing. To run the DEMO, please make sure that the following files are all present in the same folder:

RIMS core files:


RIMS data files:


To run the demo please double click on rims_demo.exe. RIMS will start and automatically load the example data provided with the demo.

For instructions on how to use RIMS and/or start the release version please refer to the RIMS Manual.

h4 4. Removal

To remove either the demo or release versions of RIMS from your system, simply delete the installation folder and all of its contents.

h4 5. License, Distribution, and Bug-reporting

RIMS is a terrain mapping software tool that allows users to look at high-resolution terrain data interactively in 3D and to draw maps directly on the 3D model.

Copyright (C) 2006 Tony Bernardin

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

We would like to stress here again that RIMS is a prototype of ongoing research work at the University of California, Davis. As such users should expect to encounter some problems during use. We hope users will still find it to be as useful to them as it has been to us.

RIMS is distributed as is and we do not offer support as for commercial packages. Please do NOT mail the authors directly with support requests or problem reports.

However, your feedback is very important to us for the future development of RIMS. Please report bugs, workarounds, and development requests through the Wiki that can be found on the KeckCAVES website at

We hope this Wiki can become a portal for the RIMS community and developers to communicate on issues, leave general feedback and potentially maintain a whishlist of yet unsupported features.

keckcaves/vrui_history.txt · Last modified: 2008/07/17 21:26 (external edit)