# GLE Build Notes & General Info

## Background and Overview

The GLE Tubing and Extrusion Library is a graphics application programming interface (API). The library consists of a number of "C" language subroutines for drawing tubing and extrusions. The library is distributed in source code form, in a package that includes documentation, a VRML proposal, Makefiles, and full source code and header files. It uses the OpenGL (TM) programming API to perform the actual drawing of the tubing and extrusions.

GLE is known to run on UNIX(r) and UNIX-like operating systems such as Linux, AIX, IRIX, Ultrix and HPUX with OpenGL or Mesa. GLE is also known to run on OS/2 Warp.

A spec file is included for automatically building RedHat RPM's.

## Build Notes

The GLE build system uses the GNU automake/autoconf tools. These tools should allow GLE to build cleanly on virtually all computing platforms.

To build the library, simply type `configure` at the command line to set things up for your CPU & operating system. Then run `make` to compile. Finally, `cd` to the `examples` directory, and run the shell script `rundemo` to launch each of the demos in order (from most basic, to advanced).

You may find the following `configure` flags useful:

`--enable-lenient-tess`
  If you have a tesselator that is happy with anything, including degenerate points, collinear segments, etc. then define this. Otherwise, don't specify this flag. Setting this flag provides a minor performance improvement. I believe that the stock SGI tesselator is "lenient", despite explicit disclaimers in the documentation. (circa 1995). Early versions of the MesaGL tesselator are not at all forgiving of degenerate points. This resulted in frequent crashes and/or hangs. (circa 1997-2000). Recent versions (as of 2001) seem to work fine. If you have an old version of MesaGL, do not set `--enable-lenient-tess`

`--disable-auto-texture`
  Disable texture mapping code. Disabling texture mapping may provide a very minor performance improvement.

`--enable-irisgl`
  Compile for old IrisGL/GL-3.2 API. This used to work, but hasn't been tested in a long time.

`--enable-debug`
  Will compile sources so printf routines will be called instead of OpenGL routines. Warning: this will generate a *lot* of output!

If you have difficulties... here are some notes:

IBM AIX, SGI Irix, HP and DEC Systems
  There are no known compile or run time problems. If you have difficulty making on these systems, make sure that OpenGL and GLUT are present. (Note: the new automake/autoconf build process has *not* been tested on these systems.)

Linux Systems
  Older MesaGL tesselator was prone to hangs and crashes. Recent (2001) versions seem to do just fine. There are currently no other known compile or runtime problems.

Windows NT/2000 and Windows 95/98
  GLE will compile & run on these Microsoft systems under several different development environments. The subdirectory `ms-visual-c` contains project files. The README contains additional information.

Macintosh OS version 9
  GLE has been reported to compile & run on this Apple operating system using the CodeWarrier development environment, once some 'standard' modifications are made. (??)

GL and OpenGL Libraries
  The tubing and extrusion library can be compiled for GL 3.2 or for OpenGL. By default, the Makefile are configured for OpenGL. (Warning: the library has NOT been run on GL 3.2 in years, and so might be broken in minor ways. With tweaking, though it should work.)

Obtaining the GL, OpenGL and GLUT libraries
  OpenGL is available on most UNIX(R) workstations, as well as OS/2(R) and Windows NT. Contact your workstation vendor for more information or visit the OpenGL Web Site (See also SGI's OpenGL site). GLE also works with Mesa, a public-domain OpenGL-like API. Mesa can be found at http://www.mesa3d.org/

  The demos require that the GLUT windowing and utility library be installed. GLUT can be obtained at http://reality.sgi.com/opengl/glut3/

GLUT Libraries
  The demos require the GLUT library and headers to be installed.

Compile time warnings
  You may see some compile time warnings. Ignore these. These occur because not all compilers correctly handle doubly-index subscripts, and so the code does some funny business to get around this. To the best of my knowledge, the code still executes correctly despite these warnings. Note, however, that my efforts to eliminate these warning may result in code that old compilers will not be able to compile, or will compile but not execute correctly.

  (In my humble opinion, the way in which the C/C++ language handles doubly, triply, etc. subscripted arrays is fundamentally broken. The syntax is not self-consistent. Many important constructs are undefined by ANSI-C (and C++). In the good old days, when most compilers were broken in this area anyway, you could happily work around this with single-index arrays and fancy address calculation. Now that compilers have been fixed, and, thanks to C++, strict-type-checking is all the rage, the fundamental short-comings of C/C++ in this area start becoming horribly apparent. To put it another way, I agonized over how subscripting should be handled, and what, if any new types needed to be introduced. Sadly, I was unable to design code that compiled on most compilers, AND not introduce new types, AND avoid strict-typechecking warning messages. Sadly, the result is a horrible mess. )

Last updated: Linas Vepstas July 2001