Changes in CAVE Library Version 2.6f

(released 27 February 1998)

Annoying changes

Applications should be recompiled from source, using the new headers, before linking with the 2.6 library, due to these changes.

Bug fixes from Versions 2.5.6 a - f

Significant new features

N32 & 64
There are now n32 and 64-bit versions of the OpenGL CAVE and pfCAVE libraries. They are -lcave_ogl_n32, -lcave_ogl_64, -lpfcave_ogl_n32, and -lpfcave_ogl_64. The default versions of the library are still the old 32-bit format.
New display process design
The display loop and window management have been redesigned to better support having multiple displays on a single graphics pipe, such as in a 2-IR 4 wall CAVE. All walls which use the same display (except those with "window" geometry) are handled by a single process. The rendering process opens one window which contains all of the walls' display areas, and switches viewports appropriately when rendering. Note that OpenGL applications should not disable the Scissor Test while clearing the screen, or they will fail under this system.
The display function is called for each [wall,eye] combination being rendered by a process; the FrameFunction is called only once per frame in each display process, not once per wall; similarly, the InitApplication function is only called once by each process. The variable CAVEWall is considered undefined during the FrameFunction and InitApplication callbacks (see the function CAVEGetPipeChannels() if you need an equivalent). Also, CAVEMasterDisplay() can now return true for multiple walls; use CAVEMasterWall() if you need to identify a single wall, as opposed to a single display process.
The pfCAVE library uses the same approach to define its Performer pipes and channels (in fact, the idea for the new design was stolen from Performer).
New display options
Several new configuration options have been added which greatly expand the flexibility of the display system:
Distributed CAVE redesign
The internal design of the 'distributed CAVE' code (i.e. that for a CAVE system using multiple workstations to drive all the displays) has been completely revised. This change should be mostly invisible to applications, with the exceptions that more than two machines are now supported (up to 32), and that the raw Hippi protocol is no longer supported (it tended to be worse than TCP over Hippi for the small data packets typically used in CAVE applications).

CAVEDisplay(), CAVEInitApplication(), and CAVEFrameFunction() now all synchronize between machines in distributed CAVE, before setting function pointers. This should help make sure that application functions are first called at the same frame on each machine.

A new programming interface has been created to help programs share and synchronize application data between machines in a distributed CAVE. This is described in the "New4Wall" page. (It is unchanged since alpha3, except for bug fixes.)

Projection code revision
The method for setting up the CAVE projection transformation has been changed. The transformation can now be entirely loaded into the Projection matrix, without using the ModelView matrix. This should cause reflection-mapped textures and specular highlights to match accurately between walls of the CAVE (however, it breaks fog). As of beta3, this option is enabled by calling CAVESetOption(CAVE_PROJ_USEMODELVIEW,0). Note: this change only applies to the base IrisGL/OpenGL CAVE libraries, not to the Performer CAVE libraries.

New library functions

New configuration options

There are now brief and full versions of the configuration information that is printed when a program starts; the brief version is the default. The environment variable CAVEDEBUGCONFIG can be used to select what is printed; possible values are 'off' (don't print any config info at all), 'brief', 'full', and 'verbose' (print every option as it is read).

Bug / Feature fixes

Other changes

Features which have been removed


Further changes to the beta release


Post-release bug fixes


Last modified 26 Feb 1998.

Dave Pape, pape@evl.uic.edu