Next: 1.2 Design Philosophy Up: 1 Introduction Previous: 1 Introduction

## 1.1 Background

One of the major accomplishments in the specification of OpenGL [14,10] was the isolation of window system dependencies from OpenGL's rendering model. The result is that OpenGL is window system independent.

Window system operations such as the creation of a rendering window and the handling of window system events are left to the native window system to define. Necessary interactions between OpenGL and the window system such as creating and binding an OpenGL context to a window are described separately from the OpenGL specification in a window system dependent specification. For example, the GLX specification [3] describes the standard by which OpenGL interacts with the X Window System.

The predecessor to OpenGL is IRIS GL [15,16]. Unlike OpenGL, IRIS GL does specify how rendering windows are created and manipulated. IRIS GL's windowing interface is reasonably popular largely because it is simple to use. IRIS GL programmers can worry about graphics programming without needing to be an expert in programming the native window system. Experience also demonstrated that IRIS GL's windowing interface was high-level enough that it could be retargeted to different window systems. Silicon Graphics migrated from NeWS to the X Window System without any major changes to IRIS GL's basic windowing interface.

Removing window system operations from OpenGL is a sound decision because it allows the OpenGL graphics system to be retargeted to various systems including powerful but expensive graphics workstations as well as mass-production graphics systems like video games, set-top boxes for interactive television, and PCs.

Unfortunately, the lack of a window system interface for OpenGL is a gap in OpenGL's utility. Learning native window system APIs such as the X Window System's Xlib [6] or Motif [7] can be daunting. Even those familiar with native window system APIs need to understand the interface that binds OpenGL to the native window system. And when an OpenGL program is written using the native window system interface, despite the portability of the program's OpenGL rendering code, the program itself will be window system dependent.

Testing and documenting OpenGL's functionality lead to the development of the `tk` and `aux` toolkits. The `aux` toolkit is used in the examples found in the OpenGL Programming Guide [9]. Unfortunately, `aux` has numerous limitations and its utility is largely limited to toy programs. The `tk` library has more functionality than `aux` but was developed in an ad hoc fashion and still lacks much important functionality that IRIS GL programmers expect, like pop-up menus and overlays.

GLUT is designed to fill the need for a window system independent programming interface for OpenGL programs. The interface is designed to be simple yet still meet the needs of useful OpenGL programs. Features from the IRIS GL, `aux`, and `tk` interfaces are included to make it easy for programmers used to these interfaces to develop programs for GLUT.

Next: 1.2 Design Philosophy Up: 1 Introduction Previous: 1 Introduction