README-win32.txt
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:26k
源码类别:

GIS编程

开发平台:

Visual C++

  1.                 GLUT for Win32 README
  2.                 ---------------------
  3. VERSION/INFO:
  4.     This is GLUT for Win32 version 3.7.6 as of Nov 8th 2001.
  5.     See the COPYRIGHT section for distribution and copyright notices.
  6.     Send all bug reports and questions for this version of GLUT to 
  7.     Nate Robins [nate@pobox.com].
  8.     For more information about GLUT for Win32, see the web page:
  9.     www.pobox.com/~nate/glut.html or subscribe to the GLUT for Win32 
  10.     mailing list by sending e-mail to majordomo@perp.com with 
  11.     "subscribe glut" in the body of the message.
  12.     For general information about GLUT, see the GLUT web page:
  13.     http://reality.sgi.com/opengl/glut3/glut3.html and be sure to
  14.     check the GLUT FAQ first for any questions that you may have:
  15.     http://reality.sgi.com/opengl/glut3/glut-faq.html
  16. COMPILING/INSTALLATION:
  17.     o  Precompiled versions of the DLL and import library can be
  18.        found on the GLUT for Win32 web page mentioned above.
  19.     o  Microsoft Developer Studio 6 workspace and project files have
  20.        been included in the source code distribution.
  21.        
  22.        To build the glut dll: 
  23.        First, open Microsoft Developer Studio.
  24.        Then, select File -> Open Workspace and find the glut.dsw file
  25.        in the file dialog and double-click on it.  
  26.        Finally, select Build -> Build glut32.dll.
  27.        When the build is finished, it will copy:
  28.        glut32.dll to %WinDir%System, 
  29.        glut32.lib to $(MSDevDir)....VC98lib, and 
  30.        glut.h     to $(MSDevDir)....VC98includeGL.
  31.        
  32.        Additional workspace files have been included in the progs, test
  33.        and lib directories to build the progs, tests and libs respectively.
  34. BORLAND NOTES:
  35.     From what I understand, Borland supplies a utility that
  36.     converts Microsoft Visual C++ .libs into Borland compatible
  37.     files.  Therefore, the best method for Borland users is
  38.     probably to get the precompiled versions of the library and
  39.     convert the library.  To create an import library for Borland 
  40.     from the DLLs, use the following command (from a command prompt):
  41.           IMPLIB glut32.lib glut32.dll
  42.     If IMPLIB crashes when called this way, try
  43.           IMPLIB glut32.lib glut32.def
  44.     using the glut32.def file in this distribution.
  45. FORTRAN NOTES:
  46.     Bill Mitchell [william.mitchell@nist.gov] has put considerable
  47.     effort into getting GLUT to work with different compilers for
  48.     Fortran 90.  He indicates that you should copy the f90glut.h
  49.     file to your $(MSDevDir)....VC98includeGL directory.  
  50.     Then, just build GLUT as usual.  The Fortran 90 interface, f90gl, 
  51.     can be obtained at http://math.nist.gov/f90gl and contains 
  52.     installation instructions and usage examples.
  53. MISC NOTES:
  54.     o  Overlay support is not implemented, nor are there any plans to 
  55.        implement it in the near future.
  56.     o  To customize the windows icon, you can use the resource name
  57.        GLUT_ICON.  For example, create an icon named "glut.ico", and
  58.        create a file called glut.rc that contains the following:
  59.        GLUT_ICON ICON glut.ico
  60.        then compile the glut.rc file with the following:
  61.        rc /r glut
  62.        and link the resulting glut.res file into your executable
  63.        (just like you would an object file).
  64.        Alternatively, you can simply add the glut.rc file to your
  65.        project if you are using Microsoft Developer Studio.
  66. IMPLEMENTATION DEPENDENT DIFFERENCES:
  67.     There are a few differences between the Win32 version of GLUT
  68.     and the X11 version of GLUT.  Those are outlined here.  Note
  69.     that MOST of these differences are allowed by the GLUT
  70.     specification.  Bugs and unsupported features are outlined in
  71.     the UNSUPPORTED/BUGS section.
  72.     o  glutInit:
  73.        The following command line options have no meaning (and are
  74.        ignored) in GLUT for Win32:
  75.        -display, -indirect, -direct, -sync.
  76.     o  glutInitWindowPosition, glutPositionWindow:
  77.        Win32 has two different coordinate systems for windows.
  78.        One is in terms of client space and the other is the whole
  79.        window space (including the decorations).  If you
  80.        glutPositionWindow(0, 0), GLUT for Win32 will place the
  81.        window CLIENT area at 0, 0.  This will cause the window
  82.        decorations (title bar and left edge) to be OFF-SCREEN, but
  83.        it gives the user the most flexibility in positioning.
  84.        HOWEVER, if the user specifies glutInitWindowPosition(0, 0),
  85.        the window is placed relative to window space at 0, 0.
  86.        This will cause the window to be opened in the upper left
  87.        corner with all the decorations showing.  This behaviour is
  88.        acceptable under the current GLUT specification.
  89.     o  glutSetIconTitle, glutSetWindowTitle:
  90.        There is no separation between Icon title and Window title
  91.        in Win32.  Therefore, setting an icon title in Win32 has
  92.        no effect.
  93.     o  glutSetCursor:
  94.        As indicated in the GLUT specification, cursors may be
  95.        different on different platforms.  This is the case in GLUT
  96.        for Win32.  For the most part, the cursors will match the
  97.        meaning, but not necessarily the shape.  Notable exceptions
  98.        are the GLUT_CURSOR_INFO & GLUT_CURSOR_SPRAY which use the
  99.        crosshair cursor and the GLUT_CURSOR_CYCLE which uses the
  100.        'no' or 'destroy' cursor in Win32.
  101.     o  glutVisibilityFunc:
  102.        Win32 seems to be unable to determine if a window is fully
  103.        obscured.  Therefore, the visibility of a GLUT window is
  104.        only reflected by its Iconic, Hidden or Shown state.  That
  105.        is, even if a window is fully obscured, in GLUT for Win32,
  106.        it is still "visible".
  107.     o  glutEntryFunc:
  108.        Window Focus is handled differently in Win32 and X.
  109.        Specifically, the "window manager" in Win32 uses a "click to
  110.        focus" policy.  That is, in order for a window to receive
  111.        focus, a mouse button must be clicked in it.  Likewise, in
  112.        order for a window to loose focus, a mouse button must be
  113.        clicked outside the window (or in another window).
  114.        Therefore, the Enter and Leave notification provided by GLUT
  115.        may behave differently in the Win32 and in X11 versions.
  116.        There is a viable workaround for this.  A program called
  117.        "Tweak UI" is provided by Microsoft which can be used to
  118.        change the focus policy in Win32 to "focus follows mouse".
  119.        It is available from the Microsoft Web Pages:
  120.        http://www.microsoft.com/windows/software/PowerToy.htm
  121.     o  glutCopyColormap:
  122.        GLUT for Win32 always copies the colormap.  There is never
  123.        any sharing of colormaps.  This is probably okay, since
  124.        Win32 merges the logical palette and the physical palette
  125.        anyway, so even if there are two windows with totally
  126.        different colors in their colormaps, Win32 will find a
  127.        (hopefully) good match between them.
  128.     o  glutIdleFunc + menus:
  129.        The glut idle function will NOT be called when a menu is
  130.        active.  This causes all animation to stop when a menu is
  131.        active (in general, this is probably okay).  Timer
  132.        functions will still fire, however.  If the timer callback
  133.        draws into the rendering context, the drawing will not show
  134.        up until after the menu has finished, though.
  135. UNSUPPORTED/BUGS:
  136.     o  glutAttachMenu:
  137.        Win32 only likes to work with left and right mouse buttons.
  138.        Especially so with popup menus.  Therefore, when attaching
  139.        the menu to the middle mouse button, the LEFT mouse button
  140.        must be used to select from the menu.
  141.     o  glutSpaceball*, glutButtonBox*, glutTablet*, glutDials*:
  142.        None of the special input devices are supported at this
  143.        time.
  144.     o  When resizing or moving a GLUT for Win32 window, no updating
  145.        is performed.  This causes the window to leave "tracks" on
  146.        the screen when getting bigger or when previously obscured
  147.        parts are being revealed.  I put in a bit of a kludgy
  148.        workaround for those that absolutely can't have the weird
  149.        lines.  The reshape callback is called multiple times for
  150.        reshapes.  Therefore, in the reshape callback, some drawing
  151.        can be done.  It should probably be limited to a color buffer 
  152.        clear.
  153.     o  The video resizing capabilities of GLUT 3.3+ for X11 is
  154.        currently unimplemented (this is probably ok, since it
  155.        really isn't part of the spec until 4.0).  I doubt that
  156.        this will ever be part of GLUT for Win32, since there is no
  157.        hardware to support it.  A hack could simply change the
  158.        resolution of the desktop.
  159. CHANGES/FIXES:
  160.     (Nov 8, '01)
  161.     x  Released 3.7.6
  162.     (Nov 8, '01)
  163.     x  Changed fullscreen mode from TOPMOST back to simply TOP, since 
  164.        (it turns out) many people use windows atop a GLUT window.
  165.     (Nov 8, '01)
  166.     x  Added code to prevent CPU spiking when no idle function is 
  167.        registered.  Otherwise, if an idle function is registered, spike
  168.        CPU so that the idle function gets all the attention it needs and
  169.        if this is a problem on the program side, the user can stick a 
  170.        sleep() in their idle function.  I believe that this strikes the
  171.        best balance betweeen GLUT being fast, and also being "nice" to 
  172.        other processes.  Thanks to James Wright for reporting this bug.
  173.     (Nov 8, '01)
  174.     x  Fixed bug in motion callback handler which wasn't setting the
  175.        current window, so multiple window apps (e.g., any GLUI app)
  176.        wouldn't get the callback correctly.
  177.     (Oct 4, '01)
  178.     x  Fixed bug in glutEnterGameMode() that caused new windows to not 
  179.        be in "fullscreen" mode, so they got window decorations.
  180.     (Oct 4, '01)
  181.     x  Fixed bug in glutEnterGameMode() that caused new windows to not 
  182.        be in "fullscreen" mode, so they got window decorations.
  183.     (Oct 3, '01)
  184.     x  Fixed bug in getVisualInfoFromString(): visuals not reloaded on 
  185.        display mode change.  Reload visuals each time they are queried.
  186.        This fixes a problem with Win32 because the list of availabe Visuals
  187.        (Pixelformats) changes after a change in displaymode. The problem 
  188.        occurs when switching to gamemode and back.  Thanks to Michael 
  189.        Wimmer for pointing this out & providing the fix.
  190.     (Oct 3, '01)
  191.     x  Fixed bug in XGetVisualInfo(): pixelformats enumerated incorrectly.
  192.        Passing 0 as a pixelformat index to DescribePixelFormat gives
  193.        unpredictible results (e.g., this fails on the Voodoo opengl32.dll 
  194.        and always reports 0 as the last available pixelformat index).
  195.        Thanks to Michael Wimmer for pointing this out & providing the fix.
  196.     (Oct 3, '01)
  197.     x  Fixed bug in glXGetConfig(): pixelformats enumerated incorrectly.  The
  198.        test was OpenGL support OR draw to window, but should be AND.  Thanks
  199.        to Michael Wimmer for pointing this out & providing the fix.
  200.     (Sep 28, '01)
  201.     x  Fixed glutChangeToSubMenu()/glutChangeToMenuEntry() bug where if you 
  202.        went back and forth between a submenu and a plain entry, the submenu 
  203.        wouldn't be updated properly.
  204.     (Sep 28, '01)
  205.     x  glutSetIconTitle() is now a nop.
  206.     (Sep 28, '01)
  207.     x  glutFullScreen() now sets the window as TOPMOST, therefore, the 
  208.     window will always be on top (this essentially disables alt-tabbing).
  209.     (Sep 28, '01)
  210.     x  The key repeat ignore flag is now honored correctly.
  211.     (Sep 28, '01)
  212.     x  Key presses are now reported more accurately and fully, in 
  213.        particular, modified up events (i.e., SHIFT-2) are now reported 
  214.        correctly.
  215.     (Sep 28, '01)
  216.     x  Subwindows nested arbitrarily deep get their keyboard callbacks 
  217.        correctly now.
  218.     (Sep 28, '01)
  219.     x  Major rewrite of the window procedure code to clean it up and make
  220.        way for other bug fixes.
  221.     (Sep 23, '01)
  222.     x  Fixed noof example program to use RAND_MAX instead of assumed
  223.        max of 2147483647.0.  (Now it looks _much_ better!)
  224.     (Sep 22, '01)
  225.     x  Fixed sunlight example program.  globe.raw data file was corrupt,
  226.        added a new one.
  227.     (Sep 22, '01)
  228.     x  Fixed zcomposite example program to print message if overlay
  229.        support is not found (instead of crashing).
  230.     (Jan 22, '01)
  231.     x  Fixed malloc(0) bug in Win32 version of XGetVisualInfo.  Thanks 
  232.        to Kekoa Proudfoot for bringing this to my attention.
  233.     (Dec 12, '00)
  234.     x  Added data files for the advanced & advanced97 programs.
  235.     (Dec 12, '00)
  236.     x  Added Developer Studio 6 project and workspace files for pretty 
  237.        much everything (the stuff left out was usually unix specific).
  238.     (Dec 7, '00)
  239.     x  Fixed several compilation problems & corrupt files.  Thanks to 
  240.        Alexander Stohr for bringing these to my attention and providing 
  241.        detailed fixes.
  242.     (Dec 6, '00)
  243.     x  Fixed compiler support for lcc.  Thanks to Gordon for bringing 
  244.        this to my attention and debugging fixes.
  245.     (Nov 8, '00)
  246.     x  Fixed submenu problem (sometimes the menu callback was not 
  247.        called for valid items).  Thanks to Michael Keeley.
  248.     (Oct 16, '00)
  249.     x  Corrected corrupt duck.iv file.  Thanks to Jon Willeke for finding 
  250.        this problem.
  251.     (Sept 27, '00)
  252.     x  Fixed bug in processWorkList that could cause a hang.  Thanks to
  253.        Bill Volz & Daniel Azuma.
  254.     (Sept 26, '00)
  255.     x  Added mui DLL project file (thanks to DMWeldy@ugsolutions.com).
  256.     (Sept  9, '00)
  257.     x  Fixed Delete key bug (crash when no keyboard callback was
  258.        registered, but a special key callback was).  Thanks to
  259.        Kent Bowling (kent_bowling@hotmail.com) for finding this bug.
  260.     (May 18, '00)
  261.     x  Fixed subwindow keyboard callbacks.
  262.     (May 22, '97)
  263.     o  Menus don't work under Windows 95
  264.     x  Fixed!  Added a unique identifier to each menu item, and a 
  265.        search function to grab a menu item given the unique identifier.
  266.     (May 21, '97)
  267.     o  A few minor bug fixes here and there.
  268.     x  Thanks to Bruce Silberman and Chris Vale for their help with
  269.        this.  We now have a DLL!
  270.     (Apr 25, '97)
  271.     o  DLL version of the library is coming (as soon as I figure out
  272.        how to do it -- if you know, let me know).
  273.     x  Thanks to Bruce Silberman and Chris Vale for their help with
  274.        this.  We now have a DLL!
  275.     (Apr 24, '97)
  276.     x  Added returns to KEY_DOWN etc messages so that the F10 key
  277.        doesn't toggle the system menu anymore.
  278.     (Apr 7, '97)
  279.     o  Palette is incorrect for modes other than TrueColor.
  280.     x  Fixed this by forcing a default palette in modes that aren't
  281.        Truecolor in order to 'simulate' it.  The applications
  282.        program shouldn't have to do this IMHO, but I guess we
  283.        can't argue with Microsoft (well, we can, but what good
  284.        will it do?).
  285.     (Apr 2, '97)
  286.     x  Added glut.ide file for Borland users.
  287.     (Apr 2, '97)
  288.     x  Fixed a bug in the WM_QUERYNEWPALETTE message.  Wasn't
  289.        checking for a null colormap, then de-ref'd it.  Oops.
  290.     (Mar 13, '97)
  291.     o  glutTimerFunc: 
  292.        Currently, GLUT for Win32 programs busy waits when there is
  293.        an outstanding timer event (i.e., there is no select()
  294.        call).  I haven't found this to be a problem, but I plan to
  295.        fix it just because I can't bear the thought of a busy wait.
  296.     x  Added a timer event and a wait in the main loop.  This fixes
  297.        the CPU spike.
  298.     (Mar 11, '97)
  299.     x  Fixed subwindow visibility.  The visibility callback of
  300.        subwindows wasn't being called, now it is.
  301.     (Mar 11, '97)
  302.     o  glutGetHDC, glutGetHWND:
  303.        In order to support additional dialog boxes, wgl fonts, and
  304.        a host of other Win32 dependent structures, two functions
  305.        have been added that operate on the current window in GLUT.
  306.        The first (glutGetHDC) returns a handle to the current
  307.        windows device context.  The second (glutGetHWND) returns
  308.        handle to the current window.
  309.     x  Took these out to preserve GLUT portability.
  310.     (Mar 11, '97)
  311.     x  Fixed the glutWarpPointer() coordinates.  Were relative to
  312.        the screen, now relative to window (client area) origin
  313.        (which is what they're supposed to be).
  314.     (Mar 11, '97)
  315.     o  glutCreateMenu, glutIdleFunc:
  316.        Menu's are modal in Win32.  That is, they don't allow any
  317.        messages to be processed while they are up.  Therefore, if
  318.        an idle function exists, it will not be called while
  319.        processing a menu.
  320.     x  Fixed!  I've put in a timer function that fires every
  321.        millisecond while a menu is up.  The timer function handles
  322.        idle and timer events only (which should be the only
  323.        functions that are firing when a menu is up anyway).
  324.     (Mar 7 '97)
  325.     x  Fixed minor bugs tracked down by the example programs.
  326.     (Mar 6, '97)
  327.     x  Merged 3.3 GLUT for X11 into 3.2 GLUT for Win32.  New code
  328.        structure allows for EASY merging!
  329.     o  In Win32, the parent gets the right to set the cursor of
  330.        any of its children.  Therefore, a child windows cursor
  331.        will 'blink' between its cursor and its parent.
  332.     x  Fixed this by checking whether the cursor is in a child
  333.        window or not.
  334.     (Feb 28 '97)
  335.     o  On initial bringup apps are getting 2 display callbacks.
  336.     x  Fixed by the Fev 28 re-write.
  337.     o  Some multiple window (not subwindow) functionality is messed up.
  338.        See the sphere.exe program.
  339.     x  Fixed by the Feb 28 re-write.
  340.     o  GLUT for Win32 supports color index mode ONLY in a paletted
  341.        display mode (i.e., 256 or 16 color mode).
  342.     x  Fixed this in the re-write.  If you can get a color index
  343.        visual (pixel format) you can use color index mode.
  344.     (Feb 28 '97)
  345.     o  Quite a few bugs (and incompatibilities) were being caused
  346.        by the structure that I used in the previous port of GLUT.
  347.        Therefore I decided that it would be best to "get back to
  348.        the roots".  I re-implemented most of glut trying to stick
  349.        with the structure layed out by Mark.  The result is a much
  350.        more stable version that passes ALL (!) (except overlay)
  351.        the tests provided by Mark.  In addition, this new
  352.        structure will allow future enhancements by Mark to be
  353.        integrated much more quickly into the Win32 version.  Also,
  354.        I'm now ordering the bugs in reverse, so that the most
  355.        recently fixed appear at the top of the list.
  356.     (9/8/96)
  357.     o  Changed the glutGetModifiers code to produce an error if not
  358.        called in the core input callbacks.
  359.     (9/11/96)
  360.     o  If the alt key is pressed with more than one other modifier key
  361.        it acts as if it is stuck -- it stays selected until pressed
  362.        and released again.
  363.     x  Fixed. 
  364.     (9/12/96)
  365.     o  When a submenu is attached to a menu, sometimes a GPF occurs.
  366.        Fixed.  Needed to set the submenu before referencing it's members.
  367.     o  Kenny: Also, one little problem, I attached the menu to the 
  368.        right-button, but when the left-button is pressed I detach
  369.        it to give the right-button new meaning; if I pop-up the menu and I
  370.        don't want to select anything, like most users, I click off of the
  371.        menu to make it disappear. When I do this, I get a GLUT error and 
  372.        the program terminates because I am altering the menu attachment 
  373.        from within the button press while the menu is active. 
  374.     x  Fixed.  Needed to finish the menu when the user presses the button,
  375.        not just when a button is released.
  376.     o GLUT for Win32 emulates a middle mouse button by checking if
  377.        both mouse buttons are down.  This causes a lot of problems with 
  378.        the menu and other multiple mouse button things.  
  379.     x  Fixed.  No more middle mouse button emulation.  Perhaps it would
  380.        be a good idea to emulate the middle mouse button (if not present)
  381.        with a key?
  382.     (9/15/96)
  383.     o  Added code to accept a user defined icon.  If no icon is provided,
  384.        a default icon is loaded.
  385.     (9/19/96)
  386.     o  Shane: Command line options seem to be screwed up. (9/13)
  387.     x  Fixed.  The geometry command line was broken, and so was the
  388.        gldebug command line.
  389.     o  Fixed a bug in the default glut reshape.  It was looking for the
  390.        parent of the current window and GPF'ing if there wasn't a parent.
  391.        Put in a check for a parent, and if none is there, use the
  392.        child.
  393.     o  Idle function sucks up all processor cycles. (9/8/96)
  394.     x  I don't know if this is avoidable.  If you have a tight rendering
  395.        loop, it may be that the processor time is going to be sucked up
  396.        no matter what.  You can add a sleep() to the end of your render
  397.        loop if you would like to yeild to other processes and you don't
  398.        care too much about the speed of your rendering loop.  If you have
  399.        Hardware that supports OpenGL (like a 3Dpro card, or GLint card) 
  400.        then this should be less of a problem, since it won't be rendering
  401.        in software. (9/11/96)
  402.     o  If a window is fully obscured by another window, the visibility
  403.        callback is NOT called.  As far as I can tell, this is a limitation
  404.        of the Win32 api, but a workaround is being searched for. (9/8/96)
  405.     x  Limitation of the Win32 API
  406.     o  Fixed the entry functions.  They only work if the keyboard focus
  407.        changes.  Therefore, in most Win32 systems, the mouse must be
  408.        pressed outside of the window to get a GLUT_LEFT message and
  409.        then pressed inside the window for a GLUT_ENTERED message.
  410.     o  Alt modifier key doesn't work with keyboard callback. (9/8/96)
  411.     x  Probably okay, because the glut spec says that these keys can
  412.        be intercepted by the system (which the alt key is...) (9/11/96)
  413.     (11/17/96)
  414.     o  glutRemoveMenuItem() not working properly.
  415.     x  Thanks to Gary (grc@maple.civeng.rutgers.edu) for the fix to
  416.        this one.
  417.     o  Timer functions are messed up.
  418.     x  Thanks to Joseph Galbraith for the fix to this one.
  419.     (12/9/96)
  420.     o  One (minor) difference came up between the X version of glut
  421.        and the nt one which you should know about. It is not a new
  422.        problem, and it concerns co-ords returned to the pointer
  423.        callbacks. (glutMotionFunc, glutMouseFunc)
  424.        Under X, you get co-ords in the range 0 +/- 2^15, under NT
  425.        you get 0..2^16. This is only really a problem when moving
  426.        above or to the left of the window.
  427.        eg dragging one pixel ABOVE the window will give :-
  428.        under x11 :      y = -1
  429.        under nt  :      y = 2^16 -1
  430.     x  Put in fix provided by Shane Clauson.
  431.     (12/17/96)
  432.     o  Idle functions not working properly for multiple windows.
  433.     x  Fixed this by posting an idle message to every window in the 
  434.        window list when idle.
  435.     (12/18/96)
  436.     o  glutSetCursor() was misbehaving (lthomas@cco.caltech.edu).
  437.     x  Win32 requires that the hCursor member of the window class
  438.        be set to NULL when the class is registered or whenever the
  439.        mouse is moved, the original cursor is replaced (go
  440.        figure!).  Now sets the cursor whenever a WM_MOUSEMOVE message
  441.        is received, because the WM_SETCURSOR event resets the cursor
  442.        even when in the decoration area.
  443.     o  Geometry is not being handled quite right.  The numbers don't
  444.        take into account the window decorations.  That is, if I say
  445.        make a window 100x100, then the WHOLE window (not just the
  446.        client area) is 100x100.  Therefore, the client (opengl) area
  447.        is smaller than 100x100. (9/8/96)
  448.     x  Fixed.  Added code to subtract the decoration size on glutGet()
  449.        and add the decoration size on glutReshapeWindow().
  450.     o  Multiple glutPostRedisplay() calls are NOT being combined.
  451.        To get round the "coalesce" problem on glutPostRedisplay,
  452.        the easiest solution is to roll-your-own coalesce by
  453.        keeping a global "dirty" flag in the app (eg replace all
  454.        calls to glutPostRedisplay with image_dirty=TRUE;), and to
  455.        handle image_dirty with a single glutPostRedisplay in the
  456.        idle callback when required.  (erk - but increases
  457.        performance for my particular app (a rendering engine on
  458.        the end of a pipleine with a stream of graphics updates) by
  459.        a couple of orders of magnitude ! ) (9/8/96)
  460.     x  Added code to coalesce redisplays.  Every idle cycle, a
  461.        check is made to see which windows need redisplay, if they
  462.        need it, a redisplay is posted.  The glutPostRedisplay()
  463.        call is just a stub that sets a flag.
  464. THANKS:
  465.     Special thanks to the following people for extensive testing, 
  466.     suggestions, fixes and help:
  467.     Alexander Stohr
  468.     Shane Clauson
  469.     Kenny Hoff
  470.     Richard Readings
  471.     Paul McQuesten
  472.     Philip Winston
  473.     JaeWoo Ahn
  474.     Joseph Galbraith
  475.     Paula Higgins
  476.     Sam Fortin
  477.     Chris Vale
  478.     Bill Mitchell
  479.     and of course, the original author of GLUT:
  480.     Mark Kilgard.
  481.     and many others...
  482. COPYRIGHT:
  483. The OpenGL Utility Toolkit distribution for Win32 (Windows NT &
  484. Windows 95) contains source code modified from the original source
  485. code for GLUT version 3.3 which was developed by Mark J. Kilgard.  The
  486. original source code for GLUT is Copyright 1997 by Mark J. Kilgard.
  487. GLUT for Win32 is Copyright 1997 by Nate Robins and is not in the
  488. public domain, but it is freely distributable without licensing fees.
  489. It is provided without guarantee or warrantee expressed or implied.
  490. It was ported with the permission of Mark J. Kilgard by Nate Robins.
  491. THIS SOURCE CODE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
  492. EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  493. OR MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  494. OpenGL (R) is a registered trademark of Silicon Graphics, Inc.