John Documented InitWindowPosition extensions and added some kbd fn info.
[freeglut] / doc / freeglut_user_interface.html
1 <!doctype html public "-//w3c//dtd html 4.0 transitional//en">
2 <html>
3 <head>
4    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5    <meta name="Author" content="John F. Fay">
6    <meta name="GENERATOR" content="Mozilla/4.77 [en] (Windows NT 5.0; U) [Netscape]">
7    <title>FREEGLUT Application Program Interface</title>
8 </head>
9 <body>
10
11 <dl>
12 <center>
13 <h1>
14 The Open-Source</h1></center>
15
16 <center>
17 <h1>
18 OpenGL Utility Toolkit</h1></center>
19
20 <center>
21 <h1>
22 (freeglut)</h1></center>
23
24 <center>
25 <h1>
26 Application Programming Interface</h1></center>
27 </dl>
28
29 <center>
30 <h1>
31 Version 4.0</h1></center>
32
33 <center>
34 <h2>
35 The freeglut Programming Consortium</h2></center>
36
37 <center>
38 <h2>
39 November, 2002</h2></center>
40
41 <p><br>OpenGL is a trademark of Silicon Graphics, Inc. X Window System
42 is a trademark of X Consortium, Inc.&nbsp; Spaceball is a registered trademark
43 of Spatial Systems Inc.
44 <br>The authors have taken care in preparation of this documentation but
45 make no expressed or implied warranty of any kind and assumes no responsibility
46 for errors or omissions. No liability is assumed for incidental or consequential
47 damages in connection with or arising from the use of information or programs
48 contained herein.
49 <br>&nbsp;
50 <h1>
51 1.0&nbsp;<a NAME="Contents"></a> Contents</h1>
52 1.0&nbsp; <a href="#Contents">Contents</a>
53 <p>2.0&nbsp; <a href="#Introduction">Introduction</a>
54 <p>3.0&nbsp; <a href="#Background">Background</a>
55 <blockquote>3.1&nbsp; Design Philosophy
56 <br>3.2&nbsp; Conventions
57 <br>3.3&nbsp; Terminology
58 <br>3.4&nbsp; Differences from GLUT 3.7</blockquote>
59
60 <p><br>4.0&nbsp; <a href="#Initialization">Initialization Functions</a>
61 <blockquote>4.1&nbsp; glutInit
62 <br>4.2&nbsp; glutInitWindowPosition, glutInitWindowSize
63 <br>4.3&nbsp; glutInitDisplayMode
64 <br>4.4&nbsp; glutInitDisplayString</blockquote>
65
66 <p><br>5.0&nbsp; <a href="#EventProcessing">Event Processing Functions</a>
67 <blockquote>5.1&nbsp; glutMainLoop
68 <br>5.2&nbsp; glutMainLoopEvent
69 <br>5.3&nbsp; glutLeaveMainLoop</blockquote>
70
71 <p><br>6.0&nbsp; <a href="#Window">Window Functions</a>
72 <blockquote>6.1&nbsp; glutCreateWindow
73 <br>6.2&nbsp; glutCreateSubwindow
74 <br>6.3&nbsp; glutDestroyWindow
75 <br>6.4&nbsp; glutSetWindow, glutGetWindow
76 <br>6.5&nbsp; glutSetWindowTitle, glutSetIconTitle
77 <br>6.6&nbsp; glutReshapeWindow
78 <br>6.7&nbsp; glutPositionWindow
79 <br>6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow
80 <br>6.9&nbsp; glutPushWindow, glutPopWindow
81 <br>6.10&nbsp; glutFullScreen</blockquote>
82
83 <p><br>7.0&nbsp; <a href="#Display">Display Functions</a>
84 <blockquote>7.1&nbsp; glutPostRedisplay
85 <br>7.2&nbsp; glutPostWindowRedisplay
86 <br>7.3&nbsp; glutSwapBuffers</blockquote>
87
88 <p><br>8.0&nbsp; <a href="#MouseCursor">Mouse Cursor Functions</a>
89 <blockquote>8.1&nbsp; glutSetCursor
90 <br>8.2&nbsp; glutWarpPointer</blockquote>
91
92 <p><br>9.0&nbsp; <a href="#Overlay">Overlay Functions</a>
93 <blockquote>9.1&nbsp; glutEstablishOverlay
94 <br>9.2&nbsp; glutRemoveOverlay
95 <br>9.3&nbsp; glutUseLayer
96 <br>9.4&nbsp; glutPostOverlayRedisplay
97 <br>9.5&nbsp; glutPostWindowOverlayRedisplay
98 <br>9.6&nbsp; glutShowOverlay, glutHideOverlay</blockquote>
99
100 <p><br>10.0&nbsp; <a href="#Menu">Menu Functions</a>
101 <blockquote>10.1&nbsp; glutCreateMenu
102 <br>10.2&nbsp; glutDestroyMenu
103 <br>10.3&nbsp; glutGetMenu, glutSetMenu
104 <br>10.4&nbsp; glutAddMenuEntry
105 <br>10.5&nbsp; glutAddSubMenu
106 <br>10.6&nbsp; glutChangeToMenuEntry
107 <br>10.7&nbsp; glutChangeToSubMenu
108 <br>10.8&nbsp; glutRemoveMenuItem
109 <br>10.9&nbsp; glutAttachMenu, glutDetachMenu</blockquote>
110
111 <p><br>11.0&nbsp; <a href="#GlobalCallback">Global Callback Registration
112 Functions</a>
113 <blockquote>11.1&nbsp; glutTimerFunc
114 <br>11.2&nbsp; glutIdleFunc</blockquote>
115
116 <p><br>12.0&nbsp; <a href="#WindowCallback">Window-Specific Callback Registration
117 Functions</a>
118 <blockquote>12.1&nbsp; glutDisplayFunc
119 <br>12.2&nbsp; glutOverlayDisplayFunc
120 <br>12.3&nbsp; glutReshapeFunc
121 <br>12.4&nbsp; glutCloseFunc
122 <br>12.5&nbsp; glutKeyboardFunc
123 <br>12.6&nbsp; glutSpecialFunc
124 <br>12.7&nbsp; glutKeyboardUpFunc
125 <br>12.8&nbsp; glutSpecialUpFunc
126 <br>12.9&nbsp; glutMouseFunc
127 <br>12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc
128 <br>12.11&nbsp; glutVisibilityFunc
129 <br>12.12&nbsp; glutEntryFunc
130 <br>12.13&nbsp; glutJoystickFunc
131 <br>12.14&nbsp; glutSpaceballMotionFunc
132 <br>12.15&nbsp; glutSpaceballRotateFunc
133 <br>12.16&nbsp; glutSpaceballButtonFunc
134 <br>12.17&nbsp; glutButtonBoxFunc
135 <br>12.18&nbsp; glutDialsFunc
136 <br>12.19&nbsp; glutTabletMotionFunc
137 <br>12.20&nbsp; glutTabletButtonFunc
138 <p>12.21&nbsp; glutMenuStatusFunc
139 <br>12.22&nbsp; glutWindowStatusFunc</blockquote>
140
141 <p><br>13.0&nbsp; <a href="#StateSetting">State Setting and Retrieval Functions</a>
142 <blockquote>13.1&nbsp; glutSetOption
143 <br>13.2&nbsp; glutGet
144 <br>13.3&nbsp; glutDeviceGet
145 <br>13.4&nbsp; glutGetModifiers
146 <br>13.5&nbsp; glutLayerGet
147 <br>13.6&nbsp; glutExtensionSupported</blockquote>
148
149 <p><br>14.0&nbsp; <a href="#FontRendering">Font Rendering Functions</a>
150 <blockquote>14.1&nbsp; glutBitmapCharacter
151 <br>14.2&nbsp; glutBitmapString
152 <br>14.3&nbsp; glutBitmapWidth
153 <br>14.4&nbsp; glutBitmapLength
154 <br>14.5&nbsp; glutBitmapHeight
155 <br>14.6&nbsp; glutStrokeCharacter
156 <br>14.7&nbsp; glutStrokeString
157 <br>14.8&nbsp; glutStrokeWidth
158 <br>14.9&nbsp; glutStrokeLength
159 <br>14.10&nbsp; glutStrokeHeight</blockquote>
160
161 <p><br>15.0&nbsp; <a href="#GeometricObject">Geometric Object Rendering
162 Functions</a>
163 <blockquote>15.1&nbsp; glutWireSphere, glutSolidSphere
164 <br>15.2&nbsp; glutWireTorus, glutSolidTorus
165 <br>15.3&nbsp; glutWireCone, glutSolidCone
166 <br>15.4&nbsp; glutWireCube, glutSolidCube
167 <br>15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron
168 <br>15.6&nbsp; glutWireOctahedron, glutSolidOctahedron
169 <br>15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron
170 <br>15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron
171 <br>15.9&nbsp; glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron
172 <br>15.10&nbsp; glutWireTeapot, glutSolidTeapot</blockquote>
173
174 <p><br>16.0&nbsp; <a href="#GameMode">Game Mode Functions</a>
175 <blockquote>16.1&nbsp; glutGameModeString
176 <br>16.2&nbsp; glutEnterGameMode, glutLeaveGameMode
177 <br>16.3&nbsp; glutGameModeGet</blockquote>
178
179 <p><br>17.0&nbsp; <a href="#VideoResize">Video Resize Functions</a>
180 <blockquote>17.1&nbsp; glutVideoResizeGet
181 <br>17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing
182 <br>17.3&nbsp; glutVideoResize
183 <br>17.4&nbsp; glutVideoPan</blockquote>
184
185 <p><br>18.0&nbsp; <a href="#ColorMap">Color Map Functions</a>
186 <blockquote>18.1&nbsp; glutSetColor, glutGetColor
187 <br>18.2&nbsp; glutCopyColormap</blockquote>
188
189 <p><br>19.0&nbsp; <a href="#Miscellaneous">Miscellaneous Functions</a>
190 <blockquote>19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat
191 <br>19.2&nbsp; glutForceJoystickFunc
192 <br>19.3&nbsp; glutReportErrors</blockquote>
193
194 <p><br>20.0&nbsp; <a href="#UsageNotes">Usage Notes</a>
195 <p>21.0&nbsp; <a href="#ImplementationNotes">Implementation Notes</a>
196 <p>22.0&nbsp; <a href="#GLUT_State">GLUT State</a>
197 <p>23.0&nbsp; <a href="#Freeglut.h_Header">"freeglut.h" Header File</a>
198 <p>24.0&nbsp; <a href="#References">References</a>
199 <p>25.0&nbsp; <a href="#Index">Index</a>
200 <br>&nbsp;
201 <br>&nbsp;
202 <h1>
203 2.0&nbsp;<a NAME="Introduction"></a> Introduction</h1>
204 &nbsp;
205 <h1>
206 3.0&nbsp;<a NAME="Background"></a> Background</h1>
207 The OpenGL programming world owes a tremendous debt to Mr. Mark J. Kilgard
208 for writing the OpenGL Utility Toolkit, or GLUT.&nbsp; The GLUT library
209 of functions allows an application programmer to create, control, and manipulate
210 windows independent of what operating system the program is running on.&nbsp;
211 By hiding the dependency on the operating system from the application programmer,
212 he allowed people to write truly portable OpenGL applications.
213 <p>&nbsp;&nbsp;&nbsp; Mr. Kilgard copyrighted his library and gave it a
214 rather unusual license.&nbsp; Under his license, people are allowed freely
215 to copy and distribute the libraries and the source code, but they are
216 not allowed to modify it.&nbsp; For a long time this did not matter because
217 the GLUT library worked so well and because Mr. Kilgard was releasing updates
218 on a regular basis.&nbsp; But with the passage of time, people started
219 wanting some slightly different behaviours in their windowing system.&nbsp;
220 When Mr. Kilgard stopped supporting the GLUT library in 1999, having moved
221 on to bigger and better things, this started to become a problem.
222 <p>&nbsp;&nbsp;&nbsp; In December 1999, Mr. Pawel Olzsta started work on
223 an open-source clone of the GLUT library.&nbsp; This open-source clone,
224 which does not use any of the GLUT source code, has evolved into the present
225 <i>freeglut</i>
226 library.&nbsp; This documentation specifies the application program interface
227 to the <i>freeglut</i> library.
228 <h2>
229 3.1&nbsp; Design Philosophy</h2>
230
231 <h2>
232 3.2&nbsp; Conventions</h2>
233
234 <h2>
235 3.3&nbsp; Terminology</h2>
236
237 <h2>
238 3.4&nbsp; Differences from GLUT 3.7</h2>
239 Since the <i>freeglut</i> library was developed in order to update GLUT,
240 it is natural that there will be some differences between the two.&nbsp;
241 Each function in the API notes any differences between the GLUT and the
242 <i>freeglut</i>
243 function behaviours.&nbsp; The important ones are summarized here.
244 <h3>
245 3.4.1&nbsp; glutMainLoop Behaviour</h3>
246 One of the commonest complaints about the GLUT library was that once an
247 application called "<tt>glutMainLoop</tt>", it never got control back.&nbsp;
248 There was no way for an application to loop in GLUT for a while, possibly
249 as a subloop while a specific window was open, and then return to the calling
250 function.&nbsp; A new function, "<tt>glutMainLoopEvent</tt>", has been
251 added to allow this functionality.&nbsp; Another function, "<tt>glutLeaveMainLoop</tt>",
252 has also been added to allow the application to tell freeglut to clean
253 up and close down.
254 <h3>
255 3.4.2&nbsp; Action on Window Closure</h3>
256 Another difficulty with GLUT, especially with multiple-window programs,
257 is that if the user clicks on the "x" in the window header the application
258 exits immediately.&nbsp; The application programmer can now set an option,
259 "<tt> GLUT_ACTION_ON_WINDOW_CLOSE</tt>", to specify whether execution should
260 continue, whether GLUT should return control to the main program, or whether
261 GLUT should simply exit (the default).
262 <h3>
263 3.4.3&nbsp; String Rendering</h3>
264 New functions have been added to render full character strings (including
265 carriage returns) rather than rendering one character at a time.&nbsp;
266 More functions return the widths of character strings and the font heights,
267 in pixels for bitmapped fonts and in OpenGL units for the stroke fonts.
268 <h3>
269 3.4.4&nbsp; Geometry Rendering</h3>
270 Two functions have been added to render a wireframe and a solid rhombic
271 dodecahedron.
272 <h1>
273 4.0&nbsp;<a NAME="Initialization"></a> Initialization Functions</h1>
274
275 <h2>
276 4.1&nbsp; glutInit</h2>
277
278 <h2>
279 4.2&nbsp; glutInitWindowPosition, glutInitWindowSize</h2>
280 The "<tt>glutInitWindowPosition</tt> " and "<tt>glutInitWindowSize</tt>"
281 functions specify a desired position and size for windows that <i>freeglut</i>
282 will create in the future.
283 <p><b>Usage</b>
284 <p><tt>void glutInitWindowPosition ( int x, int y ) ;</tt>
285 <br><tt>void glutInitWindowSize ( int width, int height ) ;</tt>
286 <p><b>Description</b>
287 <p>The "<tt>glutInitWindowPosition</tt> " and "<tt>glutInitWindowSize</tt>"
288 functions specify a desired position and size for windows that <i>freeglut</i>
289 will create in the future.&nbsp; The position is measured in pixels from
290 the upper left hand corner of the screen, with "x" increasing to the right
291 and "y" increasing towards the bottom of the screen.&nbsp; The size is
292 measured in pixels.&nbsp; <i>Freeglut</i> does not promise to follow these
293 specifications in creating its windows, it certainly makes an attempt to.
294 <p>The position and size of a window are a matter of some subtlety.&nbsp;
295 Most windows have a usable area surrounded by a border and with a title
296 bar on the top.&nbsp; The border and title bar are commonly called "decorations."&nbsp;
297 The position of the window unfortunately varies with the operating system.&nbsp;
298 On Linux, it is the coordinates of the upper left-hand corner of its decorations.&nbsp;
299 On Windows, it is the coordinates of the upper left hand corner of its
300 usable interior.&nbsp; For both operating systems, the size of the window
301 is the size of the usable interior.
302 <p>Windows has some additional quirks which the application programmer
303 should know about.&nbsp; First, the minimum y-coordinate of a window decoration
304 is zero.&nbsp; (This is a feature of <i>freeglut</i> and can be adjusted
305 if so desired.)&nbsp; Second, there appears to be a minimum window width
306 on Windows which is 104 pixels.&nbsp; The user may specify a smaller width,
307 but the Windows system calls ignore it.&nbsp; It is also impossible to
308 make a window narrower than this by dragging on its corner.
309 <p><b>Changes From GLUT</b>
310 <p>For some reason, GLUT is not affected by the 104-pixel minimum window
311 width.&nbsp; If the user clicks on the corner of a window which is narrower
312 than this amount, the window will immediately snap out to this width, but
313 the application can call "<tt>glutReshapeWindow</tt> " and make a window
314 narrower again.
315 <h2>
316 4.3&nbsp; glutInitDisplayMode</h2>
317
318 <h2>
319 4.4&nbsp; glutInitDisplayString</h2>
320
321 <h1>
322 5.0&nbsp;<a NAME="EventProcessing"></a> Event Processing Functions</h1>
323 After an application has finished initializing its windows and menus, it
324 enters an event loop.&nbsp; Within this loop, <i>freeglut</i> polls the
325 data entry devices (keyboard, mouse, etc.) and calls the application's
326 appropriate callbacks.
327 <p>In GLUT, control never returned from the event loop (as invoked by the
328 "<tt>glutMainLoop</tt>" function) to the calling function.&nbsp; This prevented
329 an application from having re-entrant code, in which GLUT could be invoked
330 from within a callback, and it prevented the application from doing any
331 post-processing (such as freeing allocated memory) after GLUT had closed
332 down.&nbsp; <i>Freeglut</i> allows the application programmer to specify
333 more direct control over the event loop by means of two new functions.&nbsp;
334 The first, "<tt>glutMainLoopEvent</tt>", processes a single iteration of
335 the event loop and allows the application to use a different event loop
336 controller or to contain re-entrant code.&nbsp; The second, "<tt>glutLeaveMainLoop</tt>",
337 causes the event loop to exit nicely; this is preferable to the application's
338 calling "<tt>exit</tt>" from within a GLUT callback.
339 <h2>
340 5.1&nbsp; glutMainLoop</h2>
341 The "<tt>glutMainLoop</tt>" function enters the event loop.
342 <p><b>Usage</b>
343 <p><tt>void glutMainLoop ( void ) ;</tt>
344 <p><b>Description</b>
345 <p>The&nbsp; "<tt>glutMainLoop</tt>" function causes the program to enter
346 the window event loop.&nbsp; An application should call this function at
347 most once.&nbsp; It will call any application callback functions as required
348 to process mouse clicks, mouse motion, key presses, and so on.
349 <p><b>Changes From GLUT</b>
350 <p>In GLUT, there was absolutely no way for the application programmer
351 to have control return from the "<tt>glutMainLoop</tt> " function to the
352 calling function.&nbsp; <i>Freeglut</i> allows the programmer to force
353 this by setting the "<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option and invoking
354 the "<tt>glutLeaveMainLoop</tt>" function from one of the callbacks.&nbsp;
355 Stopping the program this way is preferable to simply calling "<tt>exit</tt>
356 " from within a callback because this allows <i>freeglut</i> to free allocated
357 memory and otherwise clean up after itself.&nbsp; (I know I just said this,
358 but I think it is important enough that it bears repeating.)
359 <h2>
360 5.2&nbsp; glutMainLoopEvent</h2>
361 The "<tt>glutMainLoopEvent</tt>" function processes a single iteration
362 in the <i>freeglut</i> event loop.
363 <p><b>Usage</b>
364 <p><tt>void glutMainLoopEvent ( void ) ;</tt>
365 <p><b>Description</b>
366 <p>The&nbsp; "<tt>glutMainLoopEvent</tt> " function causes <i>freeglut</i>
367 to process one iteration's worth of events in its event loop.&nbsp; This
368 allows the application to control its own event loop and still use the
369 <i>freeglut</i>
370 windowing system.
371 <p><b>Changes From GLUT</b>
372 <p>GLUT does not include this function.
373 <h2>
374 5.3&nbsp; glutLeaveMainLoop</h2>
375 The "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i> to stop
376 its event loop.
377 <p><b>Usage</b>
378 <p><tt>void glutLeaveMainLoop ( void ) ;</tt>
379 <p><b>Description</b>
380 <p>The&nbsp; "<tt>glutLeaveMainLoop</tt> " function causes <i>freeglut</i>
381 to stop the event loop.&nbsp; If the "<tt> GLUT_ACTION_ON_WINDOW_CLOSE</tt>"
382 option has been set to "<tt>GLUT_ACTION_CONTINUE_EXECUTION</tt> ", control
383 will return to the function which called "<tt>glutMainLoop</tt> "; otherwise
384 the application will exit.
385 <p>If the application has two nested calls to "<tt>glutMainLoop</tt>" and
386 calls "<tt>glutLeaveMainLoop</tt>", the behaviour of <i>freeglut</i> is
387 undefined.&nbsp; It may leave only the inner nested loop or it may leave
388 both loops.&nbsp; If the reader has a strong preference for one behaviour
389 over the other he should contact the <i>freeglut</i> Programming Consortium
390 and ask for the code to be fixed.
391 <p><b>Changes From GLUT</b>
392 <p>GLUT does not include this function.
393 <h1>
394 6.0&nbsp;<a NAME="Window"></a> Window Functions</h1>
395
396 <h2>
397 6.1&nbsp; glutCreateWindow</h2>
398
399 <h2>
400 6.2&nbsp; glutCreateSubwindow</h2>
401
402 <h2>
403 6.3&nbsp; glutDestroyWindow</h2>
404
405 <h2>
406 6.4&nbsp; glutSetWindow, glutGetWindow</h2>
407
408 <h2>
409 6.5&nbsp; glutSetWindowTitle, glutSetIconTitle</h2>
410
411 <h2>
412 6.6&nbsp; glutReshapeWindow</h2>
413
414 <h2>
415 6.7&nbsp; glutPositionWindow</h2>
416
417 <h2>
418 6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow</h2>
419
420 <h2>
421 6.9&nbsp; glutPushWindow, glutPopWindow</h2>
422
423 <h2>
424 6.10&nbsp; glutFullScreen</h2>
425
426 <h1>
427 7.0&nbsp;<a NAME="Display"></a> Display Functions</h1>
428
429 <h2>
430 7.1&nbsp; glutPostRedisplay</h2>
431
432 <h2>
433 7.2&nbsp; glutPostWindowRedisplay</h2>
434
435 <h2>
436 7.3&nbsp; glutSwapBuffers</h2>
437
438 <h1>
439 8.0&nbsp;<a NAME="MouseCursor"></a> Mouse Cursor Functions</h1>
440
441 <h2>
442 8.1&nbsp; glutSetCursor</h2>
443
444 <h2>
445 8.2&nbsp; glutWarpPointer</h2>
446
447 <h1>
448 9.0&nbsp;<a NAME="Overlay"></a> Overlay Functions</h1>
449 <i>Freeglut</i> does not allow overlays, although it does "answer the mail"
450 with function stubs so that GLUT-based programs can compile and link against
451 <i>freeglut</i>
452 without modification.&nbsp; If the reader needs overlays, he should contact
453 the <i>freeglut</i> Programming Consortium and ask for them to be implemented.&nbsp;
454 He should also be prepared to assist in the implementation.
455 <h2>
456 9.1&nbsp; glutEstablishOverlay</h2>
457 The "<tt>glutEstablishOverlay</tt>" function is not implemented in <i>freeglut</i>.
458 <p><b>Usage</b>
459 <p><tt>void glutEstablishOverlay ( void ) ;</tt>
460 <p><b>Description</b>
461 <p>The "<tt>glutEstablishOverlay</tt>" function is not implemented in <i>freeglut</i>.
462 <p><b>Changes From GLUT</b>
463 <p>GLUT implements this function.
464 <h2>
465 9.2&nbsp; glutRemoveOverlay</h2>
466 The "<tt>glutRemoveOverlay</tt>" function is not implemented in <i>freeglut</i>.
467 <p><b>Usage</b>
468 <p><tt>void glutRemoveOverlay ( void ) ;</tt>
469 <p><b>Description</b>
470 <p>The "<tt>glutRemoveOverlay</tt>" function is not implemented in <i>freeglut</i>.
471 <p><b>Changes From GLUT</b>
472 <p>GLUT implements this function.
473 <h2>
474 9.3&nbsp; glutUseLayer</h2>
475 The "<tt>glutUseLayer</tt>" function is not implemented in <i>freeglut</i>.
476 <p><b>Usage</b>
477 <p><tt>void glutUseLayer (&nbsp; GLenum layer ) ;</tt>
478 <p><b>Description</b>
479 <p>The "<tt>glutUseLayer</tt>" function is not implemented in <i>freeglut</i>.
480 <p><b>Changes From GLUT</b>
481 <p>GLUT implements this function.
482 <h2>
483 9.4&nbsp; glutPostOverlayRedisplay</h2>
484 The "<tt>glutPostOverlayRedisplay</tt> " function is not implemented in
485 <i>freeglut</i>.
486 <p><b>Usage</b>
487 <p><tt>void glutPostOverlayRedisplay ( void ) ;</tt>
488 <p><b>Description</b>
489 <p>The "<tt>glutPostOverlayRedisplay</tt> " function is not implemented
490 in <i>freeglut</i>.
491 <p><b>Changes From GLUT</b>
492 <p>GLUT implements this function.
493 <h2>
494 9.5&nbsp; glutPostWindowOverlayRedisplay</h2>
495 The "<tt>glutPostWindowOverlayRedisplay</tt> " function is not implemented
496 in <i>freeglut</i>.
497 <p><b>Usage</b>
498 <p><tt>void glutPostWindowOverlayRedisplay ( int window ) ;</tt>
499 <p><b>Description</b>
500 <p>The "<tt>glutPostWindowOverlayRedisplay</tt> " function is not implemented
501 in <i>freeglut</i>.
502 <p><b>Changes From GLUT</b>
503 <p>GLUT implements this function.
504 <h2>
505 9.6&nbsp; glutShowOverlay, glutHideOverlay</h2>
506 The "<tt>glutShowOverlay</tt>" and "<tt>glutHideOverlay</tt>" functions
507 are not implemented in <i>freeglut</i> .
508 <p><b>Usage</b>
509 <p><tt>void glutShowOverlay( void ) ;</tt>
510 <br><tt>void glutHideOverlay( void ) ;</tt>
511 <p><b>Description</b>
512 <p>The "<tt>glutShowOverlay</tt>" and "<tt>glutHideOverlay</tt>" functions
513 are not implemented in <i>freeglut</i> .
514 <p><b>Changes From GLUT</b>
515 <p>GLUT implements these functions.
516 <h1>
517 10.0&nbsp;<a NAME="Menu"></a> Menu Functions</h1>
518
519 <h2>
520 10.1&nbsp; glutCreateMenu</h2>
521
522 <h2>
523 10.2&nbsp; glutDestroyMenu</h2>
524
525 <h2>
526 10.3&nbsp; glutGetMenu, glutSetMenu</h2>
527
528 <h2>
529 10.4&nbsp; glutAddMenuEntry</h2>
530
531 <h2>
532 10.5&nbsp; glutAddSubMenu</h2>
533
534 <h2>
535 10.6&nbsp; glutChangeToMenuEntry</h2>
536
537 <h2>
538 10.7&nbsp; glutChangeToSubMenu</h2>
539
540 <h2>
541 10.8&nbsp; glutRemoveMenuItem</h2>
542
543 <h2>
544 10.9&nbsp; glutAttachMenu, glutDetachMenu</h2>
545
546 <h1>
547 11.0&nbsp;<a NAME="GlobalCallback"></a> Global Callback Registration Functions</h1>
548
549 <h2>
550 11.1&nbsp; glutTimerFunc</h2>
551
552 <h2>
553 11.2&nbsp; glutIdleFunc</h2>
554 The "<tt>glutIdleFunc</tt>" function sets the global idle callback. <i>Freeglut</i>
555 calls the idle callback when there are no inputs from the user.
556 <p><b>Usage</b>
557 <p><tt>void glutIdleFunc ( void (*func) ( void ) ) ;</tt>
558 <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The new global idle callback function
559 <p><b>Description</b>
560 <p>The&nbsp; "<tt>glutIdleFunc</tt>" function specifies the function that
561 <i>freeglut</i>
562 will call to perform background processing tasks such as continuous animation
563 when window system events are not being received.&nbsp; If enabled, this
564 function is called continuously from <i>freeglut</i> while no events are
565 received.&nbsp; The callback function has no parameters and returns no
566 value.&nbsp; <i>Freeglut</i> does not change the <i>current window</i>
567 or the <i>current menu</i> before invoking the idle callback; programs
568 with multiple windows or menus must explicitly set the <i>current window</i>
569 and <i>current menu</i> and not rely on its current setting.
570 <br>&nbsp;&nbsp;&nbsp; The amount of computation and rendering done in
571 an idle callback should be minimized to avoid affecting the program's interactive
572 response.&nbsp; In general, no more than a single frame of rendering should
573 be done in a single invocation of an idle callback.
574 <br>&nbsp;&nbsp;&nbsp; Calling "<tt>glutIdleFunc</tt>" with a NULL argument
575 disables the call to an idle callback.
576 <p><b>Changes From GLUT</b>
577 <p>Application programmers should note that if they have specified the
578 "continue execution" action on window closure, <i>freeglut</i> will continue
579 to call the idle callback after the user has closed a window by clicking
580 on the "x" in the window header bar.&nbsp; If the idle callback renders
581 a particular window (this is considered bad form but is frequently done
582 anyway), the programmer should supply a window closure callback for that
583 window which changes or disables the idle callback.
584 <h1>
585 12.0&nbsp;<a NAME="WindowCallback"></a> Window-Specific Callback Registration
586 Functions</h1>
587
588 <h2>
589 12.1&nbsp; glutDisplayFunc</h2>
590
591 <h2>
592 12.2&nbsp; glutOverlayDisplayFunc</h2>
593
594 <h2>
595 12.3&nbsp; glutReshapeFunc</h2>
596
597 <h2>
598 12.4&nbsp; glutCloseFunc</h2>
599
600 <h2>
601 12.5&nbsp; glutKeyboardFunc</h2>
602
603 <h2>
604 12.6&nbsp; glutSpecialFunc</h2>
605 The "<tt>glutSpecialFunc</tt>" function sets the window's special key press
606 callback. <i>Freeglut</i> calls the special key press callback when the
607 user presses a special key.
608 <p><b>Usage</b>
609 <p><tt>void glutSpecialFunc ( void (*func) ( int key, int x, int y ) )
610 ;</tt>
611 <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's new special key press callback
612 function
613 <br><tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The key whose press triggers the
614 callback
615 <br><tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The x-coordinate of
616 the mouse relative to the window at the time the key is pressed
617 <br><tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The y-coordinate of
618 the mouse relative to the window at the time the key is pressed
619 <p><b>Description</b>
620 <p>The&nbsp; "<tt>glutSpecialFunc</tt>" function specifies the function
621 that <i>freeglut</i> will call when the user presses a special key on the
622 keyboard.&nbsp; The callback function has one argument:&nbsp; the name
623 of the function to be invoked ("called back") at the time at which the
624 special key is pressed.&nbsp; The function returns no value.&nbsp; <i>Freeglut</i>
625 sets the <i>current window</i> to the window which is active when the callback
626 is invoked.&nbsp; "Special keys" are the function keys, the arrow keys,
627 the Page Up and Page Down keys, and the Insert key.&nbsp; The Delete key
628 is considered to be a regular key.
629 <br>&nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL
630 argument disables the call to the window's special key press callback.
631 <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>" argument may take one of the following
632 defined constant values:
633 <ul>
634 <li>
635 <tt>GLUT_KEY_F1, GLUT_KEY_F2, ..., GLUT_KEY_F12</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
636 - F1 through F12 keys</li>
637
638 <li>
639 <tt>GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
640 - Page Up and Page Down keys</li>
641
642 <li>
643 <tt>GLUT_KEY_HOME, GLUT_KEY_END</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
644 - Home and End keys</li>
645
646 <li>
647 <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt> - arrow
648 keys</li>
649
650 <li>
651 <tt>GLUT_KEY_INSERT</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
652 - Insert key</li>
653 </ul>
654 <b>Changes From GLUT</b>
655 <p>None.
656 <h2>
657 12.7&nbsp; glutKeyboardUpFunc</h2>
658 The "<tt>glutKeyboardUpFunc</tt>" function sets the window's key release
659 callback. <i>Freeglut</i> calls the key release callback when the user
660 releases a key.
661 <p><b>Usage</b>
662 <p><tt>void glutKeyboardUpFunc ( void (*func) ( unsigned char key, int
663 x, int y ) ) ;</tt>
664 <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's new key release callback
665 function
666 <br><tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The key whose release triggers
667 the callback
668 <br><tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The x-coordinate of
669 the mouse relative to the window at the time the key is released
670 <br><tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The y-coordinate of
671 the mouse relative to the window at the time the key is released
672 <p><b>Description</b>
673 <p>The&nbsp; "<tt>glutKeyboardUpFunc</tt>" function specifies the function
674 that <i>freeglut</i> will call when the user releases a key from the keyboard.&nbsp;
675 The callback function has one argument:&nbsp; the name of the function
676 to be invoked ("called back") at the time at which the key is released.&nbsp;
677 The function returns no value.&nbsp; <i>Freeglut</i> sets the <i>current
678 window</i> to the window which is active when the callback is invoked.
679 <br>&nbsp;&nbsp;&nbsp; While <i>freeglut</i> checks for upper or lower
680 case letters, it does not do so for non-alphabetical characters.&nbsp;
681 Nor does it account for the Caps-Lock key being on.&nbsp; The operating
682 system may send some unexpected characters to <i>freeglut</i>, such as
683 "8" when the user is pressing the Shift key.&nbsp; <i>Freeglut</i> also
684 invokes the callback when the user releases the Control, Alt, or Shift
685 keys, among others.&nbsp; Releasing the Delete key causes this function
686 to be invoked with a value of 127 for "<tt>key</tt>".
687 <br>&nbsp;&nbsp;&nbsp; Calling "<tt>glutKeyboardUpFunc</tt>" with a NULL
688 argument disables the call to the window's key release callback.
689 <p><b>Changes From GLUT</b>
690 <p>This function is not implemented in GLUT versions before Version 4.&nbsp;
691 It has been designed to be as close to GLUT as possible.&nbsp; Users who
692 find differences should contact the <i>freeglut</i> development team to
693 have them fixed.
694 <h2>
695 12.8&nbsp; glutSpecialUpFunc</h2>
696 The "<tt>glutSpecialUpFunc</tt>" function sets the window's special key
697 release callback. <i>Freeglut</i> calls the special key release callback
698 when the user releases a special key.
699 <p><b>Usage</b>
700 <p><tt>void glutSpecialUpFunc ( void (*func) ( int key, int x, int y )
701 ) ;</tt>
702 <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's new special key release
703 callback function
704 <br><tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The key whose release triggers
705 the callback
706 <br><tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The x-coordinate of
707 the mouse relative to the window at the time the key is released
708 <br><tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The y-coordinate of
709 the mouse relative to the window at the time the key is released
710 <p><b>Description</b>
711 <p>The&nbsp; "<tt>glutSpecialUpFunc</tt>" function specifies the function
712 that <i>freeglut</i> will call when the user releases a special key from
713 the keyboard.&nbsp; The callback function has one argument:&nbsp; the name
714 of the function to be invoked ("called back") at the time at which the
715 special key is released.&nbsp; The function returns no value.&nbsp; <i>Freeglut</i>
716 sets the <i>current window</i> to the window which is active when the callback
717 is invoked.&nbsp; "Special keys" are the function keys, the arrow keys,
718 the Page Up and Page Down keys, and the Insert key.&nbsp; The Delete key
719 is considered to be a regular key.
720 <br>&nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL
721 argument disables the call to the window's special key release callback.
722 <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>" argument may take one of the following
723 defined constant values:
724 <ul>
725 <li>
726 <tt>GLUT_KEY_F1, GLUT_KEY_F2, ..., GLUT_KEY_F12</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
727 - F1 through F12 keys</li>
728
729 <li>
730 <tt>GLUT_KEY_PAGE_UP, GLUT_KEY_PAGE_DOWN</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
731 - Page Up and Page Down keys</li>
732
733 <li>
734 <tt>GLUT_KEY_HOME, GLUT_KEY_END</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
735 - Home and End keys</li>
736
737 <li>
738 <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt> - arrow
739 keys</li>
740
741 <li>
742 <tt>GLUT_KEY_INSERT</tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
743 - Insert key</li>
744 </ul>
745 <b>Changes From GLUT</b>
746 <p>This function is not implemented in GLUT versions before Version 4.&nbsp;
747 It has been designed to be as close to GLUT as possible.&nbsp; Users who
748 find differences should contact the <i>freeglut</i> development team to
749 have them fixed.
750 <h2>
751 12.9&nbsp; glutMouseFunc</h2>
752
753 <h2>
754 12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc</h2>
755
756 <h2>
757 12.11&nbsp; glutVisibilityFunc</h2>
758
759 <h2>
760 12.12&nbsp; glutEntryFunc</h2>
761
762 <h2>
763 12.13&nbsp; glutJoystickFunc</h2>
764
765 <h2>
766 12.14&nbsp; glutSpaceballMotionFunc</h2>
767
768 <h2>
769 12.15&nbsp; glutSpaceballRotateFunc</h2>
770
771 <h2>
772 12.16&nbsp; glutSpaceballButtonFunc</h2>
773
774 <h2>
775 12.17&nbsp; glutButtonBoxFunc</h2>
776
777 <h2>
778 12.18&nbsp; glutDialsFunc</h2>
779
780 <h2>
781 12.19&nbsp; glutTabletMotionFunc</h2>
782
783 <h2>
784 12.20&nbsp; glutTabletButtonFunc</h2>
785
786 <h2>
787 12.21&nbsp; glutMenuStatusFunc</h2>
788
789 <h2>
790 12.22&nbsp; glutWindowStatusFunc</h2>
791
792 <h1>
793 13.0&nbsp;<a NAME="StateSetting"></a> State Setting and Retrieval Functions</h1>
794
795 <h2>
796 13.1&nbsp; glutSetOption</h2>
797
798 <h2>
799 13.2&nbsp; glutGet</h2>
800
801 <h2>
802 13.3&nbsp; glutDeviceGet</h2>
803
804 <h2>
805 13.4&nbsp; glutGetModifiers</h2>
806
807 <h2>
808 13.5&nbsp; glutLayerGet</h2>
809
810 <h2>
811 13.6&nbsp; glutExtensionSupported</h2>
812
813 <h1>
814 14.0&nbsp;<a NAME="FontRendering"></a> Font Rendering Functions</h1>
815 <i>Freeglut</i> supports two types of font rendering:&nbsp; bitmap fonts,
816 which are rendered using the "<tt>glBitmap</tt>" function call, and stroke
817 fonts, which are rendered as sequences of OpenGL line segments.&nbsp; Because
818 they are rendered as bitmaps, the bitmap fonts tend to render more quickly
819 than stroke fonts, but they are less flexible in terms of scaling and rendering.&nbsp;
820 Bitmap font characters are positioned with calls to the "<tt>glRasterPos*</tt>
821 " functions while stroke font characters use the OpenGL transformations
822 to position characters.
823 <p>&nbsp;&nbsp;&nbsp; It should be noted that <i>freeglut</i> fonts are
824 similar but not identical to GLUT fonts.&nbsp; At the moment, <i>freeglut</i>
825 fonts do not support the "`" (backquote) and "|" (vertical line) characters;
826 in their place it renders asterisks.
827 <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports the following bitmap fonts:
828 <ul>
829 <li>
830 <tt>GLUT_BITMAP_8_BY_13</tt> - A variable-width font with every character
831 fitting in a rectangle of 13 pixels high by at most 8 pixels wide.</li>
832
833 <li>
834 <tt>GLUT_BITMAP_9_BY_15</tt> - A variable-width font with every character
835 fitting in a rectangle of 15 pixels high by at most 9 pixels wide.</li>
836
837 <li>
838 <tt>GLUT_BITMAP_TIMES_ROMAN_10</tt> - A 10-point variable-width Times Roman
839 font.</li>
840
841 <li>
842 <tt>GLUT_BITMAP_TIMES_ROMAN_24</tt> - A 24-point variable-width Times Roman
843 font.</li>
844
845 <li>
846 <tt>GLUT_BITMAP_HELVETICA_10</tt> - A 10-point variable-width Helvetica
847 font.</li>
848
849 <li>
850 <tt>GLUT_BITMAP_HELVETICA_12</tt> - A 12-point variable-width Helvetica
851 font.</li>
852
853 <li>
854 <tt>GLUT_BITMAP_HELVETICA_18</tt> - A 18-point variable-width Helvetica
855 font.</li>
856 </ul>
857 <i>Freeglut</i> calls "<tt>glRasterPos4v</tt>" to advance the cursor by
858 the width of a character and to render carriage returns when appropriate.&nbsp;
859 It does not use any display lists in it rendering in bitmap fonts.
860 <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports the following stroke fonts:
861 <ul>
862 <li>
863 <tt>GLUT_STROKE_ROMAN</tt> - A proportionally-spaced Roman Simplex font</li>
864
865 <li>
866 <tt>GLUT_STROKE_MONO_ROMAN</tt> - A fixed-width Roman Simplex font</li>
867 </ul>
868 <i>Freeglut</i> does not use any display lists in its rendering of stroke
869 fonts.&nbsp; It calls "<tt>glTranslatef</tt>" to advance the cursor by
870 the width of a character and to render carriage returns when appropriate.
871 <h2>
872 14.1&nbsp; glutBitmapCharacter</h2>
873 The "<tt>glutBitmapCharacter</tt>" function renders a single bitmapped
874 character in the <i>current window</i> using the specified font.
875 <p><b>Usage</b>
876 <p><tt>void glutBitmapCharacter ( void *font, int character ) ;</tt>
877 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
878 font to use in rendering the character
879 <br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character to be
880 rendered
881 <p><b>Description</b>
882 <p>The&nbsp; "<tt>glutBitmapCharacter</tt> " function renders the given
883 character in the specified bitmap font.&nbsp; <i>Freeglut</i> automatically
884 sets the necessary pixel unpack storage modes and restores the existing
885 modes when it has finished.&nbsp; Before the first call to "<tt>glutBitMapCharacter</tt>
886 " the application program should call "<tt>glRasterPos*</tt>" to set the
887 position of the character in the window.&nbsp; The "<tt>glutBitmapCharacter</tt>"
888 function advances the cursor position as part of its call to "<tt>glBitmap</tt>"
889 and so the application does not need to call "<tt>glRasterPos*</tt>" again
890 for successive characters on the same line.
891 <p><b>Changes From GLUT</b>
892 <p>Nonexistent characters are rendered as asterisks.&nbsp; The rendering
893 position in <i>freeglut</i> is apparently off from GLUT's position by a
894 few pixels vertically and one or two pixels horizontally.
895 <h2>
896 14.2&nbsp; glutBitmapString</h2>
897 The "<tt>glutBitmapString</tt>" function renders a string of bitmapped
898 characters in the <i>current window</i> using the specified font.
899 <p><b>Usage</b>
900 <p><tt>void glutBitmapString ( void *font, char *string ) ;</tt>
901 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped font to use
902 in rendering the character string
903 <br><tt>string&nbsp;&nbsp;&nbsp; </tt>String of characters to be rendered
904 <p><b>Description</b>
905 <p>The&nbsp; "<tt>glutBitmapString</tt> " function renders the given character
906 string in the specified bitmap font.&nbsp; <i>Freeglut</i> automatically
907 sets the necessary pixel unpack storage modes and restores the existing
908 modes when it has finished.&nbsp; Before calling "<tt>glutBitMapString</tt>"
909 the application program should call "<tt>glRasterPos*</tt>" to set the
910 position of the string in the window.&nbsp; The "<tt>glutBitmapString</tt>"
911 function handles carriage returns.&nbsp; Nonexistent characters are rendered
912 as asterisks.
913 <p><b>Changes From GLUT</b>
914 <p>GLUT does not include this function.
915 <h2>
916 14.3&nbsp; glutBitmapWidth</h2>
917 The "<tt>glutBitmapWidth</tt>" function returns the width in pixels of
918 a single bitmapped character in the specified font.
919 <p><b>Usage</b>
920 <p><tt>int glutBitmapWidth ( void *font, int character ) ;</tt>
921 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
922 font to use in calculating the character width
923 <br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character
924 <p><b>Description</b>
925 <p>The&nbsp; "<tt>glutBitmapWidth</tt>" function returns the width of the
926 given character in the specified bitmap font.&nbsp; Because the font is
927 bitmapped, the width is an exact integer.
928 <p><b>Changes From GLUT</b>
929 <p>Nonexistent characters return the width of an asterisk.
930 <h2>
931 14.4&nbsp; glutBitmapLength</h2>
932 The "<tt>glutBitmapLength</tt>" function returns the width in pixels of
933 a string of bitmapped characters in the specified font.
934 <p><b>Usage</b>
935 <p><tt>int glutBitmapLength ( void *font, char *string ) ;</tt>
936 <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The bitmapped font to use in calculating
937 the character width
938 <br><tt>string&nbsp; </tt>String of characters whose width is to be calculated
939 <p><b>Description</b>
940 <p>The&nbsp; "<tt>glutBitmapLength</tt> " function returns the width in
941 pixels of the given character string in the specified bitmap font.&nbsp;
942 Because the font is bitmapped, the width is an exact integer:&nbsp; the
943 return value is identical to the sum of the character widths returned by
944 a series of calls to "<tt>glutBitmapWidth</tt>".&nbsp; The width of nonexistent
945 characters is counted to be the width of an asterisk.
946 <p>&nbsp;&nbsp;&nbsp; If the string contains one or more carriage returns,
947 <i>freeglut</i>
948 calculates the widths in pixels of the lines separately and returns the
949 largest width.
950 <p><b>Changes From GLUT</b>
951 <p>GLUT does not include this function.
952 <h2>
953 14.5&nbsp; glutBitmapHeight</h2>
954 The "<tt>glutBitmapHeight</tt>" function returns the height in pixels of
955 the specified font.
956 <p><b>Usage</b>
957 <p><tt>int glutBitmapHeight ( void *font ) ;</tt>
958 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The bitmapped
959 font to use in calculating the character height
960 <p><b>Description</b>
961 <p>The&nbsp; "<tt>glutBitmapHeight</tt> " function returns the height of
962 a character in the specified bitmap font.&nbsp; Because the font is bitmapped,
963 the height is an exact integer.&nbsp; The fonts are designed such that
964 all characters have (nominally) the same height.
965 <p><b>Changes From GLUT</b>
966 <p>GLUT does not include this function.
967 <h2>
968 14.6&nbsp; glutStrokeCharacter</h2>
969 The "<tt>glutStrokeCharacter</tt>" function renders a single stroke character
970 in the <i>current window</i> using the specified font.
971 <p><b>Usage</b>
972 <p><tt>void glutStrokeCharacter ( void *font, int character ) ;</tt>
973 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
974 to use in rendering the character
975 <br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character to be
976 rendered
977 <p><b>Description</b>
978 <p>The&nbsp; "<tt>glutStrokeCharacter</tt> " function renders the given
979 character in the specified stroke font.&nbsp; Before the first call to
980 "<tt>glutStrokeCharacter</tt>" the application program should call the
981 OpenGL transformation (positioning and scaling) functions to set the position
982 of the character in the window.&nbsp; The "<tt>glutStrokeCharacter</tt>
983 " function advances the cursor position by a call to "<tt>glTranslatef</tt>
984 " and so the application does not need to call the OpenGL positioning functions
985 again for successive characters on the same line.
986 <p><b>Changes From GLUT</b>
987 <p>Nonexistent characters are rendered as asterisks.
988 <h2>
989 14.7&nbsp; glutStrokeString</h2>
990 The "<tt>glutStrokeString</tt>" function renders a string of characters
991 in the <i>current window</i> using the specified stroke font.
992 <p><b>Usage</b>
993 <p><tt>void glutStrokeString ( void *font, char *string ) ;</tt>
994 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font to use in
995 rendering the character string
996 <br><tt>string&nbsp;&nbsp;&nbsp; </tt>String of characters to be rendered
997 <p><b>Description</b>
998 <p>The&nbsp; "<tt>glutStrokeString</tt> " function renders the given character
999 string in the specified stroke font.&nbsp; Before calling "<tt>glutStrokeString</tt>"
1000 the application program should call the OpenGL transformation (positioning
1001 and scaling) functions to set the position of the string in the window.&nbsp;
1002 The "<tt>glutStrokeString</tt> " function handles carriage returns.&nbsp;
1003 Nonexistent characters are rendered as asterisks.
1004 <p><b>Changes From GLUT</b>
1005 <p>GLUT does not include this function.
1006 <h2>
1007 14.8&nbsp; glutStrokeWidth</h2>
1008 The "<tt>glutStrokeWidth</tt>" function returns the width in pixels of
1009 a single character in the specified stroke font.
1010 <p><b>Usage</b>
1011 <p><tt>int glutStrokeWidth ( void *font, int character ) ;</tt>
1012 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
1013 to use in calculating the character width
1014 <br><tt>character&nbsp;&nbsp; </tt>The ASCII code of the character
1015 <p><b>Description</b>
1016 <p>The&nbsp; "<tt>glutStrokeWidth</tt>" function returns the width of the
1017 given character in the specified stroke font.&nbsp; Because the font is
1018 a stroke font, the width is actually a floating-point number; the function
1019 rounds it to the nearest integer for the return value.
1020 <p><b>Changes From GLUT</b>
1021 <p>Nonexistent characters return the width of an asterisk.
1022 <h2>
1023 14.9&nbsp; glutStrokeLength</h2>
1024 The "<tt>glutStrokeLength</tt>" function returns the width in pixels of
1025 a string of characters in the specified stroke font.
1026 <p><b>Usage</b>
1027 <p><tt>int glutStrokeLength ( void *font, char *string ) ;</tt>
1028 <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The stroke font to use in calculating
1029 the character width
1030 <br><tt>string&nbsp; </tt>String of characters whose width is to be calculated
1031 <p><b>Description</b>
1032 <p>The&nbsp; "<tt>glutStrokeLength</tt> " function returns the width in
1033 pixels of the given character string in the specified stroke font.&nbsp;
1034 Because the font is a stroke font, the width of an individual character
1035 is a floating-point number.&nbsp; <i>Freeglut</i> adds the floating-point
1036 widths and rounds the funal result to return the integer value.&nbsp; Thus
1037 the return value may differ from the sum of the character widths returned
1038 by a series of calls to "<tt>glutStrokeWidth</tt> ".&nbsp; The width of
1039 nonexistent characters is counted to be the width of an asterisk.
1040 <p>&nbsp;&nbsp;&nbsp; If the string contains one or more carriage returns,
1041 <i>freeglut</i>
1042 calculates the widths in pixels of the lines separately and returns the
1043 largest width.
1044 <p><b>Changes From GLUT</b>
1045 <p>GLUT does not include this function.
1046 <h2>
1047 14.10&nbsp; glutStrokeHeight</h2>
1048 The "<tt>glutStrokeHeight</tt>" function returns the height in pixels of
1049 the specified font.
1050 <p><b>Usage</b>
1051 <p><tt>GLfloat glutStrokeHeight ( void *font ) ;</tt>
1052 <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The stroke font
1053 to use in calculating the character height
1054 <p><b>Description</b>
1055 <p>The&nbsp; "<tt>glutStrokeHeight</tt> " function returns the height of
1056 a character in the specified stroke font.&nbsp; The application programmer
1057 should note that, unlike the other <i>freeglut</i> font functions, this
1058 one returns a floating-point number.&nbsp; The fonts are designed such
1059 that all characters have (nominally) the same height.
1060 <p><b>Changes From GLUT</b>
1061 <p>GLUT does not include this function.
1062 <h1>
1063 15.0&nbsp;<a NAME="GeometricObject"></a> Geometric Object Rendering Functions</h1>
1064 <i>Freeglut</i> includes eighteen routines for generating easily-recognizable
1065 3-d geometric objects.&nbsp; These routines are effectively the same ones
1066 that are included in the GLUT library, and reflect the functionality available
1067 in the <i>aux</i> toolkit described in the <i>OpenGL Programmer's Guide</i>
1068 .&nbsp; They are included to allow programmers to create with a single
1069 line of code a three-dimensional object which can be used to test a variety
1070 of OpenGL functionality.&nbsp; None of the routines generates a display
1071 list for the object which it draws.&nbsp; The functions generate normals
1072 appropriate for lighting but, except for the teapon functions, do not generate
1073 texture coordinates.
1074 <h2>
1075 15.1&nbsp; glutWireSphere, glutSolidSphere</h2>
1076 The "<tt>glutWireSphere</tt>" and "<tt>glutSolidSphere</tt>" functions
1077 draw a wireframe and solid sphere respectively.
1078 <p><b>Usage</b>
1079 <p><tt>void glutWireSphere ( GLdouble dRadius, GLint slices, GLint stacks
1080 ) ;</tt>
1081 <p><tt>void glutSolidSphere ( GLdouble dRadius, GLint slices, GLint stacks
1082 ) ;</tt>
1083 <p><tt>dRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired radius
1084 of the sphere
1085 <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1086 number of slices (divisions in the longitudinal direction) in the sphere
1087 <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1088 number of stacks (divisions in the latitudinal direction) in the sphere.&nbsp;
1089 The number of points in this direction, including the north and south poles,
1090 is <tt>stacks+1</tt>
1091 <p><b>Description</b>
1092 <p>The "<tt>glutWireSphere</tt>" and "<tt> glutSolidSphere</tt>" functions
1093 render a sphere centered at the origin of the modeling coordinate system.&nbsp;
1094 The north and south poles of the sphere are on the positive and negative
1095 Z-axes respectively and the prime meridian crosses the positive X-axis.
1096 <p><b>Changes From GLUT</b>
1097 <p>None that we know of.
1098 <h2>
1099 15.2&nbsp; glutWireTorus, glutSolidTorus</h2>
1100 The "<tt>glutWireTorus</tt>" and "<tt>glutSolidTorus</tt>" functions draw
1101 a wireframe and solid torus (donut shape) respectively.
1102 <p><b>Usage</b>
1103 <p><tt>void glutWireTorus ( GLdouble dInnerRadius, GLdouble dOuterRadius,
1104 GLint nSides, GLint nRings ) ;</tt>
1105 <p><tt>void glutSolidTorus ( GLdouble dInnerRadius, GLdouble dOuterRadius,
1106 GLint nSides, GLint nRings ) ;</tt>
1107 <p><tt>dInnerRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
1108 desired inner radius of the torus, from the origin to the circle defining
1109 the centers of the outer circles
1110 <p><tt>dOuterRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
1111 desired outer radius of the torus, from the center of the outer circle
1112 to the actual surface of the torus
1113 <p><tt>nSides&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1114 number of segments in a single outer circle of the torus
1115 <p><tt>nRings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1116 number of outer circles around the origin of the torus
1117 <p><b>Description</b>
1118 <p>The "<tt>glutWireTorus</tt>" and "<tt> glutSolidTorus</tt>" functions
1119 render a torus centered at the origin of the modeling coordinate system.&nbsp;
1120 The torus is circularly symmetric about the Z-axis and starts at the positive
1121 X-axis.
1122 <p><b>Changes From GLUT</b>
1123 <p>None that we know of.
1124 <h2>
1125 15.3&nbsp; glutWireCone, glutSolidCone</h2>
1126 The "<tt>glutWireCone</tt>" and "<tt>glutSolidCone</tt>" functions draw
1127 a wireframe and solid cone respectively.
1128 <p><b>Usage</b>
1129 <p><tt>void glutWireCone ( GLdouble base, GLdouble height, GLint slices,
1130 GLint stacks ) ;</tt>
1131 <p><tt>void glutSolidCone ( GLdouble base, GLdouble height, GLint slices,
1132 GLint stacks ) ;</tt>
1133 <p><tt>base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The
1134 desired radius of the base of the cone
1135 <p><tt>height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1136 height of the cone
1137 <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1138 number of slices around the base of the cone
1139 <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1140 number of segments between the base and the tip of the cone (the number
1141 of points, including the tip, is <tt>stacks + 1</tt>)
1142 <p><b>Description</b>
1143 <p>The "<tt>glutWireCone</tt>" and "<tt> glutSolidCone</tt>" functions
1144 render a right circular cone with a base centered at the origin and in
1145 the X-Y plane and its tip on the positive Z-axis.&nbsp; The wire cone is
1146 rendered with triangular elements.
1147 <p><b>Changes From GLUT</b>
1148 <p>None that we know of.
1149 <h2>
1150 15.4&nbsp; glutWireCube, glutSolidCube</h2>
1151 The "<tt>glutWireCube</tt>" and "<tt>glutSolidCube</tt>" functions draw
1152 a wireframe and solid cube respectively.
1153 <p><b>Usage</b>
1154 <p><tt>void glutWireCube ( GLdouble dSize ) ;</tt>
1155 <p><tt>void glutSolidCube ( GLdouble dSize ) ;</tt>
1156 <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1157 length of an edge of the cube
1158 <p><b>Description</b>
1159 <p>The "<tt>glutWireCube</tt>" and "<tt> glutSolidCube</tt>" functions
1160 render a cube of the desired size, centered at the origin.&nbsp; Its faces
1161 are normal to the coordinate directions.
1162 <p><b>Changes From GLUT</b>
1163 <p>None that we know of.
1164 <h2>
1165 15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron</h2>
1166 The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
1167 functions draw a wireframe and solid tetrahedron (four-sided Platonic solid)
1168 respectively.
1169 <p><b>Usage</b>
1170 <p><tt>void glutWireTetrahedron ( void ) ;</tt>
1171 <p><tt>void glutSolidTetrahedron ( void ) ;</tt>
1172 <p><b>Description</b>
1173 <p>The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
1174 functions render a tetrahedron whose corners are each a distance of one
1175 from the origin.&nbsp; The length of each side is 2/3 sqrt(6).&nbsp; One
1176 corner is on the positive X-axis and another is in the X-Y plane with a
1177 positive Y-coordinate.
1178 <p><b>Changes From GLUT</b>
1179 <p>None that we know of.
1180 <h2>
1181 15.6&nbsp; glutWireOctahedron, glutSolidOctahedron</h2>
1182 The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>" functions
1183 draw a wireframe and solid octahedron (eight-sided Platonic solid) respectively.
1184 <p><b>Usage</b>
1185 <p><tt>void glutWireOctahedron ( void ) ;</tt>
1186 <p><tt>void glutSolidOctahedron ( void ) ;</tt>
1187 <p><b>Description</b>
1188 <p>The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>"
1189 functions render an octahedron whose corners are each a distance of one
1190 from the origin.&nbsp; The length of each side is sqrt(2).&nbsp; The corners
1191 are on the positive and negative coordinate axes.
1192 <p><b>Changes From GLUT</b>
1193 <p>None that we know of.
1194 <h2>
1195 15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron</h2>
1196 The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>"
1197 functions draw a wireframe and solid dodecahedron (twelve-sided Platonic
1198 solid) respectively.
1199 <p><b>Usage</b>
1200 <p><tt>void glutWireDodecahedron ( void ) ;</tt>
1201 <p><tt>void glutSolidDodecahedron ( void ) ;</tt>
1202 <p><b>Description</b>
1203 <p>The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>"
1204 functions render a dodecahedron whose corners are each a distance of sqrt(3)
1205 from the origin.&nbsp; The length of each side is sqrt(5)-1.&nbsp; There
1206 are twenty corners; interestingly enough, eight of them coincide with the
1207 corners of a cube with sizes of length 2.
1208 <p><b>Changes From GLUT</b>
1209 <p>None that we know of.
1210 <h2>
1211 15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron</h2>
1212 The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
1213 functions draw a wireframe and solid icosahedron (twenty-sided Platonic
1214 solid) respectively.
1215 <p><b>Usage</b>
1216 <p><tt>void glutWireIcosahedron ( void ) ;</tt>
1217 <p><tt>void glutSolidIcosahedron ( void ) ;</tt>
1218 <p><b>Description</b>
1219 <p>The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
1220 functions render an icosahedron whose corners are each a unit distance
1221 from the origin.&nbsp; The length of each side is slightly greater than
1222 one.&nbsp; Two of the corners lie on the positive and negative X-axes.
1223 <p><b>Changes From GLUT</b>
1224 <p>None that we know of.
1225 <h2>
1226 15.7&nbsp; glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron</h2>
1227 The "<tt>glutWireRhombicDodecahedron</tt>" and "<tt>glutSolidRhombicDodecahedron</tt>
1228 " functions draw a wireframe and solid rhombic dodecahedron (twelve-sided
1229 semi-regular solid) respectively.
1230 <p><b>Usage</b>
1231 <p><tt>void glutWireRhombicDodecahedron ( void ) ;</tt>
1232 <p><tt>void glutSolidRhombicDodecahedron ( void ) ;</tt>
1233 <p><b>Description</b>
1234 <p>The "<tt>glutWireRhombicDodecahedron</tt> " and "<tt>glutSolidRhombicDodecahedron</tt>"
1235 functions render a rhombic dodecahedron whose corners are at most a distance
1236 of one from the origin.&nbsp; The rhombic dodecahedron has faces which
1237 are identical rhombuses (rhombi?) but which have some vertices at which
1238 three faces meet and some vertices at which four faces meet.&nbsp; The
1239 length of each side is sqrt(3)/2.&nbsp; Vertices at which four faces meet
1240 are found at (0, 0, <u>+</u>1) and (<u> +</u>sqrt(2)/2, <u>+</u>sqrt(2)/2,
1241 0).
1242 <p><b>Changes From GLUT</b>
1243 <p>GLUT does not include these functions.
1244 <h2>
1245 15.10&nbsp; glutWireTeapot, glutSolidTeapot</h2>
1246 The "<tt>glutWireTeapot</tt>" and "<tt>glutSolidTeapot</tt>" functions
1247 draw a wireframe and solid teapot respectively.
1248 <p><b>Usage</b>
1249 <p><tt>void glutWireTeapot ( GLdouble dSize ) ;</tt>
1250 <p><tt>void glutSolidTeapot ( GLdouble dSize ) ;</tt>
1251 <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </tt>The desired
1252 size of the teapot
1253 <p><b>Description</b>
1254 <p>The "<tt>glutWireTeapot</tt>" and "<tt> glutSolidTeapot</tt>" functions
1255 render a teapot of the desired size, centered at the origin.&nbsp; This
1256 is the famous OpenGL teapot [add reference].
1257 <p><b>Changes From GLUT</b>
1258 <p>None that we know of.
1259 <h1>
1260 16.0&nbsp;<a NAME="GameMode"></a> Game Mode Functions</h1>
1261
1262 <h2>
1263 16.1&nbsp; glutGameModeString</h2>
1264
1265 <h2>
1266 16.2&nbsp; glutEnterGameMode, glutLeaveGameMode</h2>
1267
1268 <h2>
1269 16.3&nbsp; glutGameModeGet</h2>
1270
1271 <h1>
1272 17.0&nbsp;<a NAME="VideoResize"></a> Video Resize Functions</h1>
1273
1274 <h2>
1275 17.1&nbsp; glutVideoResizeGet</h2>
1276
1277 <h2>
1278 17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing</h2>
1279
1280 <h2>
1281 17.3&nbsp; glutVideoResize</h2>
1282
1283 <h2>
1284 17.4&nbsp; glutVideoPan</h2>
1285
1286 <h1>
1287 18.0&nbsp;<a NAME="ColorMap"></a> Color Map Functions</h1>
1288
1289 <h2>
1290 18.1&nbsp; glutSetColor, glutGetColor</h2>
1291
1292 <h2>
1293 18.2&nbsp; glutCopyColormap</h2>
1294
1295 <h1>
1296 19.0&nbsp;<a NAME="Miscellaneous"></a> Miscellaneous Functions</h1>
1297
1298 <h2>
1299 19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat</h2>
1300
1301 <h2>
1302 19.2&nbsp; glutForceJoystickFunc</h2>
1303
1304 <h2>
1305 19.3&nbsp; glutReportErrors</h2>
1306
1307 <h1>
1308 20.0&nbsp;<a NAME="UsageNotes"></a> Usage Notes</h1>
1309
1310 <h1>
1311 21.0&nbsp;<a NAME="ImplementationNotes"></a> Implementation Notes</h1>
1312
1313 <h1>
1314 22.0&nbsp;<a NAME="GLUT_State"></a> GLUT State</h1>
1315
1316 <h1>
1317 23.0&nbsp;<a NAME="Freeglut.h_Header"></a> "freeglut.h" Header File</h1>
1318
1319 <h1>
1320 24.0&nbsp;<a NAME="References"></a> References</h1>
1321
1322 <h1>
1323 25.0&nbsp;<a NAME="Index"></a> Index</h1>
1324 &nbsp;
1325 <p>&nbsp;
1326 <br>&nbsp;
1327 <br>&nbsp;
1328 <br>&nbsp;
1329 <br>&nbsp;
1330 <br>&nbsp;
1331 <br>&nbsp;
1332 <br>&nbsp;
1333 <br>&nbsp;
1334 <br>&nbsp;
1335 <br>&nbsp;
1336 <br>&nbsp;
1337 <br>&nbsp;
1338 <br>&nbsp;
1339 <br>&nbsp;
1340 <br>&nbsp;
1341 <br>&nbsp;
1342 <br>&nbsp;
1343 <br>&nbsp;
1344 <br>&nbsp;
1345 <br>&nbsp;
1346 <br>&nbsp;
1347 <br>&nbsp;
1348 </body>
1349 </html>