Technical Info

OpenGL MultipipeTM SDK is used by developers to give their users access to the full power of multiple graphics pipe environments such as SGI® Reality Center® walls, immersive desks, domes, and the like, while preserving portability of their products on lower-end platforms. With its simple ASCII configuration file format, OpenGL Multipipe SDK 2.1 provides run-time portability of OpenGL® API-based applications between multipipe environments, enabling the application to scale in performance and graphics resources along with the number of available hardware graphics pipes in the system without recompilation. For example, it allows a multiprocessor, multipipe application to be developed and tested on a single-pipe desktop machine and executed on the target machine without recompilation.

Overall Design

OpenGL Multipipe SDK provides a channel-management layer in the same way that X11 provides a window-management layer. An OpenGL Multipipe SDK channel is completely defined by its physical layout (real-world frustum coordinates) and its frame buffer resources (hierarchical structure of hardware pipe, X-Window, and OpenGL viewport). The channel, although ultimately providing a view into a scene, remains scene independent. It can be specified via an external ASCII file and made accessible to the application via a few generalized OpenGL routines.

Therefore, a single piece of code can handle multiple channels, while synchronization and multithreading are handled by the API. This allows a developer to focus on writing graphics code, as opposed to worrying about multipipe synchronization issues.

Channel Specifications

Multichannel specifications are described in an intuitive, ASCII file format, similar to that of Open InventorTM, consisting of a hierarchy of frame buffer resources. Several configurations can be managed by the same program: channel members of the same configuration are synchronized on a per-frame basis.

OpenGL Multipipe SDK File Format Hierarchy
Fig. 1. OpenGL Multipipe SDK File Format Hierarchy

Programming and Porting

The OpenGL Multipipe SDK programming model reflects the OpenGL natural application framework while inducing a thread-safe implementation. In this model, the application has to provide only OpenGL Multipipe SDK-entity management callbacks, while OpenGL Multipipe SDK handles the synchronization and multithreading of rendering processes.

The effort in porting an application to a multichannel environment will vary depending on the application's original structure. Generally, the following steps would need to be performed:

  • Isolate APP-[CULL]-DRAWS
  • Minimize OpenGL state changes
The first step is to isolate the strictly rendering portions of a program from the data manipulation component. The rendering task should only access the data in a read-only fashion and limit itself purely to feeding the graphics pipe.

OpenGL Multipipe SDK Execution Model
Fig. 2. OpenGL Multipipe SDK Execution Model

After the completion of the first step, the rendering task itself may need to be further decomposed to isolate changes in the graphics state from graphics primitive description commands. The purpose here is to limit the number of GLXTM content updates (textures, materials, display lists, etc.) when the context is shared by multiple rendering instances. OpenGL Multipipe SDK assumes that all channels associated with the same window will also share the same graphics context. Therefore, the context should be updated only once per frame by calling the updateCB function.

OpenGL Multipipe SDK Features Description

  1. Per-Pipe Display Resolution

    OpenGL Multipipe SDK 2.1 allows a multitude of different pipe display resolutions to be specified within the same configuration. A common useful example is to drive a three-projector SGI Reality Center facility with a two-pipe system by having side channels handled by a single pipe at a pixel resolution of 2048x768 (and two video outputs), while the center channel has the remaining pipe fully dedicated at 1024x768.

  2. Lightweight Stereo On/Off

    OpenGL Multipipe SDK 2.1 allows applications to switch stereo on and off without killing and restarting the MPK windows unless this is absolutely required.

  3. Mirrored Projection Systems

    OpenGL Multipipe SDK 2.1 allows applications to handle projection systems that invert the projected image, usually because of the use of mirrors.

  4. Head-Mounted Display Devices

    OpenGL Multipipe SDK 2.1 transparently supports head-mounted displays, via the configuration file format interface.

  5. Full-Scale Software DPLEX

    OpenGL Multipipe SDK 2.1 allows applications to scale performance by number of pipes (instead of one fewer than the number of pipes) when using software DPLEX compounds.

  6. Preassembled ASYNC Decomposition

    OpenGL Multipipe SDK 2.1 effectively preassembles ASYNC compound frames and yields better performance as it serializes image data transfers to/from pipes.

  7. Customizable Compound Image Assembly Interface

    OpenGL Multipipe SDK 2.1 allows the application to specify its own image recomposition scheme for the compound assembly traversal. The volviewDB application from OpenGL VolumizerTM illustrates the use of that feature to scale applications in texture memory capacity and performance without adding any latency to the rendering.

  8. Integration with OpenGL PerformerTM

    OpenGL Multipipe SDK supports creation and rendering of a PerformerTM scenegraph. The functionality is illustrated by a specific sample application in the 2.1 version distribution.
    Supported features in Performer Execution Mode:

    • File format interface
    • Mixed OpenGL and OpenGL Performer rendering
    • Parallel/multipipe rendering
    • Head-tracking
    • Stereo rendering

  9. OpenGL VizserverTM 3.x Interoperability Support

    OpenGL Multipipe SDK has been extensively tested with OpenGL Vizserver 3.x.

  10. Xinerama Interoperability

    OpenGL Multipipe SDK supports rendering into Xinerama windows without performance penalty. This feature enables an application to stretch or move windows over pipe boundaries while keeping the rendering on each pipe limited to the strict minimum. It only requires Xinerama at the window management level.
    Xinerama window support includes:

    • File format interface
    • Parallel/multipipe rendering
    • Head-tracking
    • Stereo

  11. Support for SGI® Compositor 1.1

    OpenGL Multipipe SDK integrates support for the Compositor 1.1 features including:

    • Adaptive tiling, which allows for reconfiguring the compositor hardware every frame with a different tiling scheme. In addition, an automatic tiling mechanism is provided, which applies the best decomposition for each frame based on the last frame's performance.
    • Stereo compositing, which enables applications to transparently double their performance for stereo rendering provided appropriate hardware is available.
    • Pixel averaging or full-scene anti-aliasing (FSAA) support is provided. The anti-aliasing is accomplished by slightly varying the viewing frustum multiple times and then averaging the results to create the final rendered scene. This compositing can be performed in software or by using multiple graphics pipes combined with the Compositor 1.1 pixel averaging functionality to perform rendering with no performance penalty.
    • Cut-in scenes are available, which provides a hardware-based 2D decomposition in a window.

  12. Optimization for VProTM Graphics in SGI® Onyx® Family Systems with InfinitePerformanceTM and Silicon Graphics® Octane2TM and Silicon Graphics Fuel® Workstations

    OpenGL Multipipe SDK includes optimized readback operations for graphics workstations based on VPro and using GL_DEPTH_COMPONENT24_SGIX type for depth buffer reads.

  13. Support for Custom Compositing

    OpenGL Multipipe SDK enables the application to provide its own algorithms for compositing channels' input images, which provides direct access to the incoming pixel data. This feature enables the application to implement various kinds of image-processing algorithms on the raw pixel data.

  14. Global View Transformations

    This feature enables the application to specify a new modeling transformation for each frame. This modeling transformation usually corresponds to the viewer's position with respect to the application's modeling coordinate system.