restore text lost from previous check-in
[freeglut] / doc / freeglut_user_interface.html
1 <!DOCTYPE html PUBLIC "-//w3c//dtd html 4.0 transitional//en">
2 <html>
3 <head>
4         
5   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
6         
7   <meta name="Author" content="John F. Fay">
8         
9   <meta name="GENERATOR" content="Mozilla/4.77 [en] (Windows NT 5.0; U) [Netscape]">
10   <title>FREEGLUT Application Program Interface</title>
11 </head>
12   <body>
13     
14 <dl>
15 <center>  
16 <h1> The Open-Source</h1>
17  </center>
18 <center>  
19 <h1> OpenGL Utility Toolkit</h1>
20  </center>
21 <center>  
22 <h1> (freeglut)</h1>
23  </center>
24 <center>  
25 <h1> Application Programming Interface</h1>
26  </center>
27 </dl>
28     
29 <center>  
30 <h1> Version 4.0</h1>
31  </center>
32     
33 <center>  
34 <h2> The freeglut Programming Consortium</h2>
35  </center>
36     
37 <center>  
38 <h2> November, 2002</h2>
39  </center>
40     
41 <p><br>
42  OpenGL is a trademark of Silicon Graphics, Inc. X Window System is a trademark 
43 of X Consortium, Inc.&nbsp; Spaceball is a registered trademark of Spatial 
44 Systems Inc. <br>
45  The authors have taken care in preparation of this documentation but make 
46 no expressed or implied warranty of any kind and assumes no responsibility
47  for errors or omissions. No liability is assumed for incidental or consequential
48  damages in connection with or arising from the use of information or programs
49  contained herein. <br>
50  &nbsp; </p>
51  
52 <h1> 1.0&nbsp;<a name="Contents"></a>
53   Contents</h1>
54   1.0&nbsp; <a href="#Contents">Contents</a>
55    
56 <p>2.0&nbsp; <a href="#Introduction">Introduction</a>
57   </p>
58  
59 <p>3.0&nbsp; <a href="#Background">Background</a>
60   </p>
61  
62 <blockquote>3.1&nbsp; Design Philosophy <br>
63  3.2&nbsp; Conventions <br>
64  3.3&nbsp; Terminology <br>
65  3.4&nbsp; Differences from GLUT 3.7</blockquote>
66       
67   <p><br>
68  4.0&nbsp; <a href="#Initialization">Initialization Functions</a>
69   </p>
70    
71   <blockquote>4.1&nbsp; glutInit <br>
72  4.2&nbsp; glutInitWindowPosition, glutInitWindowSize <br>
73  4.3&nbsp; glutInitDisplayMode <br>
74  4.4&nbsp; glutInitDisplayString</blockquote>
75         
76     <p><br>
77  5.0&nbsp; <a href="#EventProcessing">Event Processing Functions</a>
78   </p>
79      
80     <blockquote>5.1&nbsp; glutMainLoop <br>
81  5.2&nbsp; glutMainLoopEvent <br>
82  5.3&nbsp; glutLeaveMainLoop</blockquote>
83           
84       <p><br>
85  6.0&nbsp; <a href="#Window">Window Functions</a>
86   </p>
87        
88       <blockquote>6.1&nbsp; glutCreateWindow <br>
89  6.2&nbsp; glutCreateSubwindow <br>
90  6.3&nbsp; glutDestroyWindow <br>
91  6.4&nbsp; glutSetWindow, glutGetWindow <br>
92  6.5&nbsp; glutSetWindowTitle, glutSetIconTitle <br>
93  6.6&nbsp; glutReshapeWindow <br>
94  6.7&nbsp; glutPositionWindow <br>
95  6.8&nbsp; glutShowWindow, glutHideWindow, glutIconifyWindow <br>
96  6.9&nbsp; glutPushWindow, glutPopWindow <br>
97  6.10&nbsp; glutFullScreen</blockquote>
98             
99         <p><br>
100  7.0&nbsp; <a href="#Display">Display Functions</a>
101   </p>
102          
103         <blockquote>7.1&nbsp; glutPostRedisplay <br>
104  7.2&nbsp; glutPostWindowRedisplay <br>
105  7.3&nbsp; glutSwapBuffers</blockquote>
106               
107           <p><br>
108  8.0&nbsp; <a href="#MouseCursor">Mouse Cursor Functions</a>
109   </p>
110            
111           <blockquote>8.1&nbsp; glutSetCursor <br>
112  8.2&nbsp; glutWarpPointer</blockquote>
113                 
114             <p><br>
115  9.0&nbsp; <a href="#Overlay">Overlay Functions</a>
116   </p>
117              
118             <blockquote>9.1&nbsp; glutEstablishOverlay <br>
119  9.2&nbsp; glutRemoveOverlay <br>
120  9.3&nbsp; glutUseLayer <br>
121  9.4&nbsp; glutPostOverlayRedisplay <br>
122  9.5&nbsp; glutPostWindowOverlayRedisplay <br>
123  9.6&nbsp; glutShowOverlay, glutHideOverlay</blockquote>
124                   
125               <p><br>
126  10.0&nbsp; <a href="#Menu">Menu Functions</a>
127   </p>
128                
129               <blockquote>10.1&nbsp; glutCreateMenu <br>
130  10.2&nbsp; glutDestroyMenu <br>
131  10.3&nbsp; glutGetMenu, glutSetMenu <br>
132  10.4&nbsp; glutAddMenuEntry <br>
133  10.5&nbsp; glutAddSubMenu <br>
134  10.6&nbsp; glutChangeToMenuEntry <br>
135  10.7&nbsp; glutChangeToSubMenu <br>
136  10.8&nbsp; glutRemoveMenuItem <br>
137  10.9&nbsp; glutAttachMenu, glutDetachMenu</blockquote>
138                     
139                 <p><br>
140  11.0&nbsp; <a href="#GlobalCallback">Global Callback Registration Functions</a>
141   </p>
142                  
143                 <blockquote>11.1&nbsp; glutTimerFunc <br>
144  11.2&nbsp; glutIdleFunc</blockquote>
145                       
146                   <p><br>
147  12.0&nbsp; <a href="#WindowCallback">Window-Specific Callback Registration
148  Functions</a>
149   </p>
150                    
151                   <blockquote>12.1&nbsp; glutDisplayFunc <br>
152  12.2&nbsp; glutOverlayDisplayFunc <br>
153  12.3&nbsp; glutReshapeFunc <br>
154  12.4&nbsp; glutCloseFunc <br>
155  12.5&nbsp; glutKeyboardFunc <br>
156  12.6&nbsp; glutSpecialFunc <br>
157  12.7&nbsp; glutKeyboardUpFunc <br>
158  12.8&nbsp; glutSpecialUpFunc <br>
159  12.9&nbsp; glutMouseFunc <br>
160  12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc <br>
161  12.11&nbsp; glutVisibilityFunc <br>
162  12.12&nbsp; glutEntryFunc <br>
163  12.13&nbsp; glutJoystickFunc <br>
164  12.14&nbsp; glutSpaceballMotionFunc <br>
165  12.15&nbsp; glutSpaceballRotateFunc <br>
166  12.16&nbsp; glutSpaceballButtonFunc <br>
167  12.17&nbsp; glutButtonBoxFunc <br>
168  12.18&nbsp; glutDialsFunc <br>
169  12.19&nbsp; glutTabletMotionFunc <br>
170  12.20&nbsp; glutTabletButtonFunc                      
171                     <p>12.21&nbsp; glutMenuStatusFunc <br>
172  12.22&nbsp; glutWindowStatusFunc</p>
173                      </blockquote>
174                         
175                     <p><br>
176  13.0&nbsp; <a href="#StateSetting">State Setting and Retrieval Functions</a>
177   </p>
178                      
179                     <blockquote>13.1&nbsp; glutSetOption <br>
180  13.2&nbsp; glutGet <br>
181  13.3&nbsp; glutDeviceGet <br>
182  13.4&nbsp; glutGetModifiers <br>
183  13.5&nbsp; glutLayerGet <br>
184  13.6&nbsp; glutExtensionSupported<br>
185 13.7 &nbsp;glutGetProcAddress<br>
186                       </blockquote>
187                        
188                       <p><br>
189  14.0&nbsp; <a href="#FontRendering">Font Rendering Functions</a>
190   </p>
191                        
192                       <blockquote>14.1&nbsp; glutBitmapCharacter <br>
193  14.2&nbsp; glutBitmapString <br>
194  14.3&nbsp; glutBitmapWidth <br>
195  14.4&nbsp; glutBitmapLength <br>
196  14.5&nbsp; glutBitmapHeight <br>
197  14.6&nbsp; glutStrokeCharacter <br>
198  14.7&nbsp; glutStrokeString <br>
199  14.8&nbsp; glutStrokeWidth <br>
200  14.9&nbsp; glutStrokeLength <br>
201  14.10&nbsp; glutStrokeHeight</blockquote>
202                             
203                         <p><br>
204  15.0&nbsp; <a href="#GeometricObject">Geometric Object Rendering Functions</a>
205   </p>
206                          
207                         <blockquote>15.1&nbsp; glutWireSphere, glutSolidSphere
208                            <br>
209  15.2&nbsp; glutWireTorus, glutSolidTorus <br>
210  15.3&nbsp; glutWireCone, glutSolidCone <br>
211  15.4&nbsp; glutWireCube, glutSolidCube <br>
212  15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron <br>
213  15.6&nbsp; glutWireOctahedron, glutSolidOctahedron <br>
214  15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron <br>
215  15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron <br>
216  15.9&nbsp; glutWireRhombicDodecahedron, glutSolidRhombicDodecahedron <br>
217  15.10&nbsp; glutWireTeapot, glutSolidTeapot</blockquote>
218                               
219                           <p><br>
220  16.0&nbsp; <a href="#GameMode">Game Mode Functions</a>
221   </p>
222                            
223                           <blockquote>16.1&nbsp; glutGameModeString <br>
224  16.2&nbsp; glutEnterGameMode, glutLeaveGameMode <br>
225  16.3&nbsp; glutGameModeGet</blockquote>
226                                 
227                             <p><br>
228  17.0&nbsp; <a href="#VideoResize">Video Resize Functions</a>
229   </p>
230                              
231                             <blockquote>17.1&nbsp; glutVideoResizeGet <br>
232  17.2&nbsp; glutSetupVideoResizing, glutStopVideoResizing <br>
233  17.3&nbsp; glutVideoResize <br>
234  17.4&nbsp; glutVideoPan</blockquote>
235                                   
236                               <p><br>
237  18.0&nbsp; <a href="#ColorMap">Color Map Functions</a>
238   </p>
239                                
240                               <blockquote>18.1&nbsp; glutSetColor, glutGetColor
241                                  <br>
242  18.2&nbsp; glutCopyColormap</blockquote>
243                                     
244                                 <p><br>
245  19.0&nbsp; <a href="#Miscellaneous">Miscellaneous Functions</a>
246   </p>
247                                  
248                                 <blockquote>19.1&nbsp; glutIgnoreKeyRepeat, 
249 glutSetKeyRepeat <br>
250  19.2&nbsp; glutForceJoystickFunc <br>
251  19.3&nbsp; glutReportErrors</blockquote>
252                                       
253                                   <p><br>
254  20.0&nbsp; <a href="#UsageNotes">Usage Notes</a>
255   </p>
256                                    
257                                   <p>21.0&nbsp; <a href="#ImplementationNotes">
258  Implementation Notes</a>
259   </p>
260                                    
261                                   <p>22.0&nbsp; <a href="#GLUT_State">GLUT 
262 State</a>
263   </p>
264                                    
265                                   <p>23.0&nbsp; <a href="#Freeglut.h_Header">
266  "freeglut.h" Header File</a>
267   </p>
268                                    
269                                   <p>24.0&nbsp; <a href="#References">References</a>
270   </p>
271                                    
272                                   <p>25.0&nbsp; <a href="#Index">Index</a>
273   <br>
274  &nbsp; <br>
275  &nbsp; </p>
276                                    
277                                   <h1> 2.0&nbsp;<a name="Introduction"></a>
278   Introduction</h1>
279   &nbsp;                                    
280                                   <h1> 3.0&nbsp;<a name="Background"></a>
281   Background</h1>
282   The OpenGL programming world owes a tremendous debt to Mr. Mark J. Kilgard
283  for writing the OpenGL Utility Toolkit, or GLUT.&nbsp; The GLUT library
284 of functions allows an application programmer to create, control, and manipulate
285  windows independent of what operating system the program is running on.&nbsp;
286  By hiding the dependency on the operating system from the application programmer,
287  he allowed people to write truly portable OpenGL applications.         
288                           
289                                   <p>&nbsp;&nbsp;&nbsp; Mr. Kilgard copyrighted 
290 his library and gave it a rather unusual license.&nbsp; Under his license, 
291 people are allowed freely to copy and distribute the libraries and the source 
292 code, but they are not allowed to modify it.&nbsp; For a long time this did 
293 not matter because the GLUT library worked so well and because Mr. Kilgard 
294 was releasing updates on a regular basis.&nbsp; But with the passage of time, 
295 people started wanting some slightly different behaviours in their windowing 
296 system.&nbsp; When Mr. Kilgard stopped supporting the GLUT library in 1999, 
297 having moved on to bigger and better things, this started to become a problem.
298                                    </p>
299                                    
300                                   <p>&nbsp;&nbsp;&nbsp; In December 1999, 
301 Mr. Pawel Olzsta started work on an open-source clone of the GLUT library.&nbsp; 
302 This open-source clone, which does not use any of the GLUT source code, has 
303 evolved into the present <i>freeglut</i> library.&nbsp; This documentation 
304 specifies the application program interface to the <i>freeglut</i> library.
305                                    </p>
306                                    
307                                   <h2> 3.1&nbsp; Design Philosophy</h2>
308                                       
309                                   <h2> 3.2&nbsp; Conventions</h2>
310                                       
311                                   <h2> 3.3&nbsp; Terminology</h2>
312                                       
313                                   <h2> 3.4&nbsp; Differences from GLUT 3.7</h2>
314   Since the <i>freeglut</i> library was developed in order to update GLUT,
315  it is natural that there will be some differences between the two.&nbsp;
316 Each function in the API notes any differences between the GLUT and the <i>
317 freeglut</i>  function behaviours.&nbsp; The important ones are summarized
318 here.                                    
319                                   <h3> 3.4.1&nbsp; glutMainLoop Behaviour</h3>
320   One of the commonest complaints about the GLUT library was that once an
321 application called "<tt>glutMainLoop</tt>", it never got control back.&nbsp;
322 There was no way for an application to loop in GLUT for a while, possibly
323 as a subloop while a specific window was open, and then return to the calling
324 function.&nbsp; A new function, "<tt>glutMainLoopEvent</tt>", has been added
325 to allow this functionality.&nbsp; Another function, "<tt>glutLeaveMainLoop</tt>
326 ", has also been added to allow the application to tell freeglut to clean
327 up and close down.                                    
328                                   <h3> 3.4.2&nbsp; Action on Window Closure</h3>
329   Another difficulty with GLUT, especially with multiple-window programs,
330 is that if the user clicks on the "x" in the window header the application
331 exits immediately.&nbsp; The application programmer can now set an option,
332 "<tt> GLUT_ACTION_ON_WINDOW_CLOSE</tt>", to specify whether execution should
333 continue, whether GLUT should return control to the main program, or whether
334 GLUT should simply exit (the default).                                  
335  
336                                   <h3>3.4.3&nbsp; Changes to Callbacks<br>
337                                    </h3>
338  Several new callbacks have been added and several callbacks which were specific 
339 to Silicon Graphics hardware have not been implemented.&nbsp; Most or all 
340 of the new callbacks are listed in the GLUT Version 4 "glut.h" header file 
341 but did not make it into the documentation.&nbsp; The new callbacks consist 
342 of regular and special key release callbacks, a joystick callback, a menu 
343 state callback (with one argument, distinct from the menu status callback 
344 which has three arguments), and a window status callback <br>
345  (also with one argument).&nbsp; Unsupported callbacks are the three Spaceball 
346 callbacks, the ButtonBox callback, the Dials callback, and the two Tablet 
347 callbacks.&nbsp; If the user has a need for an unsupported callback he should 
348 contact the <i>freeglut</i> development team.<br>
349                                    
350                                   <h3>3.4.4&nbsp; String Rendering<br>
351                                    </h3>
352  New functions have been added to render full character strings (including 
353 carriage returns) rather than rendering one character at a time.&nbsp; More 
354 functions return the widths of character strings and the font heights, in 
355 pixels for bitmapped fonts and in OpenGL units for the stroke fonts.<br>
356                                    
357                                   <h3>3.4.5&nbsp; Geometry Rendering<br>
358                                    </h3>
359  Two functions have been added to render a wireframe and a solid rhombic
360 dodecahedron.                                    
361                                   <h3> 3.4.5&nbsp; Extension Function Queries</h3>
362  glutGetProcAddress is a wrapper for the glXGetProcAddressARB and wglGetProcAddress
363 functions. 
364                                   <h1> 4.0&nbsp;<a name="Initialization"></a>
365   Initialization Functions</h1>
366                                       
367                                   <h2> 4.1&nbsp; glutInit</h2>
368                                       
369                                   <h2> 4.2&nbsp; glutInitWindowPosition, glutInitWindowSize</h2>
370   The "<tt>glutInitWindowPosition</tt> " and "<tt>glutInitWindowSize</tt>
371 "  functions specify a desired position and size for windows that <i>freeglut</i>
372   will create in the future.                                    
373                                   <p><b>Usage</b> </p>
374                                    
375                                   <p><tt>void glutInitWindowPosition ( int 
376 x, int y ) ;</tt> <br>
377                                    <tt>void glutInitWindowSize ( int width, 
378 int height ) ;</tt> </p>
379                                    
380                                   <p><b>Description</b> </p>
381                                    
382                                   <p>The "<tt>glutInitWindowPosition</tt>
383   " and "<tt>glutInitWindowSize</tt>" functions specify a desired position 
384 and size for windows that <i>freeglut</i> will create in the future.&nbsp; 
385 The position is measured in pixels from the upper left hand corner of the 
386 screen, with "x" increasing to the right and "y" increasing towards the bottom 
387 of the screen.&nbsp; The size is measured in pixels.&nbsp; <i>Freeglut</i>
388   does not promise to follow these specifications in creating its windows, 
389 it certainly makes an attempt to. </p>
390                                    
391                                   <p>The position and size of a window are 
392 a matter of some subtlety.&nbsp; Most windows have a usable area surrounded 
393 by a border and with a title bar on the top.&nbsp; The border and title bar 
394 are commonly called "decorations."&nbsp; The position of the window unfortunately 
395 varies with the operating system.&nbsp; On Linux, it is the coordinates of 
396 the upper left-hand corner of its decorations.&nbsp; On Windows, it is the 
397 coordinates of the upper left hand corner of its usable interior.&nbsp; For 
398 both operating systems, the size of the window is the size of the usable interior.
399                                   </p>
400                                    
401                                   <p>Windows has some additional quirks which 
402 the application programmer should know about.&nbsp; First, the minimum y-coordinate 
403 of a window decoration is zero.&nbsp; (This is a feature of <i>freeglut</i>
404   and can be adjusted if so desired.)&nbsp; Second, there appears to be a 
405 minimum window width on Windows which is 104 pixels.&nbsp; The user may specify 
406 a smaller width, but the Windows system calls ignore it.&nbsp; It is also 
407 impossible to make a window narrower than this by dragging on its corner.
408                                    </p>
409                                    
410                                   <p><b>Changes From GLUT</b> </p>
411                                    
412                                   <p>For some reason, GLUT is not affected 
413 by the 104-pixel minimum window width.&nbsp; If the user clicks on the corner 
414 of a window which is narrower than this amount, the window will immediately 
415 snap out to this width, but the application can call "<tt>glutReshapeWindow</tt>
416   " and make a window narrower again. </p>
417                                    
418                                   <h2> 4.3&nbsp; glutInitDisplayMode</h2>
419                                       
420                                   <h2> 4.4&nbsp; glutInitDisplayString</h2>
421                                       
422                                   <h1> 5.0&nbsp;<a name="EventProcessing"></a>
423   Event Processing Functions</h1>
424   After an application has finished initializing its windows and menus, it
425  enters an event loop.&nbsp; Within this loop, <i>freeglut</i> polls the
426 data entry devices (keyboard, mouse, etc.) and calls the application's appropriate 
427 callbacks.                                    
428                                   <p>In GLUT, control never returned from 
429 the event loop (as invoked by the "<tt>glutMainLoop</tt>" function) to the 
430 calling function.&nbsp; This prevented an application from having re-entrant 
431 code, in which GLUT could be invoked from within a callback, and it prevented 
432 the application from doing any post-processing (such as freeing allocated 
433 memory) after GLUT had closed down.&nbsp; <i>Freeglut</i> allows the application 
434 programmer to specify more direct control over the event loop by means of 
435 two new functions.&nbsp; The first, "<tt>glutMainLoopEvent</tt>", processes 
436 a single iteration of the event loop and allows the application to use a different
437 event loop controller or to contain re-entrant code.&nbsp; The second, "<tt>
438 glutLeaveMainLoop</tt>", causes the event loop to exit nicely; this is preferable
439 to the application's calling "<tt>exit</tt>" from within a GLUT callback.
440                                   </p>
441                                    
442                                   <h2> 5.1&nbsp; glutMainLoop</h2>
443   The "<tt>glutMainLoop</tt>" function enters the event loop.           
444                         
445                                   <p><b>Usage</b> </p>
446                                    
447                                   <p><tt>void glutMainLoop ( void ) ;</tt>
448   </p>
449                                    
450                                   <p><b>Description</b> </p>
451                                    
452                                   <p>The&nbsp; "<tt>glutMainLoop</tt>" function 
453 causes the program to enter the window event loop.&nbsp; An application should 
454 call this function at most once.&nbsp; It will call any application callback 
455 functions as required to process mouse clicks, mouse motion, key presses, 
456 and so on. </p>
457                                    
458                                   <p><b>Changes From GLUT</b> </p>
459                                    
460                                   <p>In GLUT, there was absolutely no way 
461 for the application programmer to have control return from the "<tt>glutMainLoop</tt>
462   " function to the calling function.&nbsp; <i>Freeglut</i> allows the programmer 
463 to force this by setting the "<tt>GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option 
464 and invoking the "<tt>glutLeaveMainLoop</tt>" function from one of the callbacks.&nbsp;
465  Stopping the program this way is preferable to simply calling "<tt>exit</tt>
466   " from within a callback because this allows <i>freeglut</i> to free allocated
467  memory and otherwise clean up after itself.&nbsp; (I know I just said this,
468  but I think it is important enough that it bears repeating.) </p>
469                                    
470                                   <h2> 5.2&nbsp; glutMainLoopEvent</h2>
471   The "<tt>glutMainLoopEvent</tt>" function processes a single iteration
472 in the <i>freeglut</i> event loop.                                    
473                                   <p><b>Usage</b> </p>
474                                    
475                                   <p><tt>void glutMainLoopEvent ( void ) ;</tt>
476  </p>
477                                    
478                                   <p><b>Description</b> </p>
479                                    
480                                   <p>The&nbsp; "<tt>glutMainLoopEvent</tt>
481   " function causes <i>freeglut</i> to process one iteration's worth of events 
482 in its event loop.&nbsp; This allows the application to control its own event 
483 loop and still use the <i>freeglut</i> windowing system. </p>
484                                    
485                                   <p><b>Changes From GLUT</b> </p>
486                                    
487                                   <p>GLUT does not include this function.
488                                    </p>
489                                    
490                                   <h2> 5.3&nbsp; glutLeaveMainLoop</h2>
491   The "<tt>glutLeaveMainLoop</tt>" function causes <i>freeglut</i> to stop
492  its event loop.                                    
493                                   <p><b>Usage</b> </p>
494                                    
495                                   <p><tt>void glutLeaveMainLoop ( void ) ;</tt>
496  </p>
497                                    
498                                   <p><b>Description</b> </p>
499                                    
500                                   <p>The&nbsp; "<tt>glutLeaveMainLoop</tt>
501   " function causes <i>freeglut</i> to stop the event loop.&nbsp; If the
502 "<tt>  GLUT_ACTION_ON_WINDOW_CLOSE</tt>" option has been set to "<tt>GLUT_ACTION_CONTINUE_EXECUTION</tt>
503   ", control will return to the function which called "<tt>glutMainLoop</tt>
504   "; otherwise the application will exit. </p>
505                                    
506                                   <p>If the application has two nested calls 
507 to "<tt>glutMainLoop</tt>" and calls "<tt>glutLeaveMainLoop</tt>", the behaviour 
508 of <i>freeglut</i> is undefined.&nbsp; It may leave only the inner nested 
509 loop or it may leave both loops.&nbsp; If the reader has a strong preference 
510 for one behaviour over the other he should contact the <i>freeglut</i> Programming 
511 Consortium and ask for the code to be fixed. </p>
512                                    
513                                   <p><b>Changes From GLUT</b> </p>
514                                    
515                                   <p>GLUT does not include this function.
516                                    </p>
517                                    
518                                   <h1> 6.0&nbsp;<a name="Window"></a>
519   Window Functions</h1>
520                                       
521                                   <h2> 6.1&nbsp; glutCreateWindow</h2>
522                                       
523                                   <h2> 6.2&nbsp; glutCreateSubwindow</h2>
524                                       
525                                   <h2> 6.3&nbsp; glutDestroyWindow</h2>
526                                       
527                                   <h2> 6.4&nbsp; glutSetWindow, glutGetWindow</h2>
528                                       
529                                   <h2> 6.5&nbsp; glutSetWindowTitle, glutSetIconTitle</h2>
530                                       
531                                   <h2> 6.6&nbsp; glutReshapeWindow</h2>
532                                       
533                                   <h2> 6.7&nbsp; glutPositionWindow</h2>
534                                       
535                                   <h2> 6.8&nbsp; glutShowWindow, glutHideWindow, 
536 glutIconifyWindow</h2>
537                                       
538                                   <h2> 6.9&nbsp; glutPushWindow, glutPopWindow</h2>
539                                       
540                                   <h2> 6.10&nbsp; glutFullScreen</h2>
541                                       
542                                   <h1> 7.0&nbsp;<a name="Display"></a>
543   Display Functions</h1>
544                                       
545                                   <h2> 7.1&nbsp; glutPostRedisplay</h2>
546                                       
547                                   <h2> 7.2&nbsp; glutPostWindowRedisplay</h2>
548                                       
549                                   <h2> 7.3&nbsp; glutSwapBuffers</h2>
550                                       
551                                   <h1> 8.0&nbsp;<a name="MouseCursor"></a>
552   Mouse Cursor Functions</h1>
553                                       
554                                   <h2> 8.1&nbsp; glutSetCursor</h2>
555                                       
556                                   <h2> 8.2&nbsp; glutWarpPointer</h2>
557                                       
558                                   <h1> 9.0&nbsp;<a name="Overlay"></a>
559   Overlay Functions</h1>
560   <i>Freeglut</i> does not allow overlays, although it does "answer the mail"
561  with function stubs so that GLUT-based programs can compile and link against
562                                    <i>freeglut</i> without modification.&nbsp; 
563 If the reader needs overlays, he should contact the <i>freeglut</i> Programming 
564 Consortium and ask for them to be implemented.&nbsp; He should also be prepared 
565 to assist in the implementation.                                    
566                                   <h2> 9.1&nbsp; glutEstablishOverlay</h2>
567   The "<tt>glutEstablishOverlay</tt>" function is not implemented in <i>freeglut</i>
568  .                                    
569                                   <p><b>Usage</b> </p>
570                                    
571                                   <p><tt>void glutEstablishOverlay ( void 
572 ) ;</tt> </p>
573                                    
574                                   <p><b>Description</b> </p>
575                                    
576                                   <p>The "<tt>glutEstablishOverlay</tt>" function
577 is not implemented in <i>freeglut</i>. </p>
578                                    
579                                   <p><b>Changes From GLUT</b> </p>
580                                    
581                                   <p>GLUT implements this function. </p>
582                                    
583                                   <h2> 9.2&nbsp; glutRemoveOverlay</h2>
584   The "<tt>glutRemoveOverlay</tt>" function is not implemented in <i>freeglut</i>
585  .                                    
586                                   <p><b>Usage</b> </p>
587                                    
588                                   <p><tt>void glutRemoveOverlay ( void ) ;</tt>
589  </p>
590                                    
591                                   <p><b>Description</b> </p>
592                                    
593                                   <p>The "<tt>glutRemoveOverlay</tt>" function 
594 is not implemented in <i>freeglut</i>. </p>
595                                    
596                                   <p><b>Changes From GLUT</b> </p>
597                                    
598                                   <p>GLUT implements this function. </p>
599                                    
600                                   <h2> 9.3&nbsp; glutUseLayer</h2>
601   The "<tt>glutUseLayer</tt>" function is not implemented in <i>freeglut</i>
602  .                                    
603                                   <p><b>Usage</b> </p>
604                                    
605                                   <p><tt>void glutUseLayer (&nbsp; GLenum 
606 layer ) ;</tt> </p>
607                                    
608                                   <p><b>Description</b> </p>
609                                    
610                                   <p>The "<tt>glutUseLayer</tt>" function 
611 is not implemented in <i>freeglut</i>. </p>
612                                    
613                                   <p><b>Changes From GLUT</b> </p>
614                                    
615                                   <p>GLUT implements this function. </p>
616                                    
617                                   <h2> 9.4&nbsp; glutPostOverlayRedisplay</h2>
618   The "<tt>glutPostOverlayRedisplay</tt> " function is not implemented in
619                                   <i> freeglut</i>.                     
620               
621                                   <p><b>Usage</b> </p>
622                                    
623                                   <p><tt>void glutPostOverlayRedisplay ( void
624 ) ;</tt> </p>
625                                    
626                                   <p><b>Description</b> </p>
627                                    
628                                   <p>The "<tt>glutPostOverlayRedisplay</tt>
629   " function is not implemented in <i>freeglut</i>. </p>
630                                    
631                                   <p><b>Changes From GLUT</b> </p>
632                                    
633                                   <p>GLUT implements this function. </p>
634                                    
635                                   <h2> 9.5&nbsp; glutPostWindowOverlayRedisplay</h2>
636   The "<tt>glutPostWindowOverlayRedisplay</tt> " function is not implemented
637  in <i>freeglut</i>.                                    
638                                   <p><b>Usage</b> </p>
639                                    
640                                   <p><tt>void glutPostWindowOverlayRedisplay 
641 ( int window ) ;</tt> </p>
642                                    
643                                   <p><b>Description</b> </p>
644                                    
645                                   <p>The "<tt>glutPostWindowOverlayRedisplay</tt>
646   " function is not implemented in <i>freeglut</i>. </p>
647                                    
648                                   <p><b>Changes From GLUT</b> </p>
649                                    
650                                   <p>GLUT implements this function. </p>
651                                    
652                                   <h2> 9.6&nbsp; glutShowOverlay, glutHideOverlay</h2>
653   The "<tt>glutShowOverlay</tt>" and "<tt>glutHideOverlay</tt>" functions
654 are not implemented in <i>freeglut</i> .                                
655    
656                                   <p><b>Usage</b> </p>
657                                    
658                                   <p><tt>void glutShowOverlay( void ) ;</tt>
659   <br>
660                                    <tt>void glutHideOverlay( void ) ;</tt>
661   </p>
662                                    
663                                   <p><b>Description</b> </p>
664                                    
665                                   <p>The "<tt>glutShowOverlay</tt>" and "<tt>
666 glutHideOverlay</tt>" functions are not implemented in <i>freeglut</i> .
667                                   </p>
668                                    
669                                   <p><b>Changes From GLUT</b> </p>
670                                    
671                                   <p>GLUT implements these functions. </p>
672                                    
673                                   <h1> 10.0&nbsp;<a name="Menu"></a>
674   Menu Functions</h1>
675                                       
676                                   <h2> 10.1&nbsp; glutCreateMenu</h2>
677                                       
678                                   <h2> 10.2&nbsp; glutDestroyMenu</h2>
679                                       
680                                   <h2> 10.3&nbsp; glutGetMenu, glutSetMenu</h2>
681                                       
682                                   <h2> 10.4&nbsp; glutAddMenuEntry</h2>
683                                       
684                                   <h2> 10.5&nbsp; glutAddSubMenu</h2>
685                                       
686                                   <h2> 10.6&nbsp; glutChangeToMenuEntry</h2>
687                                       
688                                   <h2> 10.7&nbsp; glutChangeToSubMenu</h2>
689                                       
690                                   <h2> 10.8&nbsp; glutRemoveMenuItem</h2>
691                                       
692                                   <h2> 10.9&nbsp; glutAttachMenu, glutDetachMenu</h2>
693                                       
694                                   <h1> 11.0&nbsp;<a name="GlobalCallback"></a>
695   Global Callback Registration Functions</h1>
696                                       
697                                   <h2> 11.1&nbsp; glutTimerFunc</h2>
698                                       
699                                   <h2> 11.2&nbsp; glutIdleFunc</h2>
700   The "<tt>glutIdleFunc</tt>" function sets the global idle callback. <i>
701 Freeglut</i>  calls the idle callback when there are no inputs from the user.
702                                    
703                                   <p><b>Usage</b> </p>
704                                    
705                                   <p><tt>void glutIdleFunc ( void (*func) 
706 ( void ) ) ;</tt> </p>
707                                    
708                                   <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The new
709 global idle callback function </p>
710                                    
711                                   <p><b>Description</b> </p>
712                                    
713                                   <p>The&nbsp; "<tt>glutIdleFunc</tt>" function 
714 specifies the function that <i>freeglut</i> will call to perform background 
715 processing tasks such as continuous animation when window system events are 
716 not being received.&nbsp; If enabled, this function is called continuously 
717 from <i>freeglut</i> while no events are received.&nbsp; The callback function 
718 has no parameters and returns no value.&nbsp; <i>Freeglut</i> does not change 
719 the <i>current window</i> or the <i>current menu</i> before invoking the idle
720 callback; programs with multiple windows or menus must explicitly set the
721                                   <i>current window</i> and <i>current menu</i>
722  and not rely on its current setting. <br>
723  &nbsp;&nbsp;&nbsp; The amount of computation and rendering done in an idle 
724 callback should be minimized to avoid affecting the program's interactive
725  response.&nbsp; In general, no more than a single frame of rendering should
726  be done in a single invocation of an idle callback. <br>
727  &nbsp;&nbsp;&nbsp; Calling "<tt>glutIdleFunc</tt>" with a NULL argument
728 disables the call to an idle callback. </p>
729                                    
730                                   <p><b>Changes From GLUT</b> </p>
731                                    
732                                   <p>Application programmers should note that
733 if they have specified the "continue execution" action on window closure, 
734                                   <i>freeglut</i> will continue to call the 
735 idle callback after the user has closed a window by clicking on the "x" in 
736 the window header bar.&nbsp; If the idle callback renders a particular window 
737 (this is considered bad form but is frequently done anyway), the programmer 
738 should supply a window closure callback for that window which changes or disables
739 the idle callback. </p>
740                                    
741                                   <h1> 12.0&nbsp;<a name="WindowCallback"></a>
742   Window-Specific Callback Registration Functions</h1>
743                                       
744                                   <h2> 12.1&nbsp; glutDisplayFunc</h2>
745                                       
746                                   <h2> 12.2&nbsp; glutOverlayDisplayFunc</h2>
747                                       
748                                   <h2> 12.3&nbsp; glutReshapeFunc</h2>
749                                       
750                                   <h2> 12.4&nbsp; glutCloseFunc</h2>
751                                       
752                                   <h2> 12.5&nbsp; glutKeyboardFunc</h2>
753                                       
754                                   <h2> 12.6&nbsp; glutSpecialFunc</h2>
755   The "<tt>glutSpecialFunc</tt>" function sets the window's special key press
756  callback. <i>Freeglut</i> calls the special key press callback when the
757 user presses a special key.                                    
758                                   <p><b>Usage</b> </p>
759                                    
760                                   <p><tt>void glutSpecialFunc ( void (*func) 
761 ( int key, int x, int y ) ) ;</tt> </p>
762                                    
763                                   <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
764 new special key press callback function <br>
765                                    <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The 
766 key whose press triggers the callback <br>
767                                    <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
768                                   </tt>The x-coordinate of the mouse relative 
769 to the window at the time the key is pressed <br>
770                                    <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
771                                   </tt>The y-coordinate of the mouse relative 
772 to the window at the time the key is pressed </p>
773                                    
774                                   <p><b>Description</b> </p>
775                                    
776                                   <p>The&nbsp; "<tt>glutSpecialFunc</tt>" 
777 function specifies the function that <i>freeglut</i> will call when the user 
778 presses a special key on the keyboard.&nbsp; The callback function has one 
779 argument:&nbsp; the name of the function to be invoked ("called back") at 
780 the time at which the special key is pressed.&nbsp; The function returns no
781 value.&nbsp; <i>Freeglut</i> sets the <i>current window</i> to the window 
782 which is active when the callback is invoked.&nbsp; "Special keys" are the 
783 function keys, the arrow keys, the Page Up and Page Down keys, and the Insert 
784 key.&nbsp; The Delete key is considered to be a regular key. <br>
785  &nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL argument 
786 disables the call to the window's special key press callback. </p>
787                                    
788                                   <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>
789 " argument may take one of the following defined constant values: </p>
790                                    
791                                   <ul>
792   <li> <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;
793  - F1 through F12 keys</li>
794    <li> <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;
795  - Page Up and Page Down keys</li>
796    <li> <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;
797  - Home and End keys</li>
798    <li> <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt>
799   - arrow keys</li>
800    <li> <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;
801  - Insert key</li>
802                                      
803                                   </ul>
804   <b>Changes From GLUT</b>                                    
805                                   <p>None. </p>
806                                    
807                                   <h2> 12.7&nbsp; glutKeyboardUpFunc</h2>
808   The "<tt>glutKeyboardUpFunc</tt>" function sets the window's key release
809  callback. <i>Freeglut</i> calls the key release callback when the user releases 
810 a key.                                    
811                                   <p><b>Usage</b> </p>
812                                    
813                                   <p><tt>void glutKeyboardUpFunc ( void (*func) 
814 ( unsigned char key, int x, int y ) ) ;</tt> </p>
815                                    
816                                   <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
817 new key release callback function <br>
818                                    <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The 
819 key whose release triggers the callback <br>
820                                    <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
821                                   </tt>The x-coordinate of the mouse relative 
822 to the window at the time the key is released <br>
823                                    <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
824                                   </tt>The y-coordinate of the mouse relative 
825 to the window at the time the key is released </p>
826                                    
827                                   <p><b>Description</b> </p>
828                                    
829                                   <p>The&nbsp; "<tt>glutKeyboardUpFunc</tt>
830 " function specifies the function that <i>freeglut</i> will call when the 
831 user releases a key from the keyboard.&nbsp; The callback function has one 
832 argument:&nbsp; the name of the function to be invoked ("called back") at 
833 the time at which the key is released.&nbsp; The function returns no value.&nbsp; 
834                                   <i>Freeglut</i> sets the <i>current window</i>
835   to the window which is active when the callback is invoked. <br>
836  &nbsp;&nbsp;&nbsp; While <i>freeglut</i> checks for upper or lower case
837 letters, it does not do so for non-alphabetical characters.&nbsp; Nor does
838 it account for the Caps-Lock key being on.&nbsp; The operating system may
839 send some unexpected characters to <i>freeglut</i>, such as "8" when the
840 user is pressing the Shift key.&nbsp; <i>Freeglut</i> also invokes the callback
841 when the user releases the Control, Alt, or Shift keys, among others.&nbsp;
842 Releasing the Delete key causes this function to be invoked with a value
843 of 127 for "<tt>key</tt>". <br>
844  &nbsp;&nbsp;&nbsp; Calling "<tt>glutKeyboardUpFunc</tt>" with a NULL argument 
845 disables the call to the window's key release callback. </p>
846                                    
847                                   <p><b>Changes From GLUT</b> </p>
848                                    
849                                   <p>This function is not implemented in GLUT
850 versions before Version 4.&nbsp; It has been designed to be as close to GLUT
851 as possible.&nbsp; Users who find differences should contact the        
852                           <i>freeglut</i>&nbsp;Programming Consortium  to
853 have them fixed. </p>
854                                    
855                                   <h2> 12.8&nbsp; glutSpecialUpFunc</h2>
856   The "<tt>glutSpecialUpFunc</tt>" function sets the window's special key
857 release callback. <i>Freeglut</i> calls the special key release callback
858 when the user releases a special key.                                   
859                                   <p><b>Usage</b> </p>
860                                    
861                                   <p><tt>void glutSpecialUpFunc ( void (*func) 
862 ( int key, int x, int y ) ) ;</tt> </p>
863                                    
864                                   <p><tt>func&nbsp;&nbsp;&nbsp; </tt>The window's
865 new special key release callback function <br>
866                                    <tt>key&nbsp;&nbsp;&nbsp;&nbsp; </tt>The 
867 key whose release triggers the callback <br>
868                                    <tt>x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
869                                   </tt>The x-coordinate of the mouse relative 
870 to the window at the time the key is released <br>
871                                    <tt>y&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
872                                   </tt>The y-coordinate of the mouse relative 
873 to the window at the time the key is released </p>
874                                    
875                                   <p><b>Description</b> </p>
876                                    
877                                   <p>The&nbsp; "<tt>glutSpecialUpFunc</tt>
878 " function specifies the function that <i>freeglut</i> will call when the 
879 user releases a special key from the keyboard.&nbsp; The callback function 
880 has one argument:&nbsp; the name of the function to be invoked ("called back") 
881 at the time at which the special key is released.&nbsp; The function returns 
882 no value.&nbsp; <i>Freeglut</i> sets the <i>current window</i> to the window 
883 which is active when the callback is invoked.&nbsp; "Special keys" are the 
884 function keys, the arrow keys, the Page Up and Page Down keys, and the Insert 
885 key.&nbsp; The Delete key is considered to be a regular key. <br>
886  &nbsp;&nbsp;&nbsp; Calling "<tt>glutSpecialUpFunc</tt>" with a NULL argument 
887 disables the call to the window's special key release callback. </p>
888                                    
889                                   <p>&nbsp;&nbsp;&nbsp; The "<tt>key</tt>
890 " argument may take one of the following defined constant values: </p>
891                                    
892                                   <ul>
893   <li> <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;
894  - F1 through F12 keys</li>
895    <li> <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;
896  - Page Up and Page Down keys</li>
897    <li> <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;
898  - Home and End keys</li>
899    <li> <tt>GLUT_KEY_LEFT, GLUT_KEY_RIGHT, GLUT_KEY_UP, GLUT_KEY_DOWN</tt>
900   - arrow keys</li>
901    <li> <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;
902  - Insert key</li>
903                                      
904                                   </ul>
905   <b>Changes From GLUT</b>                                    
906                                   <p>This function is not implemented in GLUT
907 versions before Version 4.&nbsp; It has been designed to be as close to GLUT
908 as possible.&nbsp; Users who find differences should contact the        
909                           <i>freeglut</i>&nbsp;Programming Consortium  to
910 have them fixed. </p>
911                                    
912                                   <h2> 12.9&nbsp; glutMouseFunc</h2>
913                                       
914                                   <h2> 12.10&nbsp; glutMotionFunc, glutPassiveMotionFunc</h2>
915                                       
916                                   <h2> 12.11&nbsp; glutVisibilityFunc</h2>
917                                       
918                                   <h2> 12.12&nbsp; glutEntryFunc</h2>
919                                       
920                                   <h2> 12.13&nbsp; glutJoystickFunc</h2>
921                                       
922                                   <h2> 12.14&nbsp; glutSpaceballMotionFunc</h2>
923     The "<tt>glutSpaceballMotionFunc</tt>" function is not implemented in 
924                                   <i>freeglut</i>, although the library does 
925 "answer the mail" to the extent that a call to the function will not produce 
926 an error..                                    
927                                   <p><b>Usage</b></p>
928                                    
929                                   <p><tt>void glutSpaceballMotionFunc ( void 
930 (* callback)( int x, int y, int z )</tt><tt> ) ;</tt></p>
931                                    
932                                   <p><b>Description</b></p>
933                                    
934                                   <p>The "<tt>glutSpaceballMotionFunc</tt>
935  " function is not implemented in <i>freeglut</i>. </p>
936                                    
937                                   <p><b>Changes From GLUT</b></p>
938                                    
939                                   <p>GLUT implements this function. </p>
940                                    
941                                   <h2> 12.15&nbsp; glutSpaceballRotateFunc</h2>
942     The "<tt>glutSpaceballRotateFunc</tt>" function is not implemented in 
943                                   <i>freeglut</i>, although the library does 
944 "answer the mail" to the extent that a call to the function will not produce 
945 an error..                                     
946                                   <p><b>Usage</b></p>
947                                    
948                                   <p><tt>void glutSpaceballRotateFunc ( void 
949 (* callback)( int x, int y, int z )</tt><tt> ) ;</tt></p>
950                                    
951                                   <p><b>Description</b></p>
952                                    
953                                   <p>The "<tt>glutSpaceballRotateFunc</tt>
954  " function is not implemented in <i>freeglut</i>. </p>
955                                    
956                                   <p><b>Changes From GLUT</b></p>
957                                    
958                                   <p>GLUT implements this function. </p>
959                                    
960                                   <h2> 12.16&nbsp; glutSpaceballButtonFunc</h2>
961     The "<tt>glutSpaceballButtonFunc</tt>" function is not implemented in 
962                                   <i>freeglut</i>, although the library does 
963 "answer the mail" to the extent that a call to the function will not produce 
964 an error..                                     
965                                   <p><b>Usage</b></p>
966                                    
967                                   <p><tt>void glutSpaceballButtonFunc ( void 
968 (* callback)( int button, int updown )</tt><tt> ) ;</tt></p>
969                                    
970                                   <p><b>Description</b></p>
971                                    
972                                   <p>The "<tt>glutSpaceballButtonFunc</tt>
973  " function is not implemented in <i>freeglut</i>. </p>
974                                    
975                                   <p><b>Changes From GLUT</b></p>
976                                    
977                                   <p>GLUT implements this function. </p>
978                                    
979                                   <h2> 12.17&nbsp; glutButtonBoxFunc</h2>
980     The "<tt>glutSpaceballButtonBoxFunc</tt>" function is not implemented 
981 in <i>freeglut</i>, although the library does "answer the mail" to the extent 
982 that a call to the function will not produce an error..                 
983                    
984                                   <p><b>Usage</b></p>
985                                    
986                                   <p><tt>void glutSpaceballButtonBoxFunc (
987 void (* callback)( int button, int updown )</tt><tt> ) ;</tt></p>
988                                    
989                                   <p><b>Description</b></p>
990                                    
991                                   <p>The "<tt>glutSpaceballButtonBoxFunc</tt>
992  " function is not implemented in <i>freeglut</i>. </p>
993                                    
994                                   <p><b>Changes From GLUT</b></p>
995                                    
996                                   <p>GLUT implements this function. </p>
997                                    
998                                   <h2> 12.18&nbsp; glutDialsFunc</h2>
999     The "<tt>glutDialsFunc</tt>" function is not implemented in <i>freeglut</i>
1000  , although the library does "answer the mail" to the extent that a call
1001 to the function will not produce an error..                             
1002        
1003                                   <p><b>Usage</b></p>
1004                                    
1005                                   <p><tt>void glutDialsFunc ( void (* callback)( 
1006 int dial, int value )</tt><tt> ) ;</tt></p>
1007                                    
1008                                   <p><b>Description</b></p>
1009                                    
1010                                   <p>The "<tt>glutDialsFunc</tt>" function 
1011 is not implemented in <i>freeglut</i>. </p>
1012                                    
1013                                   <p><b>Changes From GLUT</b></p>
1014                                    
1015                                   <p>GLUT implements this function. </p>
1016                                    
1017                                   <h2> 12.19&nbsp; glutTabletMotionFunc</h2>
1018     The "<tt>glutTabletMotionFunc</tt>" function is not implemented in <i>
1019  freeglut</i>, although the library does "answer the mail" to the extent
1020 that a call to the function will not produce an error..                 
1021                     
1022                                   <p><b>Usage</b></p>
1023                                    
1024                                   <p><tt>void glutTabletMotionFunc ( void 
1025 (* callback)( int x, int y )</tt><tt> ) ;</tt></p>
1026                                    
1027                                   <p><b>Description</b></p>
1028                                    
1029                                   <p>The "<tt>glutTabletMotionFunc</tt>" function
1030 is not implemented in <i>freeglut</i>. </p>
1031                                    
1032                                   <p><b>Changes From GLUT</b></p>
1033                                    
1034                                   <p>GLUT implements this function. </p>
1035                                    
1036                                   <h2> 12.20&nbsp; glutTabletButtonFunc</h2>
1037     The "<tt>glutTabletButtonFunc</tt>" function is not implemented in <i>
1038  freeglut</i>, although the library does "answer the mail" to the extent
1039 that a call to the function will not produce an error..                 
1040                    
1041                                   <p><b>Usage</b></p>
1042                                    
1043                                   <p><tt>void glutTabletButtonFunc ( void 
1044 (* callback)( int button, int updown, int x, int y )</tt><tt> ) ;</tt></p>
1045                                    
1046                                   <p><b>Description</b></p>
1047                                    
1048                                   <p>The "<tt>glutTabletButtonFunc</tt>" function
1049 is not implemented in <i>freeglut</i>. </p>
1050                                    
1051                                   <p><b>Changes From GLUT</b></p>
1052                                    
1053                                   <p>GLUT implements this function. </p>
1054                                    
1055                                   <h2> 12.21&nbsp; glutMenuStatusFunc</h2>
1056                                       
1057                                   <h2> 12.22&nbsp; glutWindowStatusFunc</h2>
1058                                       
1059                                   <h1> 13.0&nbsp;<a name="StateSetting"></a>
1060   State Setting and Retrieval Functions</h1>
1061                                       
1062                                   <h2> 13.1&nbsp; glutSetOption</h2>
1063                                       
1064                                   <h2> 13.2&nbsp; glutGet</h2>
1065                                       
1066
1067 <p>
1068 The following state variables may be queried with glutGet.
1069 The returned value is an integer.
1070 </p>
1071
1072 <p>
1073 These queries are with respect to the current window:
1074 </p>
1075
1076 <ul>
1077 <li>GLUT_WINDOW_X - window X position
1078 <li>GLUT_WINDOW_Y - window Y position
1079 <li>GLUT_WINDOW_WIDTH - window width
1080 <li>GLUT_WINDOW_HEIGHT - window height
1081 <li>GLUT_WINDOW_BUFFER_SIZE - number of color or color index bits per pixel
1082 <li>GLUT_WINDOW_STENCIL_SIZE - number of bits per stencil value
1083 <li>GLUT_WINDOW_DEPTH_SIZE - number of bits per depth value
1084 <li>GLUT_WINDOW_RED_SIZE - number of bits per red value
1085 <li>GLUT_WINDOW_GREEN_SIZE - number of bits per green value
1086 <li>GLUT_WINDOW_BLUE_SIZE - number of bits per blue value
1087 <li>GLUT_WINDOW_ALPHA_SIZE - number of bits per alpha value
1088 <li>GLUT_WINDOW_ACCUM_RED_SIZE - number of red bits in the accumulation buffer
1089 <li>GLUT_WINDOW_ACCUM_GREEN_SIZE - number of green bits in the accumulation buffer
1090 <li>GLUT_WINDOW_ACCUM_BLUE_SIZE - number of blue bits in the accumulation buffer
1091 <li>GLUT_WINDOW_ACCUM_ALPHA_SIZE - number of alpha bits in the accumulation buffer
1092 <li>GLUT_WINDOW_DOUBLEBUFFER - 1 if the color buffer is double buffered, 0 otherwise
1093 <li>GLUT_WINDOW_RGBA - 1 if the color buffers are RGB[A], 0 for color index
1094 <li>GLUT_WINDOW_PARENT - parent window ID
1095 <li>GLUT_WINDOW_NUM_CHILDREN - number of child windows
1096 <li>GLUT_WINDOW_COLORMAP_SIZE - number of entries in the window's colormap
1097 <li>GLUT_WINDOW_NUM_SAMPLES - number of samples per pixel if using multisampling
1098 <li>GLUT_WINDOW_STEREO - 1 if the window supports stereo, 0 otherwise
1099 <li>GLUT_WINDOW_CURSOR - current cursor
1100 <li>GLUT_WINDOW_FORMAT_ID - on Windows, return the pixel format number of the current window
1101 </ul>
1102
1103 <p>
1104 These queries do not depend on the current window.
1105 </p>
1106
1107 <ul>
1108 <li>GLUT_SCREEN_WIDTH - width of the screen in pixels
1109 <li>GLUT_SCREEN_HEIGHT - height of the screen in pixels
1110 <li>GLUT_SCREEN_WIDTH_MM - width of the screen in millimeters
1111 <li>GLUT_SCREEN_HEIGHT_MM - height of the screen in millimeters
1112 <li>GLUT_MENU_NUM_ITEMS - number of items in the current menu
1113 <li>GLUT_DISPLAY_MODE_POSSIBLE - return 1 if the current display mode is supported, 0 otherwise
1114 <li>GLUT_INIT_WINDOW_X - X position last set by glutInitWindowPosition
1115 <li>GLUT_INIT_WINDOW_Y - Y position last set by glutInitWindowPosition
1116 <li>GLUT_INIT_WINDOW_WIDTH - width last set by glutInitWindowSize
1117 <li>GLUT_INIT_WINDOW_HEIGHT - height last set by glutInitWindowSize
1118 <li>GLUT_INIT_DISPLAY_MODE - display mode last set by glutInitDisplayMode
1119 <li>GLUT_ELAPSED_TIME - time (in milliseconds) elapsed since glutInit or glutGet(GLUT_ELAPSED_TIME) was first called
1120 <li>GLUT_INIT_STATE - ?
1121 <li>GLUT_VERSION - Return value will be X*10000+Y*100+Z where X is the
1122     major version, Y is the minor version and Z is the patch level.
1123     This query is only supported in FreeGLUT (version 1.3 or later).
1124 </ul>
1125
1126
1127                                   <h2> 13.3&nbsp; glutDeviceGet</h2>
1128                                       
1129                                   <h2> 13.4&nbsp; glutGetModifiers</h2>
1130                                       
1131                                   <h2> 13.5&nbsp; glutLayerGet</h2>
1132                                       
1133                                   <h2> 13.6&nbsp; glutExtensionSupported</h2>
1134                                       
1135                                   <h2> 13.7&nbsp; glutGetProcAddress</h2>
1136                                   <p><tt>glutGetProcAddress</tt> returns
1137 a pointer to a named GL or FreeGLUT function. </p>
1138                                   <p><b>Usage</b></p>
1139                                   <p><tt>void *glutGetProcAddress ( const
1140 char *procName ) ;</tt></p>
1141                                   <p><tt>procName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
1142                                   </tt>Name of an OpenGL or GLUT function. 
1143                                   </p>
1144                                   <p><b>Description</b></p>
1145                                   <p><tt>glutGetProcAddress</tt> is useful
1146 for dealing with OpenGL extensions. If an application calls OpenGL extension
1147 functions directly, that application will only link/run with an OpenGL library
1148 that supports the extension. By using a function pointer returned from glutGetProcAddress(),
1149 the application will avoid this hard dependency and be more portable and interoperate
1150 better with various implementations of OpenGL. </p>
1151                                   <p> Both OpenGL functions and FreeGLUT
1152 functions can be queried with this function. </p>
1153                                   <p><b>NOTE</b>: this function is not supported
1154 in GLUT. </p>
1155                                   <h1> 14.0&nbsp;<a name="FontRendering"></a>
1156   Font Rendering Functions</h1>
1157   <i>Freeglut</i> supports two types of font rendering:&nbsp; bitmap fonts,
1158  which are rendered using the "<tt>glBitmap</tt>" function call, and stroke
1159  fonts, which are rendered as sequences of OpenGL line segments.&nbsp; Because
1160  they are rendered as bitmaps, the bitmap fonts tend to render more quickly
1161  than stroke fonts, but they are less flexible in terms of scaling and rendering.&nbsp;
1162  Bitmap font characters are positioned with calls to the "<tt>glRasterPos*</tt>
1163   " functions while stroke font characters use the OpenGL transformations
1164 to position characters.                                    
1165                                   <p>&nbsp;&nbsp;&nbsp; It should be noted 
1166 that <i>freeglut</i> fonts are similar but not identical to GLUT fonts.&nbsp; 
1167 At the moment, <i>freeglut</i> fonts do not support the "`" (backquote) and 
1168 "|" (vertical line) characters; in their place it renders asterisks. </p>
1169                                    
1170                                   <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports 
1171 the following bitmap fonts: </p>
1172                                    
1173                                   <ul>
1174   <li> <tt>GLUT_BITMAP_8_BY_13</tt> - A variable-width font with every character
1175  fitting in a rectangle of 13 pixels high by at most 8 pixels wide.</li>
1176    <li> <tt>GLUT_BITMAP_9_BY_15</tt> - A variable-width font with every character
1177  fitting in a rectangle of 15 pixels high by at most 9 pixels wide.</li>
1178    <li> <tt>GLUT_BITMAP_TIMES_ROMAN_10</tt> - A 10-point variable-width Times 
1179 Roman font.</li>
1180    <li> <tt>GLUT_BITMAP_TIMES_ROMAN_24</tt> - A 24-point variable-width Times 
1181 Roman font.</li>
1182    <li> <tt>GLUT_BITMAP_HELVETICA_10</tt> - A 10-point variable-width Helvetica
1183  font.</li>
1184    <li> <tt>GLUT_BITMAP_HELVETICA_12</tt> - A 12-point variable-width Helvetica
1185  font.</li>
1186    <li> <tt>GLUT_BITMAP_HELVETICA_18</tt> - A 18-point variable-width Helvetica
1187  font.</li>
1188                                      
1189                                   </ul>
1190   <i>Freeglut</i> calls "<tt>glRasterPos4v</tt>" to advance the cursor by
1191 the width of a character and to render carriage returns when appropriate.&nbsp;
1192  It does not use any display lists in it rendering in bitmap fonts.     
1193                               
1194                                   <p>&nbsp;&nbsp;&nbsp; <i>Freeglut</i> supports 
1195 the following stroke fonts: </p>
1196                                    
1197                                   <ul>
1198   <li> <tt>GLUT_STROKE_ROMAN</tt> - A proportionally-spaced Roman Simplex 
1199 font</li>
1200    <li> <tt>GLUT_STROKE_MONO_ROMAN</tt> - A fixed-width Roman Simplex font</li>
1201                                      
1202                                   </ul>
1203   <i>Freeglut</i> does not use any display lists in its rendering of stroke
1204  fonts.&nbsp; It calls "<tt>glTranslatef</tt>" to advance the cursor by the 
1205 width of a character and to render carriage returns when appropriate.   
1206                                 
1207                                   <h2> 14.1&nbsp; glutBitmapCharacter</h2>
1208   The "<tt>glutBitmapCharacter</tt>" function renders a single bitmapped
1209 character in the <i>current window</i> using the specified font.        
1210                            
1211                                   <p><b>Usage</b> </p>
1212                                    
1213                                   <p><tt>void glutBitmapCharacter ( void *font,
1214 int character ) ;</tt> </p>
1215                                    
1216                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1217                                   </tt>The bitmapped font to use in rendering 
1218 the character <br>
1219                                    <tt>character&nbsp;&nbsp; </tt>The ASCII 
1220 code of the character to be rendered </p>
1221                                    
1222                                   <p><b>Description</b> </p>
1223                                    
1224                                   <p>The&nbsp; "<tt>glutBitmapCharacter</tt>
1225   " function renders the given character in the specified bitmap font.&nbsp; 
1226                                   <i>Freeglut</i> automatically sets the necessary
1227 pixel unpack storage modes and restores the existing modes when it has finished.&nbsp;
1228 Before the first call to "<tt>glutBitMapCharacter</tt>  " the application
1229 program should call "<tt>glRasterPos*</tt>" to set the  position of the character
1230 in the window.&nbsp; The "<tt>glutBitmapCharacter</tt> " function advances
1231 the cursor position as part of its call to "<tt>glBitmap</tt> " and so the
1232 application does not need to call "<tt>glRasterPos*</tt>" again  for successive
1233 characters on the same line. </p>
1234                                    
1235                                   <p><b>Changes From GLUT</b> </p>
1236                                    
1237                                   <p>Nonexistent characters are rendered as
1238 asterisks.&nbsp; The rendering position in <i>freeglut</i> is apparently off
1239 from GLUT's position by a few pixels vertically and one or two pixels horizontally.
1240                                   </p>
1241                                    
1242                                   <h2> 14.2&nbsp; glutBitmapString</h2>
1243   The "<tt>glutBitmapString</tt>" function renders a string of bitmapped
1244 characters in the <i>current window</i> using the specified font.       
1245                             
1246                                   <p><b>Usage</b> </p>
1247                                    
1248                                   <p><tt>void glutBitmapString ( void *font, 
1249 char *string ) ;</tt> </p>
1250                                    
1251                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1252                                   </tt>The bitmapped font to use in rendering 
1253 the character string <br>
1254                                    <tt>string&nbsp;&nbsp;&nbsp; </tt>String 
1255 of characters to be rendered </p>
1256                                    
1257                                   <p><b>Description</b> </p>
1258                                    
1259                                   <p>The&nbsp; "<tt>glutBitmapString</tt>
1260   " function renders the given character string in the specified bitmap font.&nbsp; 
1261                                   <i>Freeglut</i> automatically sets the necessary
1262 pixel unpack storage modes and restores the existing modes when it has finished.&nbsp;
1263 Before calling "<tt>glutBitMapString</tt>" the application program should
1264 call "<tt>glRasterPos*</tt>" to set the position of the string in the window.&nbsp;
1265 The "<tt>glutBitmapString</tt>" function handles carriage returns.&nbsp;
1266 Nonexistent characters are rendered as asterisks. </p>
1267                                    
1268                                   <p><b>Changes From GLUT</b> </p>
1269                                    
1270                                   <p>GLUT does not include this function.
1271                                    </p>
1272                                    
1273                                   <h2> 14.3&nbsp; glutBitmapWidth</h2>
1274   The "<tt>glutBitmapWidth</tt>" function returns the width in pixels of
1275 a single bitmapped character in the specified font.                     
1276               
1277                                   <p><b>Usage</b> </p>
1278                                    
1279                                   <p><tt>int glutBitmapWidth ( void *font, 
1280 int character ) ;</tt> </p>
1281                                    
1282                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1283                                   </tt>The bitmapped font to use in calculating 
1284 the character width <br>
1285                                    <tt>character&nbsp;&nbsp; </tt>The ASCII 
1286 code of the character </p>
1287                                    
1288                                   <p><b>Description</b> </p>
1289                                    
1290                                   <p>The&nbsp; "<tt>glutBitmapWidth</tt>" 
1291 function returns the width of the given character in the specified bitmap 
1292 font.&nbsp; Because the font is bitmapped, the width is an exact integer.
1293                                    </p>
1294                                    
1295                                   <p><b>Changes From GLUT</b> </p>
1296                                    
1297                                   <p>Nonexistent characters return the width 
1298 of an asterisk. </p>
1299                                    
1300                                   <h2> 14.4&nbsp; glutBitmapLength</h2>
1301   The "<tt>glutBitmapLength</tt>" function returns the width in pixels of
1302 a string of bitmapped characters in the specified font.                 
1303                   
1304                                   <p><b>Usage</b> </p>
1305                                    
1306                                   <p><tt>int glutBitmapLength ( void *font, 
1307 char *string ) ;</tt> </p>
1308                                    
1309                                   <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The bitmapped
1310 font to use in calculating the character width <br>
1311                                    <tt>string&nbsp; </tt>String of characters 
1312 whose width is to be calculated </p>
1313                                    
1314                                   <p><b>Description</b> </p>
1315                                    
1316                                   <p>The&nbsp; "<tt>glutBitmapLength</tt>
1317   " function returns the width in pixels of the given character string in 
1318 the specified bitmap font.&nbsp; Because the font is bitmapped, the width 
1319 is an exact integer:&nbsp; the return value is identical to the sum of the 
1320 character widths returned by a series of calls to "<tt>glutBitmapWidth</tt>
1321 ".&nbsp; The width of nonexistent characters is counted to be the width of 
1322 an asterisk. </p>
1323                                    
1324                                   <p>&nbsp;&nbsp;&nbsp; If the string contains 
1325 one or more carriage returns, <i>freeglut</i> calculates the widths in pixels 
1326 of the lines separately and returns the largest width. </p>
1327                                    
1328                                   <p><b>Changes From GLUT</b> </p>
1329                                    
1330                                   <p>GLUT does not include this function.
1331                                    </p>
1332                                    
1333                                   <h2> 14.5&nbsp; glutBitmapHeight</h2>
1334   The "<tt>glutBitmapHeight</tt>" function returns the height in pixels of
1335  the specified font.                                    
1336                                   <p><b>Usage</b> </p>
1337                                    
1338                                   <p><tt>int glutBitmapHeight ( void *font 
1339 ) ;</tt> </p>
1340                                    
1341                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1342                                   </tt>The bitmapped font to use in calculating 
1343 the character height </p>
1344                                    
1345                                   <p><b>Description</b> </p>
1346                                    
1347                                   <p>The&nbsp; "<tt>glutBitmapHeight</tt>
1348   " function returns the height of a character in the specified bitmap font.&nbsp; 
1349 Because the font is bitmapped, the height is an exact integer.&nbsp; The fonts
1350 are designed such that all characters have (nominally) the same height.  
1351                                  </p>
1352                                    
1353                                   <p><b>Changes From GLUT</b> </p>
1354                                    
1355                                   <p>GLUT does not include this function.
1356                                    </p>
1357                                    
1358                                   <h2> 14.6&nbsp; glutStrokeCharacter</h2>
1359   The "<tt>glutStrokeCharacter</tt>" function renders a single stroke character
1360  in the <i>current window</i> using the specified font.                 
1361                   
1362                                   <p><b>Usage</b> </p>
1363                                    
1364                                   <p><tt>void glutStrokeCharacter ( void *font,
1365 int character ) ;</tt> </p>
1366                                    
1367                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1368                                   </tt>The stroke font to use in rendering 
1369 the character <br>
1370                                    <tt>character&nbsp;&nbsp; </tt>The ASCII 
1371 code of the character to be rendered </p>
1372                                    
1373                                   <p><b>Description</b> </p>
1374                                    
1375                                   <p>The&nbsp; "<tt>glutStrokeCharacter</tt>
1376   " function renders the given character in the specified stroke font.&nbsp; 
1377 Before the first call to "<tt>glutStrokeCharacter</tt>" the application program 
1378 should call the OpenGL transformation (positioning and scaling) functions 
1379 to set the position of the character in the window.&nbsp; The "<tt>glutStrokeCharacter</tt>
1380   " function advances the cursor position by a call to "<tt>glTranslatef</tt>
1381   " and so the application does not need to call the OpenGL positioning functions
1382  again for successive characters on the same line. </p>
1383                                    
1384                                   <p><b>Changes From GLUT</b> </p>
1385                                    
1386                                   <p>Nonexistent characters are rendered as
1387 asterisks. </p>
1388                                    
1389                                   <h2> 14.7&nbsp; glutStrokeString</h2>
1390   The "<tt>glutStrokeString</tt>" function renders a string of characters
1391 in the <i>current window</i> using the specified stroke font.           
1392                         
1393                                   <p><b>Usage</b> </p>
1394                                    
1395                                   <p><tt>void glutStrokeString ( void *font, 
1396 char *string ) ;</tt> </p>
1397                                    
1398                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1399                                   </tt>The stroke font to use in rendering 
1400 the character string <br>
1401                                    <tt>string&nbsp;&nbsp;&nbsp; </tt>String 
1402 of characters to be rendered </p>
1403                                    
1404                                   <p><b>Description</b> </p>
1405                                    
1406                                   <p>The&nbsp; "<tt>glutStrokeString</tt>
1407   " function renders the given character string in the specified stroke font.&nbsp; 
1408 Before calling "<tt>glutStrokeString</tt>" the application program should 
1409 call the OpenGL transformation (positioning and scaling) functions to set 
1410 the position of the string in the window.&nbsp; The "<tt>glutStrokeString</tt>
1411   " function handles carriage returns.&nbsp; Nonexistent characters are rendered 
1412 as asterisks. </p>
1413                                    
1414                                   <p><b>Changes From GLUT</b> </p>
1415                                    
1416                                   <p>GLUT does not include this function.
1417                                    </p>
1418                                    
1419                                   <h2> 14.8&nbsp; glutStrokeWidth</h2>
1420   The "<tt>glutStrokeWidth</tt>" function returns the width in pixels of
1421 a single character in the specified stroke font.                        
1422            
1423                                   <p><b>Usage</b> </p>
1424                                    
1425                                   <p><tt>int glutStrokeWidth ( void *font, 
1426 int character ) ;</tt> </p>
1427                                    
1428                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1429                                   </tt>The stroke font to use in calculating 
1430 the character width <br>
1431                                    <tt>character&nbsp;&nbsp; </tt>The ASCII 
1432 code of the character </p>
1433                                    
1434                                   <p><b>Description</b> </p>
1435                                    
1436                                   <p>The&nbsp; "<tt>glutStrokeWidth</tt>" 
1437 function returns the width of the given character in the specified stroke 
1438 font.&nbsp; Because the font is a stroke font, the width is actually a floating-point 
1439 number; the function rounds it to the nearest integer for the return value.
1440                                    </p>
1441                                    
1442                                   <p><b>Changes From GLUT</b> </p>
1443                                    
1444                                   <p>Nonexistent characters return the width 
1445 of an asterisk. </p>
1446                                    
1447                                   <h2> 14.9&nbsp; glutStrokeLength</h2>
1448   The "<tt>glutStrokeLength</tt>" function returns the width in pixels of
1449 a string of characters in the specified stroke font.                    
1450                
1451                                   <p><b>Usage</b> </p>
1452                                    
1453                                   <p><tt>int glutStrokeLength ( void *font, 
1454 char *string ) ;</tt> </p>
1455                                    
1456                                   <p><tt>font&nbsp;&nbsp;&nbsp; </tt>The stroke
1457 font to use in calculating the character width <br>
1458                                    <tt>string&nbsp; </tt>String of characters 
1459 whose width is to be calculated </p>
1460                                    
1461                                   <p><b>Description</b> </p>
1462                                    
1463                                   <p>The&nbsp; "<tt>glutStrokeLength</tt>
1464   " function returns the width in pixels of the given character string in 
1465 the specified stroke font.&nbsp; Because the font is a stroke font, the width 
1466 of an individual character is a floating-point number.&nbsp; <i>Freeglut</i>
1467   adds the floating-point widths and rounds the funal result to return the 
1468 integer value.&nbsp; Thus the return value may differ from the sum of the 
1469 character widths returned by a series of calls to "<tt>glutStrokeWidth</tt>
1470   ".&nbsp; The width of nonexistent characters is counted to be the width 
1471 of an asterisk. </p>
1472                                    
1473                                   <p>&nbsp;&nbsp;&nbsp; If the string contains 
1474 one or more carriage returns, <i>freeglut</i> calculates the widths in pixels 
1475 of the lines separately and returns the largest width. </p>
1476                                    
1477                                   <p><b>Changes From GLUT</b> </p>
1478                                    
1479                                   <p>GLUT does not include this function.
1480                                    </p>
1481                                    
1482                                   <h2> 14.10&nbsp; glutStrokeHeight</h2>
1483   The "<tt>glutStrokeHeight</tt>" function returns the height in pixels of
1484  the specified font.                                    
1485                                   <p><b>Usage</b> </p>
1486                                    
1487                                   <p><tt>GLfloat glutStrokeHeight ( void *font
1488 ) ;</tt> </p>
1489                                    
1490                                   <p><tt>font&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1491                                   </tt>The stroke font to use in calculating 
1492 the character height </p>
1493                                    
1494                                   <p><b>Description</b> </p>
1495                                    
1496                                   <p>The&nbsp; "<tt>glutStrokeHeight</tt>
1497   " function returns the height of a character in the specified stroke font.&nbsp; 
1498 The application programmer should note that, unlike the other <i>freeglut</i>
1499   font functions, this one returns a floating-point number.&nbsp; The fonts 
1500 are designed such that all characters have (nominally) the same height. </p>
1501                                    
1502                                   <p><b>Changes From GLUT</b> </p>
1503                                    
1504                                   <p>GLUT does not include this function.
1505                                    </p>
1506                                    
1507                                   <h1> 15.0&nbsp;<a name="GeometricObject"></a>
1508   Geometric Object Rendering Functions</h1>
1509   <i>Freeglut</i> includes eighteen routines for generating easily-recognizable
1510  3-d geometric objects.&nbsp; These routines are effectively the same ones
1511  that are included in the GLUT library, and reflect the functionality available
1512  in the <i>aux</i> toolkit described in the <i>OpenGL Programmer's Guide</i>
1513   .&nbsp; They are included to allow programmers to create with a single
1514 line of code a three-dimensional object which can be used to test a variety
1515 of OpenGL functionality.&nbsp; None of the routines generates a display list 
1516 for the object which it draws.&nbsp; The functions generate normals appropriate 
1517 for lighting but, except for the teapon functions, do not generate texture 
1518 coordinates.                                    
1519                                   <h2> 15.1&nbsp; glutWireSphere, glutSolidSphere</h2>
1520   The "<tt>glutWireSphere</tt>" and "<tt>glutSolidSphere</tt>" functions
1521 draw a wireframe and solid sphere respectively.                         
1522           
1523                                   <p><b>Usage</b> </p>
1524                                    
1525                                   <p><tt>void glutWireSphere ( GLdouble dRadius, 
1526 GLint slices, GLint stacks ) ;</tt> </p>
1527                                    
1528                                   <p><tt>void glutSolidSphere ( GLdouble dRadius,
1529 GLint slices, GLint stacks ) ;</tt> </p>
1530                                    
1531                                   <p><tt>dRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1532                                   </tt>The desired radius of the sphere </p>
1533                                    
1534                                   <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1535                                   </tt>The desired number of slices (divisions 
1536 in the longitudinal direction) in the sphere </p>
1537                                    
1538                                   <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1539                                   </tt>The desired number of stacks (divisions 
1540 in the latitudinal direction) in the sphere.&nbsp; The number of points in 
1541 this direction, including the north and south poles, is <tt>stacks+1</tt>
1542   </p>
1543                                    
1544                                   <p><b>Description</b> </p>
1545                                    
1546                                   <p>The "<tt>glutWireSphere</tt>" and "<tt>
1547   glutSolidSphere</tt>" functions render a sphere centered at the origin
1548 of the modeling coordinate system.&nbsp; The north and south poles of the
1549 sphere are on the positive and negative Z-axes respectively and the prime
1550 meridian crosses the positive X-axis. </p>
1551                                    
1552                                   <p><b>Changes From GLUT</b> </p>
1553                                    
1554                                   <p>None that we know of. </p>
1555                                    
1556                                   <h2> 15.2&nbsp; glutWireTorus, glutSolidTorus</h2>
1557   The "<tt>glutWireTorus</tt>" and "<tt>glutSolidTorus</tt>" functions draw
1558  a wireframe and solid torus (donut shape) respectively.                
1559                    
1560                                   <p><b>Usage</b> </p>
1561                                    
1562                                   <p><tt>void glutWireTorus ( GLdouble dInnerRadius, 
1563 GLdouble dOuterRadius, GLint nSides, GLint nRings ) ;</tt> </p>
1564                                    
1565                                   <p><tt>void glutSolidTorus ( GLdouble dInnerRadius, 
1566 GLdouble dOuterRadius, GLint nSides, GLint nRings ) ;</tt> </p>
1567                                    
1568                                   <p><tt>dInnerRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1569                                   </tt>The desired inner radius of the torus, 
1570 from the origin to the circle defining the centers of the outer circles </p>
1571                                    
1572                                   <p><tt>dOuterRadius&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1573                                   </tt>The desired outer radius of the torus, 
1574 from the center of the outer circle to the actual surface of the torus </p>
1575                                    
1576                                   <p><tt>nSides&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1577                                   </tt>The desired number of segments in a
1578 single outer circle of the torus </p>
1579                                    
1580                                   <p><tt>nRings&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1581                                   </tt>The desired number of outer circles 
1582 around the origin of the torus </p>
1583                                    
1584                                   <p><b>Description</b> </p>
1585                                    
1586                                   <p>The "<tt>glutWireTorus</tt>" and "<tt>
1587   glutSolidTorus</tt>" functions render a torus centered at the origin of 
1588 the modeling coordinate system.&nbsp; The torus is circularly symmetric about 
1589 the Z-axis and starts at the positive X-axis. </p>
1590                                    
1591                                   <p><b>Changes From GLUT</b> </p>
1592                                    
1593                                   <p>None that we know of. </p>
1594                                    
1595                                   <h2> 15.3&nbsp; glutWireCone, glutSolidCone</h2>
1596   The "<tt>glutWireCone</tt>" and "<tt>glutSolidCone</tt>" functions draw
1597 a wireframe and solid cone respectively.                                
1598    
1599                                   <p><b>Usage</b> </p>
1600                                    
1601                                   <p><tt>void glutWireCone ( GLdouble base, 
1602 GLdouble height, GLint slices, GLint stacks ) ;</tt> </p>
1603                                    
1604                                   <p><tt>void glutSolidCone ( GLdouble base, 
1605 GLdouble height, GLint slices, GLint stacks ) ;</tt> </p>
1606                                    
1607                                   <p><tt>base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1608                                   </tt>The desired radius of the base of the
1609 cone </p>
1610                                    
1611                                   <p><tt>height&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1612                                   </tt>The desired height of the cone </p>
1613                                    
1614                                   <p><tt>slices&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1615                                   </tt>The desired number of slices around 
1616 the base of the cone </p>
1617                                    
1618                                   <p><tt>stacks&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1619                                   </tt>The desired number of segments between 
1620 the base and the tip of the cone (the number of points, including the tip, 
1621 is <tt>stacks + 1</tt>) </p>
1622                                    
1623                                   <p><b>Description</b> </p>
1624                                    
1625                                   <p>The "<tt>glutWireCone</tt>" and "<tt>
1626   glutSolidCone</tt>" functions render a right circular cone with a base
1627 centered at the origin and in the X-Y plane and its tip on the positive Z-axis.&nbsp; 
1628 The wire cone is rendered with triangular elements. </p>
1629                                    
1630                                   <p><b>Changes From GLUT</b> </p>
1631                                    
1632                                   <p>None that we know of. </p>
1633                                    
1634                                   <h2> 15.4&nbsp; glutWireCube, glutSolidCube</h2>
1635   The "<tt>glutWireCube</tt>" and "<tt>glutSolidCube</tt>" functions draw
1636 a wireframe and solid cube respectively.                                
1637    
1638                                   <p><b>Usage</b> </p>
1639                                    
1640                                   <p><tt>void glutWireCube ( GLdouble dSize 
1641 ) ;</tt> </p>
1642                                    
1643                                   <p><tt>void glutSolidCube ( GLdouble dSize 
1644 ) ;</tt> </p>
1645                                    
1646                                   <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1647                                   </tt>The desired length of an edge of the 
1648 cube </p>
1649                                    
1650                                   <p><b>Description</b> </p>
1651                                    
1652                                   <p>The "<tt>glutWireCube</tt>" and "<tt>
1653   glutSolidCube</tt>" functions render a cube of the desired size, centered 
1654 at the origin.&nbsp; Its faces are normal to the coordinate directions. </p>
1655                                    
1656                                   <p><b>Changes From GLUT</b> </p>
1657                                    
1658                                   <p>None that we know of. </p>
1659                                    
1660                                   <h2> 15.5&nbsp; glutWireTetrahedron, glutSolidTetrahedron</h2>
1661   The "<tt>glutWireTetrahedron</tt>" and "<tt>glutSolidTetrahedron</tt>"
1662 functions draw a wireframe and solid tetrahedron (four-sided Platonic solid)
1663 respectively.                                    
1664                                   <p><b>Usage</b> </p>
1665                                    
1666                                   <p><tt>void glutWireTetrahedron ( void )
1667 ;</tt> </p>
1668                                    
1669                                   <p><tt>void glutSolidTetrahedron ( void 
1670 ) ;</tt> </p>
1671                                    
1672                                   <p><b>Description</b> </p>
1673                                    
1674                                   <p>The "<tt>glutWireTetrahedron</tt>" and 
1675 "<tt>glutSolidTetrahedron</tt>" functions render a tetrahedron whose corners 
1676 are each a distance of one from the origin.&nbsp; The length of each side 
1677 is 2/3 sqrt(6).&nbsp; One corner is on the positive X-axis and another is 
1678 in the X-Y plane with a positive Y-coordinate. </p>
1679                                    
1680                                   <p><b>Changes From GLUT</b> </p>
1681                                    
1682                                   <p>None that we know of. </p>
1683                                    
1684                                   <h2> 15.6&nbsp; glutWireOctahedron, glutSolidOctahedron</h2>
1685   The "<tt>glutWireOctahedron</tt>" and "<tt>glutSolidOctahedron</tt>" functions
1686  draw a wireframe and solid octahedron (eight-sided Platonic solid) respectively.
1687                                    
1688                                   <p><b>Usage</b> </p>
1689                                    
1690                                   <p><tt>void glutWireOctahedron ( void ) 
1691 ;</tt> </p>
1692                                    
1693                                   <p><tt>void glutSolidOctahedron ( void )
1694 ;</tt> </p>
1695                                    
1696                                   <p><b>Description</b> </p>
1697                                    
1698                                   <p>The "<tt>glutWireOctahedron</tt>" and 
1699 "<tt>glutSolidOctahedron</tt>" functions render an octahedron whose corners 
1700 are each a distance of one from the origin.&nbsp; The length of each side 
1701 is sqrt(2).&nbsp; The corners are on the positive and negative coordinate 
1702 axes. </p>
1703                                    
1704                                   <p><b>Changes From GLUT</b> </p>
1705                                    
1706                                   <p>None that we know of. </p>
1707                                    
1708                                   <h2> 15.7&nbsp; glutWireDodecahedron, glutSolidDodecahedron</h2>
1709   The "<tt>glutWireDodecahedron</tt>" and "<tt>glutSolidDodecahedron</tt>
1710 "  functions draw a wireframe and solid dodecahedron (twelve-sided Platonic
1711 solid) respectively.                                    
1712                                   <p><b>Usage</b> </p>
1713                                    
1714                                   <p><tt>void glutWireDodecahedron ( void 
1715 ) ;</tt> </p>
1716                                    
1717                                   <p><tt>void glutSolidDodecahedron ( void 
1718 ) ;</tt> </p>
1719                                    
1720                                   <p><b>Description</b> </p>
1721                                    
1722                                   <p>The "<tt>glutWireDodecahedron</tt>" and
1723 "<tt>glutSolidDodecahedron</tt>" functions render a dodecahedron whose corners
1724 are each a distance of sqrt(3) from the origin.&nbsp; The length of each
1725 side is sqrt(5)-1.&nbsp; There are twenty corners; interestingly enough,
1726 eight of them coincide with the corners of a cube with sizes of length 2.
1727                                   </p>
1728                                    
1729                                   <p><b>Changes From GLUT</b> </p>
1730                                    
1731                                   <p>None that we know of. </p>
1732                                    
1733                                   <h2> 15.8&nbsp; glutWireIcosahedron, glutSolidIcosahedron</h2>
1734   The "<tt>glutWireIcosahedron</tt>" and "<tt>glutSolidIcosahedron</tt>"
1735 functions draw a wireframe and solid icosahedron (twenty-sided Platonic solid)
1736 respectively.                                    
1737                                   <p><b>Usage</b> </p>
1738                                    
1739                                   <p><tt>void glutWireIcosahedron ( void )
1740 ;</tt> </p>
1741                                    
1742                                   <p><tt>void glutSolidIcosahedron ( void 
1743 ) ;</tt> </p>
1744                                    
1745                                   <p><b>Description</b> </p>
1746                                    
1747                                   <p>The "<tt>glutWireIcosahedron</tt>" and 
1748 "<tt>glutSolidIcosahedron</tt>" functions render an icosahedron whose corners 
1749 are each a unit distance from the origin.&nbsp; The length of each side is 
1750 slightly greater than one.&nbsp; Two of the corners lie on the positive and 
1751 negative X-axes. </p>
1752                                    
1753                                   <p><b>Changes From GLUT</b> </p>
1754                                    
1755                                   <p>None that we know of. </p>
1756                                    
1757                                   <h2> 15.7&nbsp; glutWireRhombicDodecahedron, 
1758 glutSolidRhombicDodecahedron</h2>
1759   The "<tt>glutWireRhombicDodecahedron</tt>" and "<tt>glutSolidRhombicDodecahedron</tt>
1760   " functions draw a wireframe and solid rhombic dodecahedron (twelve-sided
1761  semi-regular solid) respectively.                                    
1762                                   <p><b>Usage</b> </p>
1763                                    
1764                                   <p><tt>void glutWireRhombicDodecahedron 
1765 ( void ) ;</tt> </p>
1766                                    
1767                                   <p><tt>void glutSolidRhombicDodecahedron 
1768 ( void ) ;</tt> </p>
1769                                    
1770                                   <p><b>Description</b> </p>
1771                                    
1772                                   <p>The "<tt>glutWireRhombicDodecahedron</tt>
1773   " and "<tt>glutSolidRhombicDodecahedron</tt>" functions render a rhombic 
1774 dodecahedron whose corners are at most a distance of one from the origin.&nbsp; 
1775 The rhombic dodecahedron has faces which are identical rhombuses (rhombi?) 
1776 but which have some vertices at which three faces meet and some vertices at
1777 which four faces meet.&nbsp; The length of each side is sqrt(3)/2.&nbsp; Vertices
1778 at which four faces meet are found at (0, 0, <u>+</u>1) and (<u>  +</u>sqrt(2)/2,
1779                                   <u>+</u>sqrt(2)/2, 0). </p>
1780                                    
1781                                   <p><b>Changes From GLUT</b> </p>
1782                                    
1783                                   <p>GLUT does not include these functions.
1784                                    </p>
1785                                    
1786                                   <h2> 15.10&nbsp; glutWireTeapot, glutSolidTeapot</h2>
1787   The "<tt>glutWireTeapot</tt>" and "<tt>glutSolidTeapot</tt>" functions
1788 draw a wireframe and solid teapot respectively.                         
1789           
1790                                   <p><b>Usage</b> </p>
1791                                    
1792                                   <p><tt>void glutWireTeapot ( GLdouble dSize 
1793 ) ;</tt> </p>
1794                                    
1795                                   <p><tt>void glutSolidTeapot ( GLdouble dSize
1796 ) ;</tt> </p>
1797                                    
1798                                   <p><tt>dSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
1799                                   </tt>The desired size of the teapot </p>
1800                                    
1801                                   <p><b>Description</b> </p>
1802                                    
1803                                   <p>The "<tt>glutWireTeapot</tt>" and "<tt>
1804   glutSolidTeapot</tt>" functions render a teapot of the desired size, centered 
1805 at the origin.&nbsp; This is the famous OpenGL teapot [add reference]. </p>
1806                                    
1807                                   <p><b>Changes From GLUT</b> </p>
1808                                    
1809                                   <p>None that we know of. </p>
1810                                    
1811                                   <h1> 16.0&nbsp;<a name="GameMode"></a>
1812   Game Mode Functions</h1>
1813                                       
1814                                   <h2> 16.1&nbsp; glutGameModeString</h2>
1815                                       
1816                                   <h2> 16.2&nbsp; glutEnterGameMode, glutLeaveGameMode</h2>
1817                                       
1818                                   <h2> 16.3&nbsp; glutGameModeGet</h2>
1819                                       
1820                                   <h1> 17.0&nbsp;<a name="VideoResize"></a>
1821   Video Resize Functions</h1>
1822                                       
1823                                   <h2> 17.1&nbsp; glutVideoResizeGet</h2>
1824                                       
1825                                   <h2> 17.2&nbsp; glutSetupVideoResizing, 
1826 glutStopVideoResizing</h2>
1827                                       
1828                                   <h2> 17.3&nbsp; glutVideoResize</h2>
1829                                       
1830                                   <h2> 17.4&nbsp; glutVideoPan</h2>
1831                                       
1832                                   <h1> 18.0&nbsp;<a name="ColorMap"></a>
1833   Color Map Functions</h1>
1834                                       
1835                                   <h2> 18.1&nbsp; glutSetColor, glutGetColor</h2>
1836                                       
1837                                   <h2> 18.2&nbsp; glutCopyColormap</h2>
1838                                       
1839                                   <h1> 19.0&nbsp;<a name="Miscellaneous"></a>
1840   Miscellaneous Functions</h1>
1841                                       
1842                                   <h2> 19.1&nbsp; glutIgnoreKeyRepeat, glutSetKeyRepeat</h2>
1843                                       
1844                                   <h2> 19.2&nbsp; glutForceJoystickFunc</h2>
1845                                       
1846                                   <h2> 19.3&nbsp; glutReportErrors</h2>
1847                                       
1848                                   <h1> 20.0&nbsp;<a name="UsageNotes"></a>
1849   Usage Notes</h1>
1850                                       
1851                                   <p> The following environment variables
1852 are recognized by <i>freeglut</i>: </p>
1853                                   <ul>
1854                                     <li>DISPLAY - specifies a display name.<br>
1855                                     </li>
1856                                     <li>GLUT_FPS - specifies a time interval
1857 (in milliseconds) for reporting framerate messages to stderr.  For example,
1858 if FREEGLUT_FPS is set to 5000, every 5 seconds a message will be printed
1859 to stderr showing the current frame rate.  The frame rate is measured by counting
1860 the number of times glutSwapBuffers() is called over the time interval.</li>
1861                                     <li>GLUT_ICON - specifies the icon that
1862 goes in the upper left-hand corner of the <i>freeglut</i><i> </i>windows </li>
1863                                   </ul>
1864                                   <h1> 21.0&nbsp;<a name="ImplementationNotes"></a>
1865   Implementation Notes</h1>
1866                                       
1867 <h1> 22.0&nbsp;<a name="GLUT_State"></a>
1868 GLUT State</h1>
1869                                       
1870 <h1> 23.0&nbsp;<a name="Freeglut.h_Header"></a>
1871 "freeglut.h" Header File</h1>
1872                                       
1873
1874 <p>
1875 FreeGLUT users should normally just include GL/glut.h in their programs.
1876 Programs which need FreeGLUT-specific functions should also include
1877 GL/freeglut_ext.h as follows:
1878 </p>
1879
1880 <pre>
1881 #include &lt;GL/glut.h&gt;
1882 #ifdef FREEGLUT
1883 #include &lt;GL/freeglut_ext.h&gt;
1884 #endif
1885 </pre>
1886
1887 <p>
1888 Compile-time FreeGLUT version testing can be done as follows:
1889 </p>
1890
1891 <pre>
1892 #ifdef FREEGLUT_VERSION_1_4
1893   code specific to FreeGLUT 1.4 or later here
1894 #endif
1895 </pre>
1896
1897 <p>
1898 In future releases, FREEGLUT_VERSION_1_5, FREEGLUT_VERSION_1_6, etc will
1899 be defined.  This scheme mimics OpenGL conventions.
1900 </p>
1901
1902 <p>
1903 The FreeGLUT version can be queried at runtime by calling
1904 glutGet(GLUT_VERSION).
1905 The result will be X*10000+Y*100+Z where X is the major version, Y is the
1906 minor version and Z is the patch level.
1907 </p>
1908 <p>
1909 This may be used as follows:
1910 </p>
1911
1912 <pre>
1913 if (glutGet(GLUT_VERSION) < 10300) {
1914     printf("Sorry, you need FreeGLUT version 1.3.0 or later to run this program.\n");
1915     exit(1);
1916 }
1917 </pre>
1918
1919
1920
1921 <h1> 24.0&nbsp;<a name="References"></a>
1922 References</h1>
1923                                       
1924 <h1> 25.0&nbsp;<a name="Index"></a>
1925 Index</h1>
1926 &nbsp;                                    
1927 <p>&nbsp; <br>
1928  &nbsp; <br>
1929  &nbsp; <br>
1930  &nbsp; <br>
1931  &nbsp; <br>
1932  &nbsp; <br>
1933  &nbsp; <br>
1934  &nbsp; <br>
1935  &nbsp; <br>
1936  &nbsp; <br>
1937  &nbsp; <br>
1938  &nbsp; <br>
1939  &nbsp; <br>
1940  &nbsp; <br>
1941  &nbsp; <br>
1942  &nbsp; <br>
1943  &nbsp; <br>
1944  &nbsp; <br>
1945  &nbsp; <br>
1946  &nbsp; <br>
1947  &nbsp; <br>
1948  &nbsp; <br>
1949  &nbsp; </p>
1950                                    
1951                                   </body>
1952                                   </html>