Added on behalf of John Fay.
authorDon Heyse <dheyse@hotmail.com>
Tue, 26 Nov 2002 19:56:55 +0000 (19:56 +0000)
committerDon Heyse <dheyse@hotmail.com>
Tue, 26 Nov 2002 19:56:55 +0000 (19:56 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@29 7f0cb862-5218-0410-a997-914c9d46530a

doc/freeglut_user_interface.html [new file with mode: 0644]

diff --git a/doc/freeglut_user_interface.html b/doc/freeglut_user_interface.html
new file mode 100644 (file)
index 0000000..c57a4ce
--- /dev/null
@@ -0,0 +1,1116 @@
+<!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.&nbsp; 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>&nbsp;
+<h1>
+1.0&nbsp;<a NAME="Contents"></a>Contents</h1>
+1.0&nbsp; <a href="#Contents">Contents</a>
+<p>2.0&nbsp; <a href="#Introduction">Introduction</a>
+<p>3.0&nbsp; <a href="#Background">Background</a>
+<blockquote>3.1&nbsp; Design Philosophy
+<br>3.2&nbsp; Conventions
+<br>3.3&nbsp; Terminology
+<br>3.4&nbsp; Differences from GLUT 3.7</blockquote>
+
+<p><br>4.0&nbsp; <a href="#Initialization">Initialization Functions</a>
+<blockquote>4.1&nbsp; glutInit
+<br>4.2&nbsp; glutInitWindowPosition, glutInitWindowSize
+<br>4.3&nbsp; glutInitDisplayMode
+<br>4.4&nbsp; glutInitDisplayString</blockquote>
+
+<p><br>5.0&nbsp; <a href="#EventProcessing">Event Processing Functions</a>
+<blockquote>5.1&nbsp; glutMainLoop
+<br>5.2&nbsp; glutMainLoopEvent
+<br>5.3&nbsp; glutLeaveMainLoop</blockquote>
+
+<p><br>6.0&nbsp; <a href="#Window">Window Functions</a>
+<blockquote>6.1&nbsp; glutCreateWindow
+<br>6.2&nbsp; glutCreateSubwindow
+<br>6.3&nbsp; glutDestroyWindow
+<br>6.4&nbsp; glutSetWindow, glutGetWindow
+<br>6.5&nbsp; glutSetWindowTitle, glutSetIconTitle
+<br>6.6&nbsp; glutReshapeWindow
+<br>6.7&nbsp; glutPositionWindow
+<br>6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow
+<br>6.9&nbsp; glutPushWindow, glutPopWindow
+<br>6.10&nbsp; glutFullScreen</blockquote>
+
+<p><br>7.0&nbsp; <a href="#Display">Display Functions</a>
+<blockquote>7.1&nbsp; glutPostRedisplay
+<br>7.2&nbsp; glutPostWindowRedisplay
+<br>7.3&nbsp; glutSwapBuffers</blockquote>
+
+<p><br>8.0&nbsp; <a href="#MouseCursor">Mouse Cursor Functions</a>
+<blockquote>8.1&nbsp; glutSetCursor
+<br>8.2&nbsp; glutWarpPointer</blockquote>
+
+<p><br>9.0&nbsp; <a href="#Overlay">Overlay Functions</a>
+<blockquote>9.1&nbsp; glutEstablishOverlay
+<br>9.2&nbsp; glutRemoveOverlay
+<br>9.3&nbsp; glutUseLayer
+<br>9.4&nbsp; glutPostOverlayRedisplay
+<br>9.5&nbsp; glutPostWindowOverlayRedisplay
+<br>9.6&nbsp; glutShowOverlay, glutHideOverlay</blockquote>
+
+<p><br>10.0&nbsp; <a href="#Menu">Menu Functions</a>
+<blockquote>10.1&nbsp; glutCreateMenu
+<br>10.2&nbsp; glutDestroyMenu
+<br>10.3&nbsp; glutGetMenu, glutSetMenu
+<br>10.4&nbsp; glutAddMenuEntry
+<br>10.5&nbsp; glutAddSubMenu
+<br>10.6&nbsp; glutChangeToMenuEntry
+<br>10.7&nbsp; glutChangeToSubMenu
+<br>10.8&nbsp; glutRemoveMenuItem
+<br>10.9&nbsp; glutAttachMenu, glutDetachMenu</blockquote>
+
+<p><br>11.0&nbsp; <a href="#GlobalCallback">Global Callback Registration
+Functions</a>
+<blockquote>11.1&nbsp; glutTimerFunc
+<br>11.2&nbsp; glutIdleFunc</blockquote>
+
+<p><br>12.0&nbsp; <a href="#WindowCallback">Window-Specific Callback Registration
+Functions</a>
+<blockquote>12.1&nbsp; glutDisplayFunc
+<br>12.2&nbsp; glutOverlayDisplayFunc
+<br>12.3&nbsp; glutReshapeFunc
+<br>12.4&nbsp; glutCloseFunc
+<br>12.5&nbsp; glutKeyboardFunc
+<br>12.6&nbsp; glutSpecialFunc
+<br>12.7&nbsp; glutKeyboardUpFunc
+<br>12.8&nbsp; glutSpecialUpFunc
+<br>12.9&nbsp; glutMouseFunc
+<br>12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc
+<br>12.11&nbsp; glutVisibilityFunc
+<br>12.12&nbsp; glutEntryFunc
+<br>12.13&nbsp; glutJoystickFunc
+<br>12.14&nbsp; glutSpaceballMotionFunc
+<br>12.15&nbsp; glutSpaceballRotateFunc
+<br>12.16&nbsp; glutSpaceballButtonFunc
+<br>12.17&nbsp; glutButtonBoxFunc
+<br>12.18&nbsp; glutDialsFunc
+<br>12.19&nbsp; glutTabletMotionFunc
+<br>12.20&nbsp; glutTabletButtonFunc
+<p>12.21&nbsp; glutMenuStatusFunc
+<br>12.22&nbsp; glutWindowStatusFunc</blockquote>
+
+<p><br>13.0&nbsp; <a href="#StateSetting">State Setting and Retrieval Functions</a>
+<blockquote>13.1&nbsp; glutSetOption
+<br>13.2&nbsp; glutGet
+<br>13.3&nbsp; glutDeviceGet
+<br>13.4&nbsp; glutGetModifiers
+<br>13.5&nbsp; glutLayerGet
+<br>13.6&nbsp; glutExtensionSupported</blockquote>
+
+<p><br>14.0&nbsp; <a href="#FontRendering">Font Rendering Functions</a>
+<blockquote>14.1&nbsp; glutBitmapCharacter
+<br>14.2&nbsp; glutBitmapString
+<br>14.3&nbsp; glutBitmapWidth
+<br>14.4&nbsp; glutBitmapLength
+<br>14.5&nbsp; glutBitmapHeight
+<br>14.6&nbsp; glutStrokeCharacter
+<br>14.7&nbsp; glutStrokeString
+<br>14.8&nbsp; glutStrokeWidth
+<br>14.9&nbsp; glutStrokeLength
+<br>14.10&nbsp; glutStrokeHeight</blockquote>
+
+<p><br>15.0&nbsp; <a href="#GeometricObject">Geometric Object Rendering
+Functions</a>
+<blockquote>15.1&nbsp; glutWireSphere, glutSolidSphere
+<br>15.2&nbsp; glutWireTorus, glutSolidTorus
+<br>15.3&nbsp; glutWireCone, glutSolidCone
+<br>15.4&nbsp; glutWireCube, glutSolidCube
+<br>15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron
+<br>15.6&nbsp; glutWireOctahedron, glutSolidOctahedron
+<br>15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron
+<br>15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron
+<br>15.9&nbsp; glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron
+<br>15.10&nbsp; glutWireTeapot, glutSolidTeapot</blockquote>
+
+<p><br>16.0&nbsp; <a href="#GameMode">Game Mode Functions</a>
+<blockquote>16.1&nbsp; glutGameModeString
+<br>16.2&nbsp; glutEnterGameMode, glutLeaveGameMode
+<br>16.3&nbsp; glutGameModeGet</blockquote>
+
+<p><br>17.0&nbsp; <a href="#VideoResize">Video Resize Functions</a>
+<blockquote>17.1&nbsp; glutVideoResizeGet
+<br>17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing
+<br>17.3&nbsp; glutVideoResize
+<br>17.4&nbsp; glutVideoPan</blockquote>
+
+<p><br>18.0&nbsp; <a href="#ColorMap">Color Map Functions</a>
+<blockquote>18.1&nbsp; glutSetColor, glutGetColor
+<br>18.2&nbsp; glutCopyColormap</blockquote>
+
+<p><br>19.0&nbsp; <a href="#Miscellaneous">Miscellaneous Functions</a>
+<blockquote>19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat
+<br>19.2&nbsp; glutForceJoystickFunc
+<br>19.3&nbsp; glutReportErrors</blockquote>
+
+<p><br>20.0&nbsp; <a href="#UsageNotes">Usage Notes</a>
+<p>21.0&nbsp; <a href="#ImplementationNotes">Implementation Notes</a>
+<p>22.0&nbsp; <a href="#GLUT_State">GLUT State</a>
+<p>23.0&nbsp; <a href="#Freeglut.h_Header">"freeglut.h" Header File</a>
+<p>24.0&nbsp; <a href="#References">References</a>
+<p>25.0&nbsp; <a href="#Index">Index</a>
+<br>&nbsp;
+<br>&nbsp;
+<h1>
+2.0&nbsp;<a NAME="Introduction"></a>Introduction</h1>
+&nbsp;
+<h1>
+3.0&nbsp;<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.&nbsp; 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.&nbsp;
+By hiding the dependency on the operating system from the application programmer,
+he allowed people to write truly portable OpenGL applications.
+<p>&nbsp;&nbsp;&nbsp; Mr. Kilgard copyrighted his library and gave it a
+rather unusual license.&nbsp; 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.&nbsp; 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.&nbsp; But with the passage of time, people started
+wanting some slightly different behaviours in their windowing system.&nbsp;
+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>&nbsp;&nbsp;&nbsp; In December 1999, Mr. Pawel Olzsta started work on
+an open-source clone of the GLUT library.&nbsp; This open-source clone,
+which does not use any of the GLUT source code, has evolved into the present
+<i>freeglut</i>
+library.&nbsp; This documentation specifies the application program interface
+to the <i>freeglut</i> library.
+<h2>
+3.1&nbsp; Design Philosophy</h2>
+
+<h2>
+3.2&nbsp; Conventions</h2>
+
+<h2>
+3.3&nbsp; Terminology</h2>
+
+<h2>
+3.4&nbsp; 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.&nbsp;
+Each function in the API notes any differences between the GLUT and the
+<i>freeglut</i>
+function behaviours.&nbsp; The important ones are summarized here.
+<h3>
+3.4.1&nbsp; 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.&nbsp;
+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.&nbsp; A new function, "<tt>glutMainLoopEvent</tt>", has been
+added to allow this functionality.&nbsp; 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&nbsp; 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.&nbsp; 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&nbsp; String Rendering</h3>
+New functions have been added to render full character strings (including
+carriage returns) rather than rendering one character at a time.&nbsp;
+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&nbsp; Geometry Rendering</h3>
+Two functions have been added to render a wireframe and a solid rhombic
+dodecahedron.
+<h1>
+4.0&nbsp;<a NAME="Initialization"></a>Initialization Functions</h1>
+
+<h2>
+4.1&nbsp; glutInit</h2>
+
+<h2>
+4.2&nbsp; glutInitWindowPosition, glutInitWindowSize</h2>
+
+<h2>
+4.3&nbsp; glutInitDisplayMode</h2>
+
+<h2>
+4.4&nbsp; glutInitDisplayString</h2>
+
+<h1>
+5.0&nbsp;<a NAME="EventProcessing"></a>Event Processing Functions</h1>
+After an application has finished initializing its windows and menus, it
+enters an event loop.&nbsp; 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.&nbsp; 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.&nbsp; <i>Freeglut</i> allows the application programmer to specify
+more direct control over the event loop by means of two new functions.&nbsp;
+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.&nbsp; 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&nbsp; 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&nbsp; "<tt>glutMainLoop</tt>" function causes the program to enter
+the window event loop.&nbsp; An application should call this function at
+most once.&nbsp; 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.&nbsp; <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.&nbsp;
+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.&nbsp; (I know I just said this,
+but I think it is important enough that it bears repeating.)
+<h2>
+5.2&nbsp; 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&nbsp; "<tt>glutMainLoopEvent</tt>" function causes <i>freeglut</i>
+to process one iteration's worth of events in its event loop.&nbsp; 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&nbsp; 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&nbsp; "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i>
+to stop the event loop.&nbsp; 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&nbsp;<a NAME="Window"></a>Window Functions</h1>
+
+<h2>
+6.1&nbsp; glutCreateWindow</h2>
+
+<h2>
+6.2&nbsp; glutCreateSubwindow</h2>
+
+<h2>
+6.3&nbsp; glutDestroyWindow</h2>
+
+<h2>
+6.4&nbsp; glutSetWindow, glutGetWindow</h2>
+
+<h2>
+6.5&nbsp; glutSetWindowTitle, glutSetIconTitle</h2>
+
+<h2>
+6.6&nbsp; glutReshapeWindow</h2>
+
+<h2>
+6.7&nbsp; glutPositionWindow</h2>
+
+<h2>
+6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow</h2>
+
+<h2>
+6.9&nbsp; glutPushWindow, glutPopWindow</h2>
+
+<h2>
+6.10&nbsp; glutFullScreen</h2>
+
+<h1>
+7.0&nbsp;<a NAME="Display"></a>Display Functions</h1>
+
+<h2>
+7.1&nbsp; glutPostRedisplay</h2>
+
+<h2>
+7.2&nbsp; glutPostWindowRedisplay</h2>
+
+<h2>
+7.3&nbsp; glutSwapBuffers</h2>
+
+<h1>
+8.0&nbsp;<a NAME="MouseCursor"></a>Mouse Cursor Functions</h1>
+
+<h2>
+8.1&nbsp; glutSetCursor</h2>
+
+<h2>
+8.2&nbsp; glutWarpPointer</h2>
+
+<h1>
+9.0&nbsp;<a NAME="Overlay"></a>Overlay Functions</h1>
+
+<h2>
+9.1&nbsp; glutEstablishOverlay</h2>
+
+<h2>
+9.2&nbsp; glutRemoveOverlay</h2>
+
+<h2>
+9.3&nbsp; glutUseLayer</h2>
+
+<h2>
+9.4&nbsp; glutPostOverlayRedisplay</h2>
+
+<h2>
+9.5&nbsp; glutPostWindowOverlayRedisplay</h2>
+
+<h2>
+9.6&nbsp; glutShowOverlay, glutHideOverlay</h2>
+
+<h1>
+10.0&nbsp;<a NAME="Menu"></a>Menu Functions</h1>
+
+<h2>
+10.1&nbsp; glutCreateMenu</h2>
+
+<h2>
+10.2&nbsp; glutDestroyMenu</h2>
+
+<h2>
+10.3&nbsp; glutGetMenu, glutSetMenu</h2>
+
+<h2>
+10.4&nbsp; glutAddMenuEntry</h2>
+
+<h2>
+10.5&nbsp; glutAddSubMenu</h2>
+
+<h2>
+10.6&nbsp; glutChangeToMenuEntry</h2>
+
+<h2>
+10.7&nbsp; glutChangeToSubMenu</h2>
+
+<h2>
+10.8&nbsp; glutRemoveMenuItem</h2>
+
+<h2>
+10.9&nbsp; glutAttachMenu, glutDetachMenu</h2>
+
+<h1>
+11.0&nbsp;<a NAME="GlobalCallback"></a>Global Callback Registration Functions</h1>
+
+<h2>
+11.1&nbsp; glutTimerFunc</h2>
+
+<h2>
+11.2&nbsp; 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&nbsp;&nbsp;&nbsp; </tt>The new global idle callback function
+<p><b>Description</b>
+<p>The&nbsp; "<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.&nbsp; If enabled, this
+function is called continuously from <i>freeglut</i> while no events are
+received.&nbsp; The callback function has no parameters and returns no
+value.&nbsp; <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>&nbsp;&nbsp;&nbsp; The amount of computation and rendering done in
+an idle callback should be minimized to avoid affecting the program's interactive
+response.&nbsp; In general, no more than a single frame of rendering should
+be done in a single invocation of an idle callback.
+<br>&nbsp;&nbsp;&nbsp; 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.&nbsp; 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&nbsp;<a NAME="WindowCallback"></a>Window-Specific Callback Registration
+Functions</h1>
+
+<h2>
+12.1&nbsp; glutDisplayFunc</h2>
+
+<h2>
+12.2&nbsp; glutOverlayDisplayFunc</h2>
+
+<h2>
+12.3&nbsp; glutReshapeFunc</h2>
+
+<h2>
+12.4&nbsp; glutCloseFunc</h2>
+
+<h2>
+12.5&nbsp; glutKeyboardFunc</h2>
+
+<h2>
+12.6&nbsp; glutSpecialFunc</h2>
+
+<h2>
+12.7&nbsp; glutKeyboardUpFunc</h2>
+
+<h2>
+12.8&nbsp; glutSpecialUpFunc</h2>
+
+<h2>
+12.9&nbsp; glutMouseFunc</h2>
+
+<h2>
+12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc</h2>
+
+<h2>
+12.11&nbsp; glutVisibilityFunc</h2>
+
+<h2>
+12.12&nbsp; glutEntryFunc</h2>
+
+<h2>
+12.13&nbsp; glutJoystickFunc</h2>
+
+<h2>
+12.14&nbsp; glutSpaceballMotionFunc</h2>
+
+<h2>
+12.15&nbsp; glutSpaceballRotateFunc</h2>
+
+<h2>
+12.16&nbsp; glutSpaceballButtonFunc</h2>
+
+<h2>
+12.17&nbsp; glutButtonBoxFunc</h2>
+
+<h2>
+12.18&nbsp; glutDialsFunc</h2>
+
+<h2>
+12.19&nbsp; glutTabletMotionFunc</h2>
+
+<h2>
+12.20&nbsp; glutTabletButtonFunc</h2>
+
+<h2>
+12.21&nbsp; glutMenuStatusFunc</h2>
+
+<h2>
+12.22&nbsp; glutWindowStatusFunc</h2>
+
+<h1>
+13.0&nbsp;<a NAME="StateSetting"></a>State Setting and Retrieval Functions</h1>
+
+<h2>
+13.1&nbsp; glutSetOption</h2>
+
+<h2>
+13.2&nbsp; glutGet</h2>
+
+<h2>
+13.3&nbsp; glutDeviceGet</h2>
+
+<h2>
+13.4&nbsp; glutGetModifiers</h2>
+
+<h2>
+13.5&nbsp; glutLayerGet</h2>
+
+<h2>
+13.6&nbsp; glutExtensionSupported</h2>
+
+<h1>
+14.0&nbsp;<a NAME="FontRendering"></a>Font Rendering Functions</h1>
+<i>Freeglut</i> supports two types of font rendering:&nbsp; bitmap fonts,
+which are rendered using the "<tt>glBitmap</tt>" function call, and stroke
+fonts, which are rendered as sequences of OpenGL line segments.&nbsp; 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.&nbsp;
+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>&nbsp;&nbsp;&nbsp; It should be noted that <i>freeglut</i> fonts are
+similar but not identical to GLUT fonts.&nbsp; At the moment, <i>freeglut</i>
+fonts do not support the "`" (backquote) and "|" (vertical line) characters;
+in their place it renders asterisks.
+<p>&nbsp;&nbsp;&nbsp; <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.&nbsp;
+It does not use any display lists in it rendering in bitmap fonts.
+<p>&nbsp;&nbsp;&nbsp; <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.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
+font to use in rendering the character
+<br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character to be
+rendered
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutBitmapCharacter</tt>" function renders the given
+character in the specified bitmap font.&nbsp; <i>Freeglut</i> automatically
+sets the necessary pixel unpack storage modes and restores the existing
+modes when it has finished.&nbsp; 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.&nbsp; 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.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped font to use
+in rendering the character string
+<br><tt>string&nbsp;&nbsp;&nbsp; </tt>String of characters to be rendered
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutBitmapString</tt>" function renders the given character
+string in the specified bitmap font.&nbsp; <i>Freeglut</i> automatically
+sets the necessary pixel unpack storage modes and restores the existing
+modes when it has finished.&nbsp; Before calling "<tt>glutBitMapString</tt>"
+the application program should call "<tt>glRasterPos*</tt>" to set the
+position of the string in the window.&nbsp; The "<tt>glutBitmapString</tt>"
+function handles carriage returns.&nbsp; Nonexistent characters are rendered
+as asterisks.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.3&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
+font to use in calculating the character width
+<br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutBitmapWidth</tt>" function returns the width of the
+given character in the specified bitmap font.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp; </tt>The bitmapped font to use in calculating
+the character width
+<br><tt>string&nbsp; </tt>String of characters whose width is to be calculated
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutBitmapLength</tt>" function returns the width in
+pixels of the given character string in the specified bitmap font.&nbsp;
+Because the font is bitmapped, the width is an exact integer:&nbsp; the
+return value is identical to the sum of the character widths returned by
+a series of calls to "<tt>glutBitmapWidth</tt>".&nbsp; The width of nonexistent
+characters is counted to be the width of an asterisk.
+<p>&nbsp;&nbsp;&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
+font to use in calculating the character height
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutBitmapHeight</tt>" function returns the height of
+a character in the specified bitmap font.&nbsp; Because the font is bitmapped,
+the height is an exact integer.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
+to use in rendering the character
+<br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character to be
+rendered
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutStrokeCharacter</tt>" function renders the given
+character in the specified stroke font.&nbsp; 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.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font to use in
+rendering the character string
+<br><tt>string&nbsp;&nbsp;&nbsp; </tt>String of characters to be rendered
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutStrokeString</tt>" function renders the given character
+string in the specified stroke font.&nbsp; 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.&nbsp;
+The "<tt>glutStrokeString</tt>" function handles carriage returns.&nbsp;
+Nonexistent characters are rendered as asterisks.
+<p><b>Changes From GLUT</b>
+<p>GLUT does not include this function.
+<h2>
+14.8&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
+to use in calculating the character width
+<br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutStrokeWidth</tt>" function returns the width of the
+given character in the specified stroke font.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp; </tt>The stroke font to use in calculating
+the character width
+<br><tt>string&nbsp; </tt>String of characters whose width is to be calculated
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutStrokeLength</tt>" function returns the width in
+pixels of the given character string in the specified stroke font.&nbsp;
+Because the font is a stroke font, the width of an individual character
+is a floating-point number.&nbsp; <i>Freeglut</i> adds the floating-point
+widths and rounds the funal result to return the integer value.&nbsp; Thus
+the return value may differ from the sum of the character widths returned
+by a series of calls to "<tt>glutStrokeWidth</tt>".&nbsp; The width of
+nonexistent characters is counted to be the width of an asterisk.
+<p>&nbsp;&nbsp;&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
+to use in calculating the character height
+<p><b>Description</b>
+<p>The&nbsp; "<tt>glutStrokeHeight</tt>" function returns the height of
+a character in the specified stroke font.&nbsp; The application programmer
+should note that, unlike the other <i>freeglut</i> font functions, this
+one returns a floating-point number.&nbsp; 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&nbsp;<a NAME="GeometricObject"></a>Geometric Object Rendering Functions</h1>
+<i>Freeglut</i> includes eighteen routines for generating easily-recognizable
+3-d geometric objects.&nbsp; 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>.&nbsp;
+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.&nbsp; None of the routines generates a display list
+for the object which it draws.&nbsp; The functions generate normals appropriate
+for lighting but, except for the teapon functions, do not generate texture
+coordinates.
+<h2>
+15.1&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired radius
+of the sphere
+<p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
+number of slices (divisions in the longitudinal direction) in the sphere
+<p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
+number of stacks (divisions in the latitudinal direction) in the sphere.&nbsp;
+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.&nbsp;
+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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
+desired inner radius of the torus, from the origin to the circle defining
+the centers of the outer circles
+<p><tt>dOuterRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
+number of segments in a single outer circle of the torus
+<p><tt>nRings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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.&nbsp;
+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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
+desired radius of the base of the cone
+<p><tt>height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
+height of the cone
+<p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
+number of slices around the base of the cone
+<p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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.&nbsp; The wire cone is rendered
+with triangular elements.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.4&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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.&nbsp; Its faces are
+normal to the coordinate directions.
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h2>
+15.5&nbsp; 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.&nbsp; The length of each side is 2/3 sqrt(6).&nbsp; 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&nbsp; 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.&nbsp; The length of each side is sqrt(2).&nbsp; 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&nbsp; 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.&nbsp; The length of each side is sqrt(5)-1.&nbsp; 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&nbsp; 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.&nbsp; The length of each side is slightly greater than
+one.&nbsp; 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&nbsp; 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.&nbsp; 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.&nbsp; The
+length of each side is sqrt(3)/2.&nbsp; 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&nbsp; 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </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.&nbsp; This
+is the famous OpenGL teapot [add reference].
+<p><b>Changes From GLUT</b>
+<p>None that we know of.
+<h1>
+16.0&nbsp;<a NAME="GameMode"></a>Game Mode Functions</h1>
+
+<h2>
+16.1&nbsp; glutGameModeString</h2>
+
+<h2>
+16.2&nbsp; glutEnterGameMode, glutLeaveGameMode</h2>
+
+<h2>
+16.3&nbsp; glutGameModeGet</h2>
+
+<h1>
+17.0&nbsp;<a NAME="VideoResize"></a>Video Resize Functions</h1>
+
+<h2>
+17.1&nbsp; glutVideoResizeGet</h2>
+
+<h2>
+17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing</h2>
+
+<h2>
+17.3&nbsp; glutVideoResize</h2>
+
+<h2>
+17.4&nbsp; glutVideoPan</h2>
+
+<h1>
+18.0&nbsp;<a NAME="ColorMap"></a>Color Map Functions</h1>
+
+<h2>
+18.1&nbsp; glutSetColor, glutGetColor</h2>
+
+<h2>
+18.2&nbsp; glutCopyColormap</h2>
+
+<h1>
+19.0&nbsp;<a NAME="Miscellaneous"></a>Miscellaneous Functions</h1>
+
+<h2>
+19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat</h2>
+
+<h2>
+19.2&nbsp; glutForceJoystickFunc</h2>
+
+<h2>
+19.3&nbsp; glutReportErrors</h2>
+
+<h1>
+20.0&nbsp;<a NAME="UsageNotes"></a>Usage Notes</h1>
+
+<h1>
+21.0&nbsp;<a NAME="ImplementationNotes"></a>Implementation Notes</h1>
+
+<h1>
+22.0&nbsp;<a NAME="GLUT_State"></a>GLUT State</h1>
+
+<h1>
+23.0&nbsp;<a NAME="Freeglut.h_Header"></a>"freeglut.h" Header File</h1>
+
+<h1>
+24.0&nbsp;<a NAME="References"></a>References</h1>
+
+<h1>
+25.0&nbsp;<a NAME="Index"></a>Index</h1>
+&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+</body>
+</html>