Next: 1.3 API Version 2 Up: 1 Introduction Previous: 1.1 Background

## 1.2 Design Philosophy

GLUT simplifies the implementation of programs using OpenGL rendering. The GLUT application programming interface (API) requires very few routines to display a graphics scene rendered using OpenGL. The GLUT API (like the OpenGL API) is stateful. Most initial GLUT state is defined and the initial state is reasonable for simple programs.

The GLUT routines also take relatively few parameters. No pointers are returned. The only pointers passed into GLUT are pointers to character strings (all strings passed to GLUT are copied, not referenced) and opaque font handles.

The GLUT API is (as much as reasonable) window system independent. For this reason, GLUT does not return any native window system handles, pointers, or other data structures. More subtle window system dependencies such as reliance on window system dependent fonts are avoided by GLUT; instead, GLUT supplies its own (limited) set of fonts.

For programming ease, GLUT provides a simple menu sub-API. While the menuing support is designed to be implemented as pop-up menus, GLUT gives window system leeway to support the menu functionality in another manner (pull-down menus for example).

Two of the most important pieces of GLUT state are the current window and current menu. Most window and menu routines affect the current window or menu respectively. Most callbacks implicitly set the current window and menu to the appropriate window or menu responsible for the callback. GLUT is designed so that a program with only a single window and/or menu will not need to keep track of any window or menu identifiers. This greatly simplifies very simple GLUT programs.

GLUT is designed for simple to moderately complex programs focused on OpenGL rendering. GLUT implements its own event loop. For this reason, mixing GLUT with other APIs that demand their own event handling structure may be difficult. The advantage of a builtin event dispatch loop is simplicity.

GLUT contains routines for rendering fonts and geometric objects, however GLUT makes no claims on the OpenGL display list name space. For this reason, none of the GLUT rendering routines use OpenGL display lists. It is up to the GLUT programmer to compile the output from GLUT rendering routines into display lists if this is desired.

GLUT routines are logically organized into several sub-APIs according to their functionality. The sub-APIs are:

Initialization.
  Command line processing, window system initialization, and initial window creation state are controlled by these routines.
Beginning Event Processing.
  This routine enters GLUT's event processing loop. This routine never returns, and it continuously calls GLUT callbacks as necessary.
Window Management.
  These routines create and control windows.
Overlay Management.
  These routines establish and manage overlays for windows.
Menu Management.
  These routines create and control pop-up menus.
Callback Registration.
  These routines register callbacks to be called by the GLUT event processing loop.
Color Index Colormap Management.
  These routines allow the manipulation of color index colormaps for windows.
State Retrieval.
  These routines allows programs to retrieve state from GLUT.
Font Rendering.
  These routines allow rendering of stroke and bitmap fonts.
Geometric Shape Rendering.
  These routines allow the rendering of 3D geometric objects including spheres, cones, icosahedrons, and teapots.

Next: 1.3 API Version 2 Up: 1 Introduction Previous: 1.1 Background