Welcome to the OpenGL Performer application development environment. OpenGL Performer provides a programming interface (with ANSI C and C++ bindings) for creating real-time graphics applications and offers high-performance, multiprocessed rendering in an easy-to-use 3D graphics toolkit. OpenGL Performer interfaces with the OpenGL graphics library; this library combined with the IRIX, Linux, or Microsoft Windows (Windows 2000, Windows NT, and Windows XP) operating system forms the foundation of a powerful suite of tools and features for creating real-time 3D graphics applications.
Use OpenGL Performer for building visual simulation applications and virtual reality environments; for rapid rendering in on-air broadcast and virtual-set applications; for assembly viewing in large, simulation-based design tasks; or to maximize the graphics performance of any application. Applications that require real-time visuals, free-running or fixed-frame-rate display, or high-performance rendering will benefit from using OpenGL Performer.
OpenGL Performer drastically reduces the work required to tune your application's performance. General optimizations include the use of highly tuned routines for all performance-critical operations and the reorganization of graphics data and operations for faster rendering. OpenGL Performer also handles SGI architecture-specific tuning issues for you by selecting the best rendering and multiprocessing modes at run time, based on the system configuration.
OpenGL Performer is an integral part of SGI visual simulation systems. It provides the interface to advanced features available exclusively with the SGI product line, such as the Silicon Graphics Prism, Silicon Graphics Onyx4 UltimateVision, InfiniteReality, Silicon Graphics Octane, Silicon Graphics O2, and VPro graphics subsystems. OpenGL Performer teamed with SGI graphics hardware provide a sophisticated image generation system in a powerful, flexible, and extensible software environment. OpenGL Performer is also tuned to operate efficiently on a variety of graphics platforms; you do not need the hardware sophistication of InfiniteReality graphics to benefit from OpenGL Performer.
To use OpenGL Performer, you should be comfortable programming in ANSI C or C++. You should also have a fairly good grasp of graphics programming concepts. Terms such as “texture map” and “homogeneous coordinate” are not explained in this guide. It helps if you are familiar with the OpenGL library.
On the other hand, though you need to know a little about graphics, you do not have to be a seasoned C (or C++) programmer, a graphics hardware guru, or a graphics-library virtuoso to use OpenGL Performer. OpenGL Performer puts the engineering expertise behind SGI hardware and software at your fingertips, so you can minimize your application development time while maximizing the application's performance and visual impact.
For a concise description of OpenGL Performer basics, see the OpenGL Performer Getting Started Guide.
The best way to get started is to read the OpenGL Performer Getting Started Guide. If you like learning from sample code, turn to Chapter 1, “Getting Acquainted with OpenGL Performer,” which takes you on a tour of some demo programs. These programs let you see for yourself what OpenGL Performer does. Even if you are not developing a visual simulation application, you might want to look at the demos to see high-performance rendering in action. At the end of Chapter 2, “Setting Up the Display Environment” in that guide, you will find suggestions pointing to possible next steps; alternatively, you can browse through the summary below to find a topic of interest.
Chapter 1, “OpenGL Performer Programming Interface”, describes the fundamental ideas behind the OpenGL Performer programming interface.
Chapter 2, “Setting Up the Display Environment”, describes how to set up rendering pipelines, windows, and channels (cameras).
Chapter 3, “Nodes and Node Types”, describes the data structures used in OpenGL Performer's memory-based, scene-definition databases.
Chapter 4, “Database Traversal”, explains how to manipulate and examine a scene graph.
Chapter 5, “Frame and Load Control”, explains how to control frame rate, synchronization, and dynamic load management. This chapter also discusses the load management techniques of multiprocessing and level-of-detail.
Chapter 6, “Creating Visual Effects”, describes how to use environmental, atmospheric, lighting, and other visual effects to enhance the realism of your application.
Chapter 7, “Importing Databases”, describes database formats and sample conversion utilities.
Chapter 8, “Geometry”, discusses the classes used to create geometry in OpenGL Performer scenes.
Chapter 9, “Higher-Order Geometric Primitives” describes higher-order primitives, including classes to define discrete curves and surfaces.
Chapter 10, “Creating and Maintaining Surface Topology” describes the connectivity of parametric surfaces—that is, their topology.
Chapter 11, “Rendering Higher-Order Primitives: Tessellators” describes how to control the tessellation of shapes.
Chapter 12, “Graphics State”, describes the graphics state, which contains all of the fields that together define the appearance of geometry.
Chapter 13, “Shaders”, describes the shader, a mechanism that allows complex rendering equations to be applied to OpenGL Performer objects.
Chapter 14, “Using Scalable Graphics Hardware”, describes how to use OpenGL Performer in conjunction with an SGI Video Digital Multiplexer (DPLEX), an SGI Scalable Graphics Compositor, and graphics processing units (GPUs).
Chapter 15, “ClipTextures”, describes how to work with large, high-resolution textures.
Chapter 16, “Windows”, describes how to create, configure, manipulate, and communicate with a window in OpenGL Performer.
Chapter 17, “pfPipeWindows and pfPipeVideoChannels”, describes the unified window and video channel control and management provided by pfPipeWindows and pfPipeVideoChannels.
Chapter 18, “Managing Nongraphic System Tasks”, describes clocks, memory allocation, synchronous I/O, error handling and notification, and search paths.
Chapter 19, “Dynamic Data”, describes how to connect pfFlux, pfFCS, and pfEngine nodes, which together can be used for animating geometries.
Chapter 20, “Active Surface Definition”, describes the Active Surface Definition (ASD): a library that handles real-time surface meshing and morphing.
Chapter 21, “Light Points”, describes the calligraphic lights, which are intensely bright lights.
Chapter 22, “Math Routines”, details the comprehensive math support provided as part of OpenGL Performer.
Chapter 23, “Statistics”, discusses the various kinds of statistics you can collect and display about the performance of your application.
Chapter 24, “Performance Tuning and Debugging”, explains how to use performance measurement and debugging tools and provides hints for getting maximum performance.
Chapter 25, “Building a Visual Simulation Application Using libpfv” describes a modular approach to building an application using a graphical viewer.
Chapter 26, “Programming with C++”, discusses the differences between using the C and C++ programming interfaces.
You can find the sample code for all of the sample OpenGL Performer applications installed under /usr/share/Performer/src/pguide on IRIX and Linux and under %PFROOT%\Src\pguide on Microsoft Windows.
Used for function names, with parentheses appended to the name and also for the names of window menus and buttons. Also, bold lowercase letters represent vectors, and bold uppercase letters denote matrices.
Indicates variables, book titles, and glossary items.
Used for filenames, operating system command names, command-line option flags, code examples, and system output.
Indicates user input, such as items that you type in from the keyboard.
Note that in some cases it is convenient to refer to a group of similarly named OpenGL Performer functions by a single name; in such cases an asterisk is used to indicate all the functions whose names start the same way. For instance, pfNew*() refers to all functions whose names begin with “pfNew”: pfNewChan(), pfNewDCS(), pfNewESky(), pfNewGeode(), and so on.
The OpenGL Performer series include the followingmanuals in printed and online formats:
OpenGL Performer Programmer's Guide (this book)
OpenGL Performer Getting Started Guide
To read these online books, point your browser at the following:
For general information about OpenGL Performer, use the following URL:
The info-performer mailing list provides a forum for discussion of OpenGL Performer including technical and nontechnical issues. Subscription requests should be sent to [email protected]. Much like the comp.sys.sgi.* newsgroups on the Internet, it is not an official support channel but is monitored by several interested SGI employees familiar with the toolkit. The OpenGL Performer mailing list archives are at the following URL:
If you have comments about the technical accuracy, content, or organization of this document, please tell us. Be sure to include the title and document number of the manual with your comments. (Online, the document number is located in the front matter of the manual. In printed manuals, the document number can be found on the back cover.)
You can contact us in any of the following ways:
Send e-mail to the following address:
Use the Feedback option on the Technical Publications Library World Wide Web page:
Contact your customer service representative and ask that an incident be filed in the SGI incident tracking system.
Send mail to the following address:
1600 Amphitheatre Pkwy., M/S 535
Mountain View, California 94043-1351
We value your comments and will respond to them promptly.