The Equalizer programming interface and execution model provides, over-simplified, a distributed, scalable, multipipe, multithreaded GLUT implementation. The Equalizer for GLUT Developers Howto helps to find some pointers for GLUT programmers.
Application developers use the Equalizer client library to write parallel, scalable OpenGL applications. The Equalizer client library is the interface to the Equalizer server, and it abstracts the application from the actual configuration of the execution environment. Compared to other cluster-rendering software, it does not replace the OpenGL library but parallelizes and distributes the application's rendering code for optimal performance.
The API is minimally invasive and allows to retain almost all of the application's OpenGL rendering code. Equalizer provides the natural execution framework for any multi-pipe application and does not impose any specific rendering framework, such as a scenegraph, to the application. It follows the natural execution model of any multipipe application, and provided the functionality common to multipipe applications, thus making it as easy as possible to port existing applications to Equalizer.
Equalizer uses a callback-driven interface. Applications provide their rendering methods, which are called by the Equalizer framework according to the current configuration and system load. Process and thread creation, task synchronization and network connections are externalized from the application and handled by the Equalizer framework.
In order to port an application to run in a multipipe environment, the rendering routines have to be separated from the core application. The Equalizer framework will then take care of the multiprocessing and synchronization and call the application-provided rendering methods in parallel. The basic execution flow of a singlepipe and a multipipe application is show on the right (click on picture to enlarge).
Equalizer abstracts common graphic entities into C++ classes, for example:
- Node - a single computer in the cluster
- Pipe - a graphics card and rendering thread
- Window - an OpenGL drawable
- Channel - a viewport within a window
The application subclasses these entities, and overrides task methods to provide the application's rendering code. Each method corresponds to a task, and for all of them Equalizer provides a default method which implements the typical use case. This allows a quick start for the developer, which can replace the defaults gradually with his own code. The full list of task methods is part of the developer documentation. Some of the most important methods are:
- Channel::frameDraw - render using the provided frustum, viewport and range
- Window::configInit - initialize OpenGL drawable and state
- Pipe::frameStart - update frame-specific data
- Node::configInit - initialize per node application data
Equalizer provides an API to build network-distributed applications. In contrast to other cluster API's, such as MPI or PVM, this API is designed for the development of interactive applications. Certain characteristics of visualization software, e.g. the frame-driven rendering, are exploited for better performance and simpler programming interface.
API documentation for specific features, and other technical information is available under developer documentation.