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