| |
| |
| GLUT for Win32 README |
| |
| |
| |
| VERSION/INFO: |
| |
| This is GLUT for Win32 version 3.7.6 as of Nov 8th 2001. |
| See the COPYRIGHT section for distribution and copyright notices. |
| Send all bug reports and questions for this version of GLUT to |
| Nate Robins [nate@pobox.com]. |
| |
| For more information about GLUT for Win32, see the web page: |
| www.pobox.com/~nate/glut.html or subscribe to the GLUT for Win32 |
| mailing list by sending e-mail to majordomo@perp.com with |
| "subscribe glut" in the body of the message. |
| |
| For general information about GLUT, see the GLUT web page: |
| http://reality.sgi.com/opengl/glut3/glut3.html and be sure to |
| check the GLUT FAQ first for any questions that you may have: |
| http://reality.sgi.com/opengl/glut3/glut-faq.html |
| |
| |
| COMPILING/INSTALLATION: |
| |
| o Precompiled versions of the DLL and import library can be |
| found on the GLUT for Win32 web page mentioned above. |
| |
| o Microsoft Developer Studio 6 workspace and project files have |
| been included in the source code distribution. |
| |
| To build the glut dll: |
| First, open Microsoft Developer Studio. |
| Then, select File -> Open Workspace and find the glut.dsw file |
| in the file dialog and double-click on it. |
| Finally, select Build -> Build glut32.dll. |
| When the build is finished, it will copy: |
| glut32.dll to %WinDir%\System, |
| glut32.lib to $(MSDevDir)\..\..\VC98\lib, and |
| glut.h to $(MSDevDir)\..\..\VC98\include\GL. |
| |
| Additional workspace files have been included in the progs, test |
| and lib directories to build the progs, tests and libs respectively. |
| |
| |
| BORLAND NOTES: |
| |
| From what I understand, Borland supplies a utility that |
| converts Microsoft Visual C++ .libs into Borland compatible |
| files. Therefore, the best method for Borland users is |
| probably to get the precompiled versions of the library and |
| convert the library. To create an import library for Borland |
| from the DLLs, use the following command (from a command prompt): |
| IMPLIB glut32.lib glut32.dll |
| If IMPLIB crashes when called this way, try |
| IMPLIB glut32.lib glut32.def |
| using the glut32.def file in this distribution. |
| |
| |
| FORTRAN NOTES: |
| |
| Bill Mitchell [william.mitchell@nist.gov] has put considerable |
| effort into getting GLUT to work with different compilers for |
| Fortran 90. He indicates that you should copy the f90glut.h |
| file to your $(MSDevDir)\..\..\VC98\include\GL directory. |
| Then, just build GLUT as usual. The Fortran 90 interface, f90gl, |
| can be obtained at http://math.nist.gov/f90gl and contains |
| installation instructions and usage examples. |
| |
| |
| MISC NOTES: |
| |
| o Overlay support is not implemented, nor are there any plans to |
| implement it in the near future. |
| |
| o To customize the windows icon, you can use the resource name |
| GLUT_ICON. For example, create an icon named "glut.ico", and |
| create a file called glut.rc that contains the following: |
| GLUT_ICON ICON glut.ico |
| then compile the glut.rc file with the following: |
| rc /r glut |
| and link the resulting glut.res file into your executable |
| (just like you would an object file). |
| Alternatively, you can simply add the glut.rc file to your |
| project if you are using Microsoft Developer Studio. |
| |
| |
| IMPLEMENTATION DEPENDENT DIFFERENCES: |
| |
| There are a few differences between the Win32 version of GLUT |
| and the X11 version of GLUT. Those are outlined here. Note |
| that MOST of these differences are allowed by the GLUT |
| specification. Bugs and unsupported features are outlined in |
| the UNSUPPORTED/BUGS section. |
| |
| o glutInit: |
| The following command line options have no meaning (and are |
| ignored) in GLUT for Win32: |
| -display, -indirect, -direct, -sync. |
| |
| o glutInitWindowPosition, glutPositionWindow: |
| Win32 has two different coordinate systems for windows. |
| One is in terms of client space and the other is the whole |
| window space (including the decorations). If you |
| glutPositionWindow(0, 0), GLUT for Win32 will place the |
| window CLIENT area at 0, 0. This will cause the window |
| decorations (title bar and left edge) to be OFF-SCREEN, but |
| it gives the user the most flexibility in positioning. |
| HOWEVER, if the user specifies glutInitWindowPosition(0, 0), |
| the window is placed relative to window space at 0, 0. |
| This will cause the window to be opened in the upper left |
| corner with all the decorations showing. This behaviour is |
| acceptable under the current GLUT specification. |
| |
| o glutSetIconTitle, glutSetWindowTitle: |
| There is no separation between Icon title and Window title |
| in Win32. Therefore, setting an icon title in Win32 has |
| no effect. |
| |
| o glutSetCursor: |
| As indicated in the GLUT specification, cursors may be |
| different on different platforms. This is the case in GLUT |
| for Win32. For the most part, the cursors will match the |
| meaning, but not necessarily the shape. Notable exceptions |
| are the GLUT_CURSOR_INFO & GLUT_CURSOR_SPRAY which use the |
| crosshair cursor and the GLUT_CURSOR_CYCLE which uses the |
| 'no' or 'destroy' cursor in Win32. |
| |
| o glutVisibilityFunc: |
| Win32 seems to be unable to determine if a window is fully |
| obscured. Therefore, the visibility of a GLUT window is |
| only reflected by its Iconic, Hidden or Shown state. That |
| is, even if a window is fully obscured, in GLUT for Win32, |
| it is still "visible". |
| |
| o glutEntryFunc: |
| Window Focus is handled differently in Win32 and X. |
| Specifically, the "window manager" in Win32 uses a "click to |
| focus" policy. That is, in order for a window to receive |
| focus, a mouse button must be clicked in it. Likewise, in |
| order for a window to loose focus, a mouse button must be |
| clicked outside the window (or in another window). |
| Therefore, the Enter and Leave notification provided by GLUT |
| may behave differently in the Win32 and in X11 versions. |
| There is a viable workaround for this. A program called |
| "Tweak UI" is provided by Microsoft which can be used to |
| change the focus policy in Win32 to "focus follows mouse". |
| It is available from the Microsoft Web Pages: |
| http://www.microsoft.com/windows/software/PowerToy.htm |
| |
| o glutCopyColormap: |
| GLUT for Win32 always copies the colormap. There is never |
| any sharing of colormaps. This is probably okay, since |
| Win32 merges the logical palette and the physical palette |
| anyway, so even if there are two windows with totally |
| different colors in their colormaps, Win32 will find a |
| (hopefully) good match between them. |
| |
| o glutIdleFunc + menus: |
| The glut idle function will NOT be called when a menu is |
| active. This causes all animation to stop when a menu is |
| active (in general, this is probably okay). Timer |
| functions will still fire, however. If the timer callback |
| draws into the rendering context, the drawing will not show |
| up until after the menu has finished, though. |
| |
| |
| UNSUPPORTED/BUGS: |
| |
| o glutAttachMenu: |
| Win32 only likes to work with left and right mouse buttons. |
| Especially so with popup menus. Therefore, when attaching |
| the menu to the middle mouse button, the LEFT mouse button |
| must be used to select from the menu. |
| |
| o glutSpaceball*, glutButtonBox*, glutTablet*, glutDials*: |
| None of the special input devices are supported at this |
| time. |
| |
| o When resizing or moving a GLUT for Win32 window, no updating |
| is performed. This causes the window to leave "tracks" on |
| the screen when getting bigger or when previously obscured |
| parts are being revealed. I put in a bit of a kludgy |
| workaround for those that absolutely can't have the weird |
| lines. The reshape callback is called multiple times for |
| reshapes. Therefore, in the reshape callback, some drawing |
| can be done. It should probably be limited to a color buffer |
| clear. |
| |
| o The video resizing capabilities of GLUT 3.3+ for X11 is |
| currently unimplemented (this is probably ok, since it |
| really isn't part of the spec until 4.0). I doubt that |
| this will ever be part of GLUT for Win32, since there is no |
| hardware to support it. A hack could simply change the |
| resolution of the desktop. |
| |
| |
| CHANGES/FIXES: |
| |
| (Nov 8, '01) |
| x Released 3.7.6 |
| |
| (Nov 8, '01) |
| x Changed fullscreen mode from TOPMOST back to simply TOP, since |
| (it turns out) many people use windows atop a GLUT window. |
| |
| (Nov 8, '01) |
| x Added code to prevent CPU spiking when no idle function is |
| registered. Otherwise, if an idle function is registered, spike |
| CPU so that the idle function gets all the attention it needs and |
| if this is a problem on the program side, the user can stick a |
| sleep() in their idle function. I believe that this strikes the |
| best balance betweeen GLUT being fast, and also being "nice" to |
| other processes. Thanks to James Wright for reporting this bug. |
| |
| (Nov 8, '01) |
| x Fixed bug in motion callback handler which wasn't setting the |
| current window, so multiple window apps (e.g., any GLUI app) |
| wouldn't get the callback correctly. |
| |
| (Oct 4, '01) |
| x Fixed bug in glutEnterGameMode() that caused new windows to not |
| be in "fullscreen" mode, so they got window decorations. |
| |
| (Oct 4, '01) |
| x Fixed bug in glutEnterGameMode() that caused new windows to not |
| be in "fullscreen" mode, so they got window decorations. |
| |
| (Oct 3, '01) |
| x Fixed bug in getVisualInfoFromString(): visuals not reloaded on |
| display mode change. Reload visuals each time they are queried. |
| This fixes a problem with Win32 because the list of availabe Visuals |
| (Pixelformats) changes after a change in displaymode. The problem |
| occurs when switching to gamemode and back. Thanks to Michael |
| Wimmer for pointing this out & providing the fix. |
| |
| (Oct 3, '01) |
| x Fixed bug in XGetVisualInfo(): pixelformats enumerated incorrectly. |
| Passing 0 as a pixelformat index to DescribePixelFormat gives |
| unpredictible results (e.g., this fails on the Voodoo opengl32.dll |
| and always reports 0 as the last available pixelformat index). |
| Thanks to Michael Wimmer for pointing this out & providing the fix. |
| |
| (Oct 3, '01) |
| x Fixed bug in glXGetConfig(): pixelformats enumerated incorrectly. The |
| test was OpenGL support OR draw to window, but should be AND. Thanks |
| to Michael Wimmer for pointing this out & providing the fix. |
| |
| (Sep 28, '01) |
| x Fixed glutChangeToSubMenu()/glutChangeToMenuEntry() bug where if you |
| went back and forth between a submenu and a plain entry, the submenu |
| wouldn't be updated properly. |
| |
| (Sep 28, '01) |
| x glutSetIconTitle() is now a nop. |
| |
| (Sep 28, '01) |
| x glutFullScreen() now sets the window as TOPMOST, therefore, the |
| window will always be on top (this essentially disables alt-tabbing). |
| |
| (Sep 28, '01) |
| x The key repeat ignore flag is now honored correctly. |
| |
| (Sep 28, '01) |
| x Key presses are now reported more accurately and fully, in |
| particular, modified up events (i.e., SHIFT-2) are now reported |
| correctly. |
| |
| (Sep 28, '01) |
| x Subwindows nested arbitrarily deep get their keyboard callbacks |
| correctly now. |
| |
| (Sep 28, '01) |
| x Major rewrite of the window procedure code to clean it up and make |
| way for other bug fixes. |
| |
| (Sep 23, '01) |
| x Fixed noof example program to use RAND_MAX instead of assumed |
| max of 2147483647.0. (Now it looks _much_ better!) |
| |
| (Sep 22, '01) |
| x Fixed sunlight example program. globe.raw data file was corrupt, |
| added a new one. |
| |
| (Sep 22, '01) |
| x Fixed zcomposite example program to print message if overlay |
| support is not found (instead of crashing). |
| |
| (Jan 22, '01) |
| x Fixed malloc(0) bug in Win32 version of XGetVisualInfo. Thanks |
| to Kekoa Proudfoot for bringing this to my attention. |
| |
| (Dec 12, '00) |
| x Added data files for the advanced & advanced97 programs. |
| |
| (Dec 12, '00) |
| x Added Developer Studio 6 project and workspace files for pretty |
| much everything (the stuff left out was usually unix specific). |
| |
| (Dec 7, '00) |
| x Fixed several compilation problems & corrupt files. Thanks to |
| Alexander Stohr for bringing these to my attention and providing |
| detailed fixes. |
| |
| (Dec 6, '00) |
| x Fixed compiler support for lcc. Thanks to Gordon for bringing |
| this to my attention and debugging fixes. |
| |
| (Nov 8, '00) |
| x Fixed submenu problem (sometimes the menu callback was not |
| called for valid items). Thanks to Michael Keeley. |
| |
| (Oct 16, '00) |
| x Corrected corrupt duck.iv file. Thanks to Jon Willeke for finding |
| this problem. |
| |
| (Sept 27, '00) |
| x Fixed bug in processWorkList that could cause a hang. Thanks to |
| Bill Volz & Daniel Azuma. |
| |
| (Sept 26, '00) |
| x Added mui DLL project file (thanks to DMWeldy@ugsolutions.com). |
| |
| (Sept 9, '00) |
| x Fixed Delete key bug (crash when no keyboard callback was |
| registered, but a special key callback was). Thanks to |
| Kent Bowling (kent_bowling@hotmail.com) for finding this bug. |
| |
| (May 18, '00) |
| x Fixed subwindow keyboard callbacks. |
| |
| (May 22, '97) |
| o Menus don't work under Windows 95 |
| x Fixed! Added a unique identifier to each menu item, and a |
| search function to grab a menu item given the unique identifier. |
| |
| (May 21, '97) |
| o A few minor bug fixes here and there. |
| x Thanks to Bruce Silberman and Chris Vale for their help with |
| this. We now have a DLL! |
| |
| (Apr 25, '97) |
| o DLL version of the library is coming (as soon as I figure out |
| how to do it -- if you know, let me know). |
| x Thanks to Bruce Silberman and Chris Vale for their help with |
| this. We now have a DLL! |
| |
| (Apr 24, '97) |
| x Added returns to KEY_DOWN etc messages so that the F10 key |
| doesn't toggle the system menu anymore. |
| |
| (Apr 7, '97) |
| o Palette is incorrect for modes other than TrueColor. |
| x Fixed this by forcing a default palette in modes that aren't |
| Truecolor in order to 'simulate' it. The applications |
| program shouldn't have to do this IMHO, but I guess we |
| can't argue with Microsoft (well, we can, but what good |
| will it do?). |
| |
| (Apr 2, '97) |
| x Added glut.ide file for Borland users. |
| |
| (Apr 2, '97) |
| x Fixed a bug in the WM_QUERYNEWPALETTE message. Wasn't |
| checking for a null colormap, then de-ref'd it. Oops. |
| |
| (Mar 13, '97) |
| o glutTimerFunc: |
| Currently, GLUT for Win32 programs busy waits when there is |
| an outstanding timer event (i.e., there is no select() |
| call). I haven't found this to be a problem, but I plan to |
| fix it just because I can't bear the thought of a busy wait. |
| x Added a timer event and a wait in the main loop. This fixes |
| the CPU spike. |
| |
| (Mar 11, '97) |
| x Fixed subwindow visibility. The visibility callback of |
| subwindows wasn't being called, now it is. |
| |
| (Mar 11, '97) |
| o glutGetHDC, glutGetHWND: |
| In order to support additional dialog boxes, wgl fonts, and |
| a host of other Win32 dependent structures, two functions |
| have been added that operate on the current window in GLUT. |
| The first (glutGetHDC) returns a handle to the current |
| windows device context. The second (glutGetHWND) returns |
| handle to the current window. |
| x Took these out to preserve GLUT portability. |
| |
| (Mar 11, '97) |
| x Fixed the glutWarpPointer() coordinates. Were relative to |
| the screen, now relative to window (client area) origin |
| (which is what they're supposed to be). |
| |
| (Mar 11, '97) |
| o glutCreateMenu, glutIdleFunc: |
| Menu's are modal in Win32. That is, they don't allow any |
| messages to be processed while they are up. Therefore, if |
| an idle function exists, it will not be called while |
| processing a menu. |
| x Fixed! I've put in a timer function that fires every |
| millisecond while a menu is up. The timer function handles |
| idle and timer events only (which should be the only |
| functions that are firing when a menu is up anyway). |
| |
| (Mar 7 '97) |
| x Fixed minor bugs tracked down by the example programs. |
| |
| (Mar 6, '97) |
| x Merged 3.3 GLUT for X11 into 3.2 GLUT for Win32. New code |
| structure allows for EASY merging! |
| |
| o In Win32, the parent gets the right to set the cursor of |
| any of its children. Therefore, a child windows cursor |
| will 'blink' between its cursor and its parent. |
| x Fixed this by checking whether the cursor is in a child |
| window or not. |
| |
| (Feb 28 '97) |
| o On initial bringup apps are getting 2 display callbacks. |
| x Fixed by the Fev 28 re-write. |
| |
| o Some multiple window (not subwindow) functionality is messed up. |
| See the sphere.exe program. |
| x Fixed by the Feb 28 re-write. |
| |
| o GLUT for Win32 supports color index mode ONLY in a paletted |
| display mode (i.e., 256 or 16 color mode). |
| x Fixed this in the re-write. If you can get a color index |
| visual (pixel format) you can use color index mode. |
| |
| (Feb 28 '97) |
| o Quite a few bugs (and incompatibilities) were being caused |
| by the structure that I used in the previous port of GLUT. |
| Therefore I decided that it would be best to "get back to |
| the roots". I re-implemented most of glut trying to stick |
| with the structure layed out by Mark. The result is a much |
| more stable version that passes ALL (!) (except overlay) |
| the tests provided by Mark. In addition, this new |
| structure will allow future enhancements by Mark to be |
| integrated much more quickly into the Win32 version. Also, |
| I'm now ordering the bugs in reverse, so that the most |
| recently fixed appear at the top of the list. |
| |
| (9/8/96) |
| o Changed the glutGetModifiers code to produce an error if not |
| called in the core input callbacks. |
| |
| (9/11/96) |
| o If the alt key is pressed with more than one other modifier key |
| it acts as if it is stuck |
| and released again. |
| x Fixed. |
| |
| (9/12/96) |
| o When a submenu is attached to a menu, sometimes a GPF occurs. |
| Fixed. Needed to set the submenu before referencing it's members. |
| |
| o Kenny: Also, one little problem, I attached the menu to the |
| right-button, but when the left-button is pressed I detach |
| it to give the right-button new meaning; if I pop-up the menu and I |
| don't want to select anything, like most users, I click off of the |
| menu to make it disappear. When I do this, I get a GLUT error and |
| the program terminates because I am altering the menu attachment |
| from within the button press while the menu is active. |
| x Fixed. Needed to finish the menu when the user presses the button, |
| not just when a button is released. |
| |
| o GLUT for Win32 emulates a middle mouse button by checking if |
| both mouse buttons are down. This causes a lot of problems with |
| the menu and other multiple mouse button things. |
| x Fixed. No more middle mouse button emulation. Perhaps it would |
| be a good idea to emulate the middle mouse button (if not present) |
| with a key? |
| |
| (9/15/96) |
| o Added code to accept a user defined icon. If no icon is provided, |
| a default icon is loaded. |
| |
| (9/19/96) |
| o Shane: Command line options seem to be screwed up. (9/13) |
| x Fixed. The geometry command line was broken, and so was the |
| gldebug command line. |
| |
| o Fixed a bug in the default glut reshape. It was looking for the |
| parent of the current window and GPF'ing if there wasn't a parent. |
| Put in a check for a parent, and if none is there, use the |
| child. |
| |
| o Idle function sucks up all processor cycles. (9/8/96) |
| x I don't know if this is avoidable. If you have a tight rendering |
| loop, it may be that the processor time is going to be sucked up |
| no matter what. You can add a sleep() to the end of your render |
| loop if you would like to yeild to other processes and you don't |
| care too much about the speed of your rendering loop. If you have |
| Hardware that supports OpenGL (like a 3Dpro card, or GLint card) |
| then this should be less of a problem, since it won't be rendering |
| in software. (9/11/96) |
| |
| o If a window is fully obscured by another window, the visibility |
| callback is NOT called. As far as I can tell, this is a limitation |
| of the Win32 api, but a workaround is being searched for. (9/8/96) |
| x Limitation of the Win32 API |
| |
| o Fixed the entry functions. They only work if the keyboard focus |
| changes. Therefore, in most Win32 systems, the mouse must be |
| pressed outside of the window to get a GLUT_LEFT message and |
| then pressed inside the window for a GLUT_ENTERED message. |
| |
| o Alt modifier key doesn't work with keyboard callback. (9/8/96) |
| x Probably okay, because the glut spec says that these keys can |
| be intercepted by the system (which the alt key is...) (9/11/96) |
| |
| (11/17/96) |
| o glutRemoveMenuItem() not working properly. |
| x Thanks to Gary (grc@maple.civeng.rutgers.edu) for the fix to |
| this one. |
| |
| o Timer functions are messed up. |
| x Thanks to Joseph Galbraith for the fix to this one. |
| |
| (12/9/96) |
| o One (minor) difference came up between the X version of glut |
| and the nt one which you should know about. It is not a new |
| problem, and it concerns co-ords returned to the pointer |
| callbacks. (glutMotionFunc, glutMouseFunc) |
| Under X, you get co-ords in the range 0 +/- 2^15, under NT |
| you get 0..2^16. This is only really a problem when moving |
| above or to the left of the window. |
| eg dragging one pixel ABOVE the window will give :- |
| under x11 : y = -1 |
| under nt : y = 2^16 -1 |
| x Put in fix provided by Shane Clauson. |
| |
| (12/17/96) |
| o Idle functions not working properly for multiple windows. |
| x Fixed this by posting an idle message to every window in the |
| window list when idle. |
| |
| (12/18/96) |
| o glutSetCursor() was misbehaving (lthomas@cco.caltech.edu). |
| x Win32 requires that the hCursor member of the window class |
| be set to NULL when the class is registered or whenever the |
| mouse is moved, the original cursor is replaced (go |
| figure!). Now sets the cursor whenever a WM_MOUSEMOVE message |
| is received, because the WM_SETCURSOR event resets the cursor |
| even when in the decoration area. |
| |
| o Geometry is not being handled quite right. The numbers don't |
| take into account the window decorations. That is, if I say |
| make a window 100x100, then the WHOLE window (not just the |
| client area) is 100x100. Therefore, the client (opengl) area |
| is smaller than 100x100. (9/8/96) |
| x Fixed. Added code to subtract the decoration size on glutGet() |
| and add the decoration size on glutReshapeWindow(). |
| |
| o Multiple glutPostRedisplay() calls are NOT being combined. |
| To get round the "coalesce" problem on glutPostRedisplay, |
| the easiest solution is to roll-your-own coalesce by |
| keeping a global "dirty" flag in the app (eg replace all |
| calls to glutPostRedisplay with image_dirty=TRUE;), and to |
| handle image_dirty with a single glutPostRedisplay in the |
| idle callback when required. (erk - but increases |
| performance for my particular app (a rendering engine on |
| the end of a pipleine with a stream of graphics updates) by |
| a couple of orders of magnitude ! ) (9/8/96) |
| x Added code to coalesce redisplays. Every idle cycle, a |
| check is made to see which windows need redisplay, if they |
| need it, a redisplay is posted. The glutPostRedisplay() |
| call is just a stub that sets a flag. |
| |
| |
| THANKS: |
| |
| Special thanks to the following people for extensive testing, |
| suggestions, fixes and help: |
| |
| Alexander Stohr |
| Shane Clauson |
| Kenny Hoff |
| Richard Readings |
| Paul McQuesten |
| Philip Winston |
| JaeWoo Ahn |
| Joseph Galbraith |
| Paula Higgins |
| Sam Fortin |
| Chris Vale |
| Bill Mitchell |
| |
| and of course, the original author of GLUT: |
| Mark Kilgard. |
| |
| and many others... |
| |
| |
| COPYRIGHT: |
| |
| The OpenGL Utility Toolkit distribution for Win32 (Windows NT & |
| Windows 95) contains source code modified from the original source |
| code for GLUT version 3.3 which was developed by Mark J. Kilgard. The |
| original source code for GLUT is Copyright 1997 by Mark J. Kilgard. |
| GLUT for Win32 is Copyright 1997 by Nate Robins and is not in the |
| public domain, but it is freely distributable without licensing fees. |
| It is provided without guarantee or warrantee expressed or implied. |
| It was ported with the permission of Mark J. Kilgard by Nate Robins. |
| |
| THIS SOURCE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER |
| EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
| OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. |
| |
| OpenGL (R) is a registered trademark of Silicon Graphics, Inc. |
| |