--- /dev/null
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Author" content="John F. Fay">
+ <meta name="GENERATOR" content="Mozilla/4.77 [en] (Windows NT 5.0; U) [Netscape]">
+ <title>FREEGLUT Application Program Interface</title>
+</head>
+<body>
+
+<dl>
+<center>
+<h1>
+The Open-Source</h1></center>
+
+<center>
+<h1>
+OpenGL Utility Toolkit</h1></center>
+
+<center>
+<h1>
+(freeglut)</h1></center>
+
+<center>
+<h1>
+Application Programming Interface</h1></center>
+</dl>
+
+<center>
+<h1>
+Version 4.0</h1></center>
+
+<center>
+<h2>
+The freeglut Programming Consortium</h2></center>
+
+<center>
+<h2>
+November, 2002</h2></center>
+
+<p><br>OpenGL is a trademark of Silicon Graphics, Inc. X Window System
+is a trademark of X Consortium, Inc. Spaceball is a registered trademark
+of Spatial Systems Inc.
+<br>The authors have taken care in preparation of this documentation but
+make no expressed or implied warranty of any kind and assumes no responsibility
+for errors or omissions. No liability is assumed for incidental or consequential
+damages in connection with or arising from the use of information or programs
+contained herein.
+<br>
+<h1>
+1.0 <a NAME="Contents"></a>Contents</h1>
+1.0 <a href="#Contents">Contents</a>
+<p>2.0 <a href="#Introduction">Introduction</a>
+<p>3.0 <a href="#Background">Background</a>
+<blockquote>3.1 Design Philosophy
+<br>3.2 Conventions
+<br>3.3 Terminology
+<br>3.4 Differences from GLUT 3.7</blockquote>
+
+<p><br>4.0 <a href="#Initialization">Initialization Functions</a>
+<blockquote>4.1 glutInit
+<br>4.2 glutInitWindowPosition, glutInitWindowSize
+<br>4.3 glutInitDisplayMode
+<br>4.4 glutInitDisplayString</blockquote>
+
+<p><br>5.0 <a href="#EventProcessing">Event Processing Functions</a>
+<blockquote>5.1 glutMainLoop
+<br>5.2 glutMainLoopEvent
+<br>5.3 glutLeaveMainLoop</blockquote>
+
+<p><br>6.0 <a href="#Window">Window Functions</a>
+<blockquote>6.1 glutCreateWindow
+<br>6.2 glutCreateSubwindow
+<br>6.3 glutDestroyWindow
+<br>6.4 glutSetWindow, glutGetWindow
+<br>6.5 glutSetWindowTitle, glutSetIconTitle
+<br>6.6 glutReshapeWindow
+<br>6.7 glutPositionWindow
+<br>6.8 glutShowWindow, glutHideWindow, glutIconifyWindow
+<br>6.9 glutPushWindow, glutPopWindow
+<br>6.10 glutFullScreen</blockquote>
+
+<p><br>7.0 <a href="#Display">Display Functions</a>
+<blockquote>7.1 glutPostRedisplay
+<br>7.2 glutPostWindowRedisplay
+<br>7.3 glutSwapBuffers</blockquote>
+
+<p><br>8.0 <a href="#MouseCursor">Mouse Cursor Functions</a>
+<blockquote>8.1 glutSetCursor
+<br>8.2 glutWarpPointer</blockquote>
+
+<p><br>9.0 <a href="#Overlay">Overlay Functions</a>
+<blockquote>9.1 glutEstablishOverlay
+<br>9.2 glutRemoveOverlay
+<br>9.3 glutUseLayer
+<br>9.4 glutPostOverlayRedisplay
+<br>9.5 glutPostWindowOverlayRedisplay
+<br>9.6 glutShowOverlay, glutHideOverlay</blockquote>
+
+<p><br>10.0 <a href="#Menu">Menu Functions</a>
+<blockquote>10.1 glutCreateMenu
+<br>10.2 glutDestroyMenu
+<br>10.3 glutGetMenu, glutSetMenu
+<br>10.4 glutAddMenuEntry
+<br>10.5 glutAddSubMenu
+<br>10.6 glutChangeToMenuEntry
+<br>10.7 glutChangeToSubMenu
+<br>10.8 glutRemoveMenuItem
+<br>10.9 glutAttachMenu, glutDetachMenu</blockquote>
+
+<p><br>11.0 <a href="#GlobalCallback">Global Callback Registration
+Functions</a>
+<blockquote>11.1 glutTimerFunc
+<br>11.2 glutIdleFunc</blockquote>
+
+<p><br>12.0 <a href="#WindowCallback">Window-Specific Callback Registration
+Functions</a>
+<blockquote>12.1 glutDisplayFunc
+<br>12.2 glutOverlayDisplayFunc
+<br>12.3 glutReshapeFunc
+<br>12.4 glutCloseFunc
+<br>12.5 glutKeyboardFunc
+<br>12.6 glutSpecialFunc
+<br>12.7 glutKeyboardUpFunc
+<br>12.8 glutSpecialUpFunc
+<br>12.9 glutMouseFunc
+<br>12.10 glutMotionFunc, glutPassiveMotionFunc
+<br>12.11 glutVisibilityFunc
+<br>12.12 glutEntryFunc
+<br>12.13 glutJoystickFunc
+<br>12.14 glutSpaceballMotionFunc
+<br>12.15 glutSpaceballRotateFunc
+<br>12.16 glutSpaceballButtonFunc
+<br>12.17 glutButtonBoxFunc
+<br>12.18 glutDialsFunc
+<br>12.19 glutTabletMotionFunc
+<br>12.20 glutTabletButtonFunc
+<p>12.21 glutMenuStatusFunc
+<br>12.22 glutWindowStatusFunc</blockquote>
+
+<p><br>13.0 <a href="#StateSetting">State Setting and Retrieval Functions</a>
+<blockquote>13.1 glutSetOption
+<br>13.2 glutGet
+<br>13.3 glutDeviceGet
+<br>13.4 glutGetModifiers
+<br>13.5 glutLayerGet
+<br>13.6 glutExtensionSupported</blockquote>
+
+<p><br>14.0 <a href="#FontRendering">Font Rendering Functions</a>
+<blockquote>14.1 glutBitmapCharacter
+<br>14.2 glutBitmapString
+<br>14.3 glutBitmapWidth
+<br>14.4 glutBitmapLength
+<br>14.5 glutBitmapHeight
+<br>14.6 glutStrokeCharacter
+<br>14.7 glutStrokeString
+<br>14.8 glutStrokeWidth
+<br>14.9 glutStrokeLength
+<br>14.10 glutStrokeHeight</blockquote>
+
+<p><br>15.0 <a href="#GeometricObject">Geometric Object Rendering
+Functions</a>
+<blockquote>15.1 glutWireSphere, glutSolidSphere
+<br>15.2 glutWireTorus, glutSolidTorus
+<br>15.3 glutWireCone, glutSolidCone
+<br>15.4 glutWireCube, glutSolidCube
+<br>15.5 glutWireTetrahedron, glutSolidTetrahedron
+<br>15.6 glutWireOctahedron, glutSolidOctahedron
+<br>15.7 glutWireDodecahedron, glutSolidDodecahedron
+<br>15.8 glutWireIcosahedron, glutSolidIcosahedron
+<br>15.9 glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron
+<br>15.10 glutWireTeapot, glutSolidTeapot</blockquote>
+
+<p><br>16.0 <a href="#GameMode">Game Mode Functions</a>
+<blockquote>16.1 glutGameModeString
+<br>16.2 glutEnterGameMode, glutLeaveGameMode
+<br>16.3 glutGameModeGet</blockquote>
+
+<p><br>17.0 <a href="#VideoResize">Video Resize Functions</a>
+<blockquote>17.1 glutVideoResizeGet
+<br>17.2 glutSetupVideoResizing, glutStopVideoResizing
+<br>17.3 glutVideoResize
+<br>17.4 glutVideoPan</blockquote>
+
+<p><br>18.0 <a href="#ColorMap">Color Map Functions</a>
+<blockquote>18.1 glutSetColor, glutGetColor
+<br>18.2 glutCopyColormap</blockquote>
+
+<p><br>19.0 <a href="#Miscellaneous">Miscellaneous Functions</a>
+<blockquote>19.1 glutIgnoreKeyRepeat, glutSetKeyRepeat
+<br>19.2 glutForceJoystickFunc
+<br>19.3 glutReportErrors</blockquote>
+
+<p><br>20.0 <a href="#UsageNotes">Usage Notes</a>
+<p>21.0 <a href="#ImplementationNotes">Implementation Notes</a>
+<p>22.0 <a href="#GLUT_State">GLUT State</a>
+<p>23.0 <a href="#Freeglut.h_Header">"freeglut.h" Header File</a>
+<p>24.0 <a href="#References">References</a>
+<p>25.0 <a href="#Index">Index</a>
+<br>
+<br>
+<h1>
+2.0 <a NAME="Introduction"></a>Introduction</h1>
+
+<h1>
+3.0 <a NAME="Background"></a>Background</h1>
+The OpenGL programming world owes a tremendous debt to Mr. Mark J. Kilgard
+for writing the OpenGL Utility Toolkit, or GLUT. The GLUT library
+of functions allows an application programmer to create, control, and manipulate
+windows independent of what operating system the program is running on.
+By hiding the dependency on the operating system from the application programmer,
+he allowed people to write truly portable OpenGL applications.
+<p> Mr. Kilgard copyrighted his library and gave it a
+rather unusual license. Under his license, people are allowed freely
+to copy and distribute the libraries and the source code, but they are
+not allowed to modify it. For a long time this did not matter because
+the GLUT library worked so well and because Mr. Kilgard was releasing updates
+on a regular basis. But with the passage of time, people started
+wanting some slightly different behaviours in their windowing system.
+When Mr. Kilgard stopped supporting the GLUT library in 1999, having moved
+on to bigger and better things, this started to become a problem.
+<p> In December 1999, Mr. Pawel Olzsta started work on
+an open-source clone of the GLUT library. This open-source clone,
+which does not use any of the GLUT source code, has evolved into the present
+<i>freeglut</i>
+library. This documentation specifies the application program interface
+to the <i>freeglut</i> library.
+<h2>
+3.1 Design Philosophy</h2>
+
+<h2>
+3.2 Conventions</h2>
+
+<h2>
+3.3 Terminology</h2>
+
+<h2>
+3.4 Differences from GLUT 3.7</h2>
+Since the <i>freeglut</i> library was developed in order to update GLUT,
+it is natural that there will be some differences between the two.
+Each function in the API notes any differences between the GLUT and the
+<i>freeglut</i>
+function behaviours. The important ones are summarized here.
+<h3>
+3.4.1 glutMainLoop Behaviour</h3>
+One of the commonest complaints about the GLUT library was that once an
+application called "<tt>glutMainLoop</tt>", it never got control back.
+There was no way for an application to loop in GLUT for a while, possibly
+as a subloop while a specific window was open, and then return to the calling
+function. A new function, "<tt>glutMainLoopEvent</tt>", has been
+added to allow this functionality. Another function, "<tt>glutLeaveMainLoop</tt>",
+has also been added to allow the application to tell freeglut to clean
+up and close down.
+<h3>
+3.4.2 Action on Window Closure</h3>
+Another difficulty with GLUT, especially with multiple-window programs,
+is that if the user clicks on the "x" in the window header the application
+exits immediately. The application programmer can now set an option,
+"<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>", to specify whether execution should
+continue, whether GLUT should return control to the main program, or whether
+GLUT should simply exit (the default).
+<h3>
+3.4.3 String Rendering</h3>
+New functions have been added to render full character strings (including
+carriage returns) rather than rendering one character at a time.
+More functions return the widths of character strings and the font heights,
+in pixels for bitmapped fonts and in OpenGL units for the stroke fonts.
+<h3>
+3.4.4 Geometry Rendering</h3>
+Two functions have been added to render a wireframe and a solid rhombic
+dodecahedron.
+<h1>
+4.0 <a NAME="Initialization"></a>Initialization Functions</h1>
+
+<h2>
+4.1 glutInit</h2>
+
+<h2>
+4.2 glutInitWindowPosition, glutInitWindowSize</h2>
+
+<h2>
+4.3 glutInitDisplayMode</h2>
+
+<h2>
+4.4 glutInitDisplayString</h2>
+
+<h1>
+5.0 <a NAME="EventProcessing"></a>Event Processing Functions</h1>
+After an application has finished initializing its windows and menus, it
+enters an event loop. Within this loop, <i>freeglut</i> polls the
+data entry devices (keyboard, mouse, etc.) and calls the application's
+appropriate callbacks.
+<p>In GLUT, control never returned from the event loop (as invoked by the
+"<tt>glutMainLoop</tt>" function) to the calling function. This prevented
+an application from having re-entrant code, in which GLUT could be invoked
+from within a callback, and it prevented the application from doing any
+post-processing (such as freeing allocated memory) after GLUT had closed
+down. <i>Freeglut</i> allows the application programmer to specify
+more direct control over the event loop by means of two new functions.
+The first, "<tt>glutMainLoopEvent</tt>", processes a single iteration of
+the event loop and allows the application to use a different event loop
+controller or to contain re-entrant code. The second, "<tt>glutLeaveMainLoop</tt>",
+causes the event loop to exit nicely; this is preferable to the application's
+calling "<tt>exit</tt>" from within a GLUT callback.
+<h2>
+5.1 glutMainLoop</h2>
+The "<tt>glutMainLoop</tt>" function enters the event loop.
+<p><b>Usage</b>
+<p><tt>void glutMainLoop ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutMainLoop</tt>" function causes the program to enter
+the window event loop. An application should call this function at
+most once. It will call any application callback functions as required
+to process mouse clicks, mouse motion, key presses, and so on.
+<p><b>Changes From GLUT</b>
+<p>In GLUT, there was absolutely no way for the application programmer
+to have control return from the "<tt>glutMainLoop</tt>" function to the
+calling function. <i>Freeglut</i> allows the programmer to force
+this by setting the "<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option and invoking
+the "<tt>glutLeaveMainLoop</tt>" function from one of the callbacks.
+Stopping the program this way is preferable to simply calling "<tt>exit</tt>"
+from within a callback because this allows <i>freeglut</i> to free allocated
+memory and otherwise clean up after itself. (I know I just said this,
+but I think it is important enough that it bears repeating.)
+<h2>
+5.2 glutMainLoopEvent</h2>
+The "<tt>glutMainLoopEvent</tt>" function processes a single iteration
+in the <i>freeglut</i> event loop.
+<p><b>Usage</b>
+<p><tt>void glutMainLoopEvent ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutMainLoopEvent</tt>" function causes <i>freeglut</i>
+to process one iteration's worth of events in its event loop. This
+allows the application to control its own event loop and still use the
+<i>freeglut</i> windowing system.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+5.3 glutLeaveMainLoop</h2>
+The "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i> to stop
+its event loop.
+<p><b>Usage</b>
+<p><tt>void glutLeaveMainLoop ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i>
+to stop the event loop. If the "<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>"
+option has been set to "<tt>GLUT_ACTION_CONTINUE_EXECUTION</tt>", control
+will return to the function which called "<tt>glutMainLoop</tt>"; otherwise
+the application will exit.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h1>
+6.0 <a NAME="Window"></a>Window Functions</h1>
+
+<h2>
+6.1 glutCreateWindow</h2>
+
+<h2>
+6.2 glutCreateSubwindow</h2>
+
+<h2>
+6.3 glutDestroyWindow</h2>
+
+<h2>
+6.4 glutSetWindow, glutGetWindow</h2>
+
+<h2>
+6.5 glutSetWindowTitle, glutSetIconTitle</h2>
+
+<h2>
+6.6 glutReshapeWindow</h2>
+
+<h2>
+6.7 glutPositionWindow</h2>
+
+<h2>
+6.8 glutShowWindow, glutHideWindow, glutIconifyWindow</h2>
+
+<h2>
+6.9 glutPushWindow, glutPopWindow</h2>
+
+<h2>
+6.10 glutFullScreen</h2>
+
+<h1>
+7.0 <a NAME="Display"></a>Display Functions</h1>
+
+<h2>
+7.1 glutPostRedisplay</h2>
+
+<h2>
+7.2 glutPostWindowRedisplay</h2>
+
+<h2>
+7.3 glutSwapBuffers</h2>
+
+<h1>
+8.0 <a NAME="MouseCursor"></a>Mouse Cursor Functions</h1>
+
+<h2>
+8.1 glutSetCursor</h2>
+
+<h2>
+8.2 glutWarpPointer</h2>
+
+<h1>
+9.0 <a NAME="Overlay"></a>Overlay Functions</h1>
+
+<h2>
+9.1 glutEstablishOverlay</h2>
+
+<h2>
+9.2 glutRemoveOverlay</h2>
+
+<h2>
+9.3 glutUseLayer</h2>
+
+<h2>
+9.4 glutPostOverlayRedisplay</h2>
+
+<h2>
+9.5 glutPostWindowOverlayRedisplay</h2>
+
+<h2>
+9.6 glutShowOverlay, glutHideOverlay</h2>
+
+<h1>
+10.0 <a NAME="Menu"></a>Menu Functions</h1>
+
+<h2>
+10.1 glutCreateMenu</h2>
+
+<h2>
+10.2 glutDestroyMenu</h2>
+
+<h2>
+10.3 glutGetMenu, glutSetMenu</h2>
+
+<h2>
+10.4 glutAddMenuEntry</h2>
+
+<h2>
+10.5 glutAddSubMenu</h2>
+
+<h2>
+10.6 glutChangeToMenuEntry</h2>
+
+<h2>
+10.7 glutChangeToSubMenu</h2>
+
+<h2>
+10.8 glutRemoveMenuItem</h2>
+
+<h2>
+10.9 glutAttachMenu, glutDetachMenu</h2>
+
+<h1>
+11.0 <a NAME="GlobalCallback"></a>Global Callback Registration Functions</h1>
+
+<h2>
+11.1 glutTimerFunc</h2>
+
+<h2>
+11.2 glutIdleFunc</h2>
+The "<tt>glutIdleFunc</tt>" function sets the global idle callback. <i>Freeglut</i>
+calls the idle callback when there are no inputs from the user.
+<p><b>Usage</b>
+<p><tt>void glutIdleFunc ( void (*func) ( void ) ) ;</tt>
+<p><tt>func </tt>The new global idle callback function
+<p><b>Description</b>
+<p>The "<tt>glutIdleFunc</tt>" function specifies the function that
+<i>freeglut</i>
+will call to perform background processing tasks such as continuous animation
+when window system events are not being received. If enabled, this
+function is called continuously from <i>freeglut</i> while no events are
+received. The callback function has no parameters and returns no
+value. <i>Freeglut</i> does not change the <i>current window</i>
+or the <i>current menu</i> before invoking the idle callback; programs
+with multiple windows or menus must explicitly set the <i>current window</i>
+and <i>current menu</i> and not rely on its current setting.
+<br> The amount of computation and rendering done in
+an idle callback should be minimized to avoid affecting the program's interactive
+response. In general, no more than a single frame of rendering should
+be done in a single invocation of an idle callback.
+<br> Calling "<tt>glutIdleFunc</tt>" with a NULL argument
+disables the call to an idle callback.
+<p><b>Changes From GLUT</b>
+<p>Application programmers should note that if they have specified the
+"continue execution" action on window closure, <i>freeglut</i> will continue
+to call the idle callback after the user has closed a window by clicking
+on the "x" in the window header bar. If the idle callback renders
+a particular window (this is considered bad form but is frequently done
+anyway), the programmer should supply a window closure callback for that
+window which changes or disables the idle callback.
+<h1>
+12.0 <a NAME="WindowCallback"></a>Window-Specific Callback Registration
+Functions</h1>
+
+<h2>
+12.1 glutDisplayFunc</h2>
+
+<h2>
+12.2 glutOverlayDisplayFunc</h2>
+
+<h2>
+12.3 glutReshapeFunc</h2>
+
+<h2>
+12.4 glutCloseFunc</h2>
+
+<h2>
+12.5 glutKeyboardFunc</h2>
+
+<h2>
+12.6 glutSpecialFunc</h2>
+
+<h2>
+12.7 glutKeyboardUpFunc</h2>
+
+<h2>
+12.8 glutSpecialUpFunc</h2>
+
+<h2>
+12.9 glutMouseFunc</h2>
+
+<h2>
+12.10 glutMotionFunc, glutPassiveMotionFunc</h2>
+
+<h2>
+12.11 glutVisibilityFunc</h2>
+
+<h2>
+12.12 glutEntryFunc</h2>
+
+<h2>
+12.13 glutJoystickFunc</h2>
+
+<h2>
+12.14 glutSpaceballMotionFunc</h2>
+
+<h2>
+12.15 glutSpaceballRotateFunc</h2>
+
+<h2>
+12.16 glutSpaceballButtonFunc</h2>
+
+<h2>
+12.17 glutButtonBoxFunc</h2>
+
+<h2>
+12.18 glutDialsFunc</h2>
+
+<h2>
+12.19 glutTabletMotionFunc</h2>
+
+<h2>
+12.20 glutTabletButtonFunc</h2>
+
+<h2>
+12.21 glutMenuStatusFunc</h2>
+
+<h2>
+12.22 glutWindowStatusFunc</h2>
+
+<h1>
+13.0 <a NAME="StateSetting"></a>State Setting and Retrieval Functions</h1>
+
+<h2>
+13.1 glutSetOption</h2>
+
+<h2>
+13.2 glutGet</h2>
+
+<h2>
+13.3 glutDeviceGet</h2>
+
+<h2>
+13.4 glutGetModifiers</h2>
+
+<h2>
+13.5 glutLayerGet</h2>
+
+<h2>
+13.6 glutExtensionSupported</h2>
+
+<h1>
+14.0 <a NAME="FontRendering"></a>Font Rendering Functions</h1>
+<i>Freeglut</i> supports two types of font rendering: bitmap fonts,
+which are rendered using the "<tt>glBitmap</tt>" function call, and stroke
+fonts, which are rendered as sequences of OpenGL line segments. Because
+they are rendered as bitmaps, the bitmap fonts tend to render more quickly
+than stroke fonts, but they are less flexible in terms of scaling and rendering.
+Bitmap font characters are positioned with calls to the "<tt>glRasterPos*</tt>"
+functions while stroke font characters use the OpenGL transformations to
+position characters.
+<p> It should be noted that <i>freeglut</i> fonts are
+similar but not identical to GLUT fonts. At the moment, <i>freeglut</i>
+fonts do not support the "`" (backquote) and "|" (vertical line) characters;
+in their place it renders asterisks.
+<p> <i>Freeglut</i> supports the following bitmap fonts:
+<ul>
+<li>
+<tt>GLUT_BITMAP_8_BY_13</tt> - A variable-width font with every character
+fitting in a rectangle of 13 pixels high by at most 8 pixels wide.</li>
+
+<li>
+<tt>GLUT_BITMAP_9_BY_15</tt> - A variable-width font with every character
+fitting in a rectangle of 15 pixels high by at most 9 pixels wide.</li>
+
+<li>
+<tt>GLUT_BITMAP_TIMES_ROMAN_10</tt> - A 10-point variable-width Times Roman
+font.</li>
+
+<li>
+<tt>GLUT_BITMAP_TIMES_ROMAN_24</tt> - A 24-point variable-width Times Roman
+font.</li>
+
+<li>
+<tt>GLUT_BITMAP_HELVETICA_10</tt> - A 10-point variable-width Helvetica
+font.</li>
+
+<li>
+<tt>GLUT_BITMAP_HELVETICA_12</tt> - A 12-point variable-width Helvetica
+font.</li>
+
+<li>
+<tt>GLUT_BITMAP_HELVETICA_18</tt> - A 18-point variable-width Helvetica
+font.</li>
+</ul>
+<i>Freeglut</i> calls "<tt>glRasterPos4v</tt>" to advance the cursor by
+the width of a character and to render carriage returns when appropriate.
+It does not use any display lists in it rendering in bitmap fonts.
+<p> <i>Freeglut</i> supports the following stroke fonts:
+<ul>
+<li>
+<tt>GLUT_STROKE_ROMAN</tt> - A proportionally-spaced Roman Simplex font</li>
+
+<li>
+<tt>GLUT_STROKE_MONO_ROMAN</tt> - A fixed-width Roman Simplex font</li>
+</ul>
+<i>Freeglut</i> does not use any display lists in its rendering of stroke
+fonts. It calls "<tt>glTranslatef</tt>" to advance the cursor by
+the width of a character and to render carriage returns when appropriate.
+<h2>
+14.1 glutBitmapCharacter</h2>
+The "<tt>glutBitmapCharacter</tt>" function renders a single bitmapped
+character in the <i>current window</i> using the specified font.
+<p><b>Usage</b>
+<p><tt>void glutBitmapCharacter ( void *font, int character ) ;</tt>
+<p><tt>font </tt>The bitmapped
+font to use in rendering the character
+<br><tt>character </tt>The ASCII code of the character to be
+rendered
+<p><b>Description</b>
+<p>The "<tt>glutBitmapCharacter</tt>" function renders the given
+character in the specified bitmap font. <i>Freeglut</i> automatically
+sets the necessary pixel unpack storage modes and restores the existing
+modes when it has finished. Before the first call to "<tt>glutBitMapCharacter</tt>"
+the application program should call "<tt>glRasterPos*</tt>" to set the
+position of the character in the window. The "<tt>glutBitmapCharacter</tt>"
+function advances the cursor position as part of its call to "<tt>glBitmap</tt>"
+and so the application does not need to call "<tt>glRasterPos*</tt>" again
+for successive characters on the same line.
+<p><b>Changes From GLUT</b>
+<p>Nonexistent characters are rendered as asterisks. The rendering
+position in <i>freeglut</i> is apparently off from GLUT's position by a
+few pixels vertically and one or two pixels horizontally.
+<h2>
+14.2 glutBitmapString</h2>
+The "<tt>glutBitmapString</tt>" function renders a string of bitmapped
+characters in the <i>current window</i> using the specified font.
+<p><b>Usage</b>
+<p><tt>void glutBitmapString ( void *font, char *string ) ;</tt>
+<p><tt>font </tt>The bitmapped font to use
+in rendering the character string
+<br><tt>string </tt>String of characters to be rendered
+<p><b>Description</b>
+<p>The "<tt>glutBitmapString</tt>" function renders the given character
+string in the specified bitmap font. <i>Freeglut</i> automatically
+sets the necessary pixel unpack storage modes and restores the existing
+modes when it has finished. Before calling "<tt>glutBitMapString</tt>"
+the application program should call "<tt>glRasterPos*</tt>" to set the
+position of the string in the window. The "<tt>glutBitmapString</tt>"
+function handles carriage returns. Nonexistent characters are rendered
+as asterisks.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.3 glutBitmapWidth</h2>
+The "<tt>glutBitmapWidth</tt>" function returns the width in pixels of
+a single bitmapped character in the specified font.
+<p><b>Usage</b>
+<p><tt>int glutBitmapWidth ( void *font, int character ) ;</tt>
+<p><tt>font </tt>The bitmapped
+font to use in calculating the character width
+<br><tt>character </tt>The ASCII code of the character
+<p><b>Description</b>
+<p>The "<tt>glutBitmapWidth</tt>" function returns the width of the
+given character in the specified bitmap font. Because the font is
+bitmapped, the width is an exact integer.
+<p><b>Changes From GLUT</b>
+<p>Nonexistent characters return the width of an asterisk.
+<h2>
+14.4 glutBitmapLength</h2>
+The "<tt>glutBitmapLength</tt>" function returns the width in pixels of
+a string of bitmapped characters in the specified font.
+<p><b>Usage</b>
+<p><tt>int glutBitmapLength ( void *font, char *string ) ;</tt>
+<p><tt>font </tt>The bitmapped font to use in calculating
+the character width
+<br><tt>string </tt>String of characters whose width is to be calculated
+<p><b>Description</b>
+<p>The "<tt>glutBitmapLength</tt>" function returns the width in
+pixels of the given character string in the specified bitmap font.
+Because the font is bitmapped, the width is an exact integer: the
+return value is identical to the sum of the character widths returned by
+a series of calls to "<tt>glutBitmapWidth</tt>". The width of nonexistent
+characters is counted to be the width of an asterisk.
+<p> If the string contains one or more carriage returns,
+<i>freeglut</i>
+calculates the widths in pixels of the lines separately and returns the
+largest width.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.5 glutBitmapHeight</h2>
+The "<tt>glutBitmapHeight</tt>" function returns the height in pixels of
+the specified font.
+<p><b>Usage</b>
+<p><tt>int glutBitmapHeight ( void *font ) ;</tt>
+<p><tt>font </tt>The bitmapped
+font to use in calculating the character height
+<p><b>Description</b>
+<p>The "<tt>glutBitmapHeight</tt>" function returns the height of
+a character in the specified bitmap font. Because the font is bitmapped,
+the height is an exact integer. The fonts are designed such that
+all characters have (nominally) the same height.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.6 glutStrokeCharacter</h2>
+The "<tt>glutStrokeCharacter</tt>" function renders a single stroke character
+in the <i>current window</i> using the specified font.
+<p><b>Usage</b>
+<p><tt>void glutStrokeCharacter ( void *font, int character ) ;</tt>
+<p><tt>font </tt>The stroke font
+to use in rendering the character
+<br><tt>character </tt>The ASCII code of the character to be
+rendered
+<p><b>Description</b>
+<p>The "<tt>glutStrokeCharacter</tt>" function renders the given
+character in the specified stroke font. Before the first call to
+"<tt>glutStrokeCharacter</tt>" the application program should call the
+OpenGL transformation (positioning and scaling) functions to set the position
+of the character in the window. The "<tt>glutStrokeCharacter</tt>"
+function advances the cursor position by a call to "<tt>glTranslatef</tt>"
+and so the application does not need to call the OpenGL positioning functions
+again for successive characters on the same line.
+<p><b>Changes From GLUT</b>
+<p>Nonexistent characters are rendered as asterisks.
+<h2>
+14.7 glutStrokeString</h2>
+The "<tt>glutStrokeString</tt>" function renders a string of characters
+in the <i>current window</i> using the specified stroke font.
+<p><b>Usage</b>
+<p><tt>void glutStrokeString ( void *font, char *string ) ;</tt>
+<p><tt>font </tt>The stroke font to use in
+rendering the character string
+<br><tt>string </tt>String of characters to be rendered
+<p><b>Description</b>
+<p>The "<tt>glutStrokeString</tt>" function renders the given character
+string in the specified stroke font. Before calling "<tt>glutStrokeString</tt>"
+the application program should call the OpenGL transformation (positioning
+and scaling) functions to set the position of the string in the window.
+The "<tt>glutStrokeString</tt>" function handles carriage returns.
+Nonexistent characters are rendered as asterisks.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.8 glutStrokeWidth</h2>
+The "<tt>glutStrokeWidth</tt>" function returns the width in pixels of
+a single character in the specified stroke font.
+<p><b>Usage</b>
+<p><tt>int glutStrokeWidth ( void *font, int character ) ;</tt>
+<p><tt>font </tt>The stroke font
+to use in calculating the character width
+<br><tt>character </tt>The ASCII code of the character
+<p><b>Description</b>
+<p>The "<tt>glutStrokeWidth</tt>" function returns the width of the
+given character in the specified stroke font. Because the font is
+a stroke font, the width is actually a floating-point number; the function
+rounds it to the nearest integer for the return value.
+<p><b>Changes From GLUT</b>
+<p>Nonexistent characters return the width of an asterisk.
+<h2>
+14.9 glutStrokeLength</h2>
+The "<tt>glutStrokeLength</tt>" function returns the width in pixels of
+a string of characters in the specified stroke font.
+<p><b>Usage</b>
+<p><tt>int glutStrokeLength ( void *font, char *string ) ;</tt>
+<p><tt>font </tt>The stroke font to use in calculating
+the character width
+<br><tt>string </tt>String of characters whose width is to be calculated
+<p><b>Description</b>
+<p>The "<tt>glutStrokeLength</tt>" function returns the width in
+pixels of the given character string in the specified stroke font.
+Because the font is a stroke font, the width of an individual character
+is a floating-point number. <i>Freeglut</i> adds the floating-point
+widths and rounds the funal result to return the integer value. Thus
+the return value may differ from the sum of the character widths returned
+by a series of calls to "<tt>glutStrokeWidth</tt>". The width of
+nonexistent characters is counted to be the width of an asterisk.
+<p> If the string contains one or more carriage returns,
+<i>freeglut</i>
+calculates the widths in pixels of the lines separately and returns the
+largest width.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.10 glutStrokeHeight</h2>
+The "<tt>glutStrokeHeight</tt>" function returns the height in pixels of
+the specified font.
+<p><b>Usage</b>
+<p><tt>GLfloat glutStrokeHeight ( void *font ) ;</tt>
+<p><tt>font </tt>The stroke font
+to use in calculating the character height
+<p><b>Description</b>
+<p>The "<tt>glutStrokeHeight</tt>" function returns the height of
+a character in the specified stroke font. The application programmer
+should note that, unlike the other <i>freeglut</i> font functions, this
+one returns a floating-point number. The fonts are designed such
+that all characters have (nominally) the same height.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h1>
+15.0 <a NAME="GeometricObject"></a>Geometric Object Rendering Functions</h1>
+<i>Freeglut</i> includes eighteen routines for generating easily-recognizable
+3-d geometric objects. These routines are effectively the same ones
+that are included in the GLUT library, and reflect the functionality available
+in the <i>aux</i> toolkit described in the <i>OpenGL Programmer's Guide</i>.
+They are included to allow programmers to create with a single line of
+code a three-dimensional object which can be used to test a variety of
+OpenGL functionality. None of the routines generates a display list
+for the object which it draws. The functions generate normals appropriate
+for lighting but, except for the teapon functions, do not generate texture
+coordinates.
+<h2>
+15.1 glutWireSphere, glutSolidSphere</h2>
+The "<tt>glutWireSphere</tt>" and "<tt>glutSolidSphere</tt>" functions
+draw a wireframe and solid sphere respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireSphere ( GLdouble dRadius, GLint slices, GLint stacks
+) ;</tt>
+<p><tt>void glutSolidSphere ( GLdouble dRadius, GLint slices, GLint stacks
+) ;</tt>
+<p><tt>dRadius </tt>The desired radius
+of the sphere
+<p><tt>slices </tt>The desired
+number of slices (divisions in the longitudinal direction) in the sphere
+<p><tt>stacks </tt>The desired
+number of stacks (divisions in the latitudinal direction) in the sphere.
+The number of points in this direction, including the north and south poles,
+is <tt>stacks+1</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireSphere</tt>" and "<tt>glutSolidSphere</tt>" functions
+render a sphere centered at the origin of the modeling coordinate system.
+The north and south poles of the sphere are on the positive and negative
+Z-axes respectively and the prime meridian crosses the positive X-axis.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.2 glutWireTorus, glutSolidTorus</h2>
+The "<tt>glutWireTorus</tt>" and "<tt>glutSolidTorus</tt>" functions draw
+a wireframe and solid torus (donut shape) respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireTorus ( GLdouble dInnerRadius, GLdouble dOuterRadius,
+GLint nSides, GLint nRings ) ;</tt>
+<p><tt>void glutSolidTorus ( GLdouble dInnerRadius, GLdouble dOuterRadius,
+GLint nSides, GLint nRings ) ;</tt>
+<p><tt>dInnerRadius </tt>The
+desired inner radius of the torus, from the origin to the circle defining
+the centers of the outer circles
+<p><tt>dOuterRadius </tt>The
+desired outer radius of the torus, from the center of the outer circle
+to the actual surface of the torus
+<p><tt>nSides </tt>The desired
+number of segments in a single outer circle of the torus
+<p><tt>nRings </tt>The desired
+number of outer circles around the origin of the torus
+<p><b>Description</b>
+<p>The "<tt>glutWireTorus</tt>" and "<tt>glutSolidTorus</tt>" functions
+render a torus centered at the origin of the modeling coordinate system.
+The torus is circularly symmetric about the Z-axis and starts at the positive
+X-axis.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.3 glutWireCone, glutSolidCone</h2>
+The "<tt>glutWireCone</tt>" and "<tt>glutSolidCone</tt>" functions draw
+a wireframe and solid cone respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireCone ( GLdouble base, GLdouble height, GLint slices,
+GLint stacks ) ;</tt>
+<p><tt>void glutSolidCone ( GLdouble base, GLdouble height, GLint slices,
+GLint stacks ) ;</tt>
+<p><tt>base </tt>The
+desired radius of the base of the cone
+<p><tt>height </tt>The desired
+height of the cone
+<p><tt>slices </tt>The desired
+number of slices around the base of the cone
+<p><tt>stacks </tt>The desired
+number of segments between the base and the tip of the cone (the number
+of points, including the tip, is <tt>stacks + 1</tt>)
+<p><b>Description</b>
+<p>The "<tt>glutWireCone</tt>" and "<tt>glutSolidCone</tt>" functions render
+a right circular cone with a base centered at the origin and in the X-Y
+plane and its tip on the positive Z-axis. The wire cone is rendered
+with triangular elements.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.4 glutWireCube, glutSolidCube</h2>
+The "<tt>glutWireCube</tt>" and "<tt>glutSolidCube</tt>" functions draw
+a wireframe and solid cube respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireCube ( GLdouble dSize ) ;</tt>
+<p><tt>void glutSolidCube ( GLdouble dSize ) ;</tt>
+<p><tt>dSize </tt>The desired
+length of an edge of the cube
+<p><b>Description</b>
+<p>The "<tt>glutWireCube</tt>" and "<tt>glutSolidCube</tt>" functions render
+a cube of the desired size, centered at the origin. Its faces are
+normal to the coordinate directions.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.5 glutWireTetrahedron, glutSolidTetrahedron</h2>
+The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
+functions draw a wireframe and solid tetrahedron (four-sided Platonic solid)
+respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireTetrahedron ( void ) ;</tt>
+<p><tt>void glutSolidTetrahedron ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
+functions render a tetrahedron whose corners are each a distance of one
+from the origin. The length of each side is 2/3 sqrt(6). One
+corner is on the positive X-axis and another is in the X-Y plane with a
+positive Y-coordinate.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.6 glutWireOctahedron, glutSolidOctahedron</h2>
+The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>" functions
+draw a wireframe and solid octahedron (eight-sided Platonic solid) respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireOctahedron ( void ) ;</tt>
+<p><tt>void glutSolidOctahedron ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>"
+functions render an octahedron whose corners are each a distance of one
+from the origin. The length of each side is sqrt(2). The corners
+are on the positive and negative coordinate axes.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.7 glutWireDodecahedron, glutSolidDodecahedron</h2>
+The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>"
+functions draw a wireframe and solid dodecahedron (twelve-sided Platonic
+solid) respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireDodecahedron ( void ) ;</tt>
+<p><tt>void glutSolidDodecahedron ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>"
+functions render a dodecahedron whose corners are each a distance of sqrt(3)
+from the origin. The length of each side is sqrt(5)-1. There
+are twenty corners; interestingly enough, eight of them coincide with the
+corners of a cube with sizes of length 2.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.8 glutWireIcosahedron, glutSolidIcosahedron</h2>
+The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
+functions draw a wireframe and solid icosahedron (twenty-sided Platonic
+solid) respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireIcosahedron ( void ) ;</tt>
+<p><tt>void glutSolidIcosahedron ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
+functions render an icosahedron whose corners are each a unit distance
+from the origin. The length of each side is slightly greater than
+one. Two of the corners lie on the positive and negative X-axes.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.7 glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron</h2>
+The "<tt>glutWireRhombicDodecahedron</tt>" and "<tt>glutSolidRhombicDodecahedron</tt>"
+functions draw a wireframe and solid rhombic dodecahedron (twelve-sided
+semi-regular solid) respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireRhombicDodecahedron ( void ) ;</tt>
+<p><tt>void glutSolidRhombicDodecahedron ( void ) ;</tt>
+<p><b>Description</b>
+<p>The "<tt>glutWireRhombicDodecahedron</tt>" and "<tt>glutSolidRhombicDodecahedron</tt>"
+functions render a rhombic dodecahedron whose corners are at most a distance
+of one from the origin. The rhombic dodecahedron has faces which
+are identical rhombuses (rhombi?) but which have some vertices at which
+three faces meet and some vertices at which four faces meet. The
+length of each side is sqrt(3)/2. Vertices at which four faces meet
+are found at (0, 0, <u>+</u>1) and (<u>+</u>sqrt(2)/2, <u>+</u>sqrt(2)/2,
+0).
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include these functions.
+<h2>
+15.10 glutWireTeapot, glutSolidTeapot</h2>
+The "<tt>glutWireTeapot</tt>" and "<tt>glutSolidTeapot</tt>" functions
+draw a wireframe and solid teapot respectively.
+<p><b>Usage</b>
+<p><tt>void glutWireTeapot ( GLdouble dSize ) ;</tt>
+<p><tt>void glutSolidTeapot ( GLdouble dSize ) ;</tt>
+<p><tt>dSize </tt>The desired
+size of the teapot
+<p><b>Description</b>
+<p>The "<tt>glutWireTeapot</tt>" and "<tt>glutSolidTeapot</tt>" functions
+render a teapot of the desired size, centered at the origin. This
+is the famous OpenGL teapot [add reference].
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h1>
+16.0 <a NAME="GameMode"></a>Game Mode Functions</h1>
+
+<h2>
+16.1 glutGameModeString</h2>
+
+<h2>
+16.2 glutEnterGameMode, glutLeaveGameMode</h2>
+
+<h2>
+16.3 glutGameModeGet</h2>
+
+<h1>
+17.0 <a NAME="VideoResize"></a>Video Resize Functions</h1>
+
+<h2>
+17.1 glutVideoResizeGet</h2>
+
+<h2>
+17.2 glutSetupVideoResizing, glutStopVideoResizing</h2>
+
+<h2>
+17.3 glutVideoResize</h2>
+
+<h2>
+17.4 glutVideoPan</h2>
+
+<h1>
+18.0 <a NAME="ColorMap"></a>Color Map Functions</h1>
+
+<h2>
+18.1 glutSetColor, glutGetColor</h2>
+
+<h2>
+18.2 glutCopyColormap</h2>
+
+<h1>
+19.0 <a NAME="Miscellaneous"></a>Miscellaneous Functions</h1>
+
+<h2>
+19.1 glutIgnoreKeyRepeat, glutSetKeyRepeat</h2>
+
+<h2>
+19.2 glutForceJoystickFunc</h2>
+
+<h2>
+19.3 glutReportErrors</h2>
+
+<h1>
+20.0 <a NAME="UsageNotes"></a>Usage Notes</h1>
+
+<h1>
+21.0 <a NAME="ImplementationNotes"></a>Implementation Notes</h1>
+
+<h1>
+22.0 <a NAME="GLUT_State"></a>GLUT State</h1>
+
+<h1>
+23.0 <a NAME="Freeglut.h_Header"></a>"freeglut.h" Header File</h1>
+
+<h1>
+24.0 <a NAME="References"></a>References</h1>
+
+<h1>
+25.0 <a NAME="Index"></a>Index</h1>
+
+<p>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+</body>
+</html>