GLUT Change Log ================ NOTE: This document is potentially incomplete. GLUT 3.5 -> 3.6 ---------------- o The GLUT .zip file now has "Makefile" be a copy of "Makefile.win" instead of "Makefile.sgi". This makes it easier for Win32 GLUT users to just do an "nmake" to build GLUT. o Updated various README files for GLUT 3.6. o Update GLUT man page revs to say 3.6. o Fixed bug in Win32 accumulation buffer allocation code. Thanks to Nate and Layne Christensen . o Fix bug in Win32 GLUT where pushing/popping a subwindow would also reposition the window to its parent's origin. Now, push/pop operations do not disturb the window position. o Fix all VC++ Win32 warnings and improve the GLUT.DLL speed and size by macro'izing Xlib routines and eliminating X11-only functionality from the Win32 version of the library. o Fixed various bugs in Win32 GLUT menu handling. The glutChange* and glutRemoveMenuItem routines should work pretty well now. o Fix Win32 GLUT bug where a reshape did not properly result in repair-damage, ie. glutLayerGet(GLUT_NORMAL_DAMAGED) didn't work right in GLUT 3.5. o The "walker" demo's win32_dirent.h code got update to read directory correctly for Windows 95 (does Win32 FindFirstFile on "." operate differently from Windows NT? It seems like "*" works the way "." should.) o X11 GLUT now detects when you set up an infinite loop due to recursive submenu nesting. In previous GLUT implementations, this could lead to an infinite loop with the X server grabbed; now it leads to a GLUT fatal error. o GLUT now exits with a fatal error if glXCreateContext (or wglCreateContext) fails instead of crashing. o Win32 "make test" infrastructure in place. o Ideas in Motion demo builds better now. o Substantially improve the performance of glutSolidTorus and glutWireTorus by using quad strips instead of independent quads. Also, generally made the looping more efficient. Thanks to Emmanuel Maa BERRIET (eberriet@sky.fr) for pointing out the inefficiencies. o Include Linas Vepstas's GLE library with GLUT (based on GLE 2.2.6). Includes man pages at man/gle and examples at progs/gle The GLE Tubing and Extrusion Library is a graphics application programming interface (API). The library consists of a number of "C" language subroutines for drawing tubing and extrusions. Several bugs in GLE 2.2.6 are fixed here, particularly to make GLE work well under Win32. o Fixed bugs in MUI so that it can support multiple user interface windows. Added muiAttachUIList to associate a UI list with a GLUT window. o More MUI enchancements to allow "disabled" greyed-out UI elements courtesy of Tom Davis. o gliq, a pegboard game of IQ by Kiri Wagstaff, is at progs/demos/gliq o Add Nate Robin's port of the IRIS GL bounce program to OpenGL; see progs/demos/bounce (includes a slider GUI element). o Add Nate Robin's "smooth" 3D object viewer without automatic nice normal generation. o glflare, an OpenGL version of the D3D flare idea by Stephen Coy of Microsoft. See progs/demos/glflare o Resolve gcc warnings (picky, picky) in lib/glut. This includes not relying on the libc having strdup (not required by ANSI C or POSIX). o Fix array bound overflow bug in progs/examples/stars.c o Handle fopen failure in progs/texfont/gentexfont.c o Add many more Ada GLUT examples; see progs/ada o Support X11R6's XK_KP_* keysyms for the keypad. Previously, the Home,Left,Right,etc keys on the numeric keypad (when num lock is off) got ignored. Now they should work. Thanks to Paul Henning (phenning@cs.uiowa.edu) for pointing out this problem. o It is now possible to catch a Unix signal in a signal handler and add a glutIdleFunc and know that the GLUT main loop will immediately drop out of waiting for the event and call the idle callback. This makes it possible to reliably respond to signals from within a GLUT program. (Just on Unix systems, not Win32.) o Added progs/demos/lorenz, Lorenz Attractor Demo. o Added progs/examples/editgrid.c o Improved progs/mesademos/texobj.c o Fixed progs/redbook/surface.c to request a depth buffer. o Added progs/advanced/pointburst.c demonstrating a particle system. o Added progs/advanced/sgiflag.c demonstrating dynamic real-time NURBS trimming. o progs/advanced/envmap.c supports OpenGL 1.1 now. o Fix GLUT library compilation problem on DEC Unix 4.0 on Alpha machines reported by Ray S. Babcock (babcock@cs.montana.edu). See glut_dstr.c o Fix single buffered GLUT programs that needed to be calling glFlush at the end of the frame. Reported by fossum@austin.ibm.com (Gordon C. Fossum). o Fix Fortran build error under IRIX 6.5 (use sed instead of grep). o Use "-Wl,-ignore_unresolved" SGI linker option to get around problems in buggy SGI OpenGL Fortran bindings having extension routines that are not implemented in the supplied OpenGL. o Added Brian Paul's marvelous Blue Pony demo in demos/bluepony I had requested a Blue Pony from SIGGRAPH as one of my "special needs" for our SIGGRAPH '97 "OpenGL and Window System Integration" course. Brian came through with this virtual Blue Pony. Thanks, Brian! o Fixed a problem in test/glut/bigtest.c where if it ran too long, it would stop rotation due to numeric problems. o Make new glut_swap.c and glut_cmap.c files to help keep glutSwapWindow and the color index GLUT entrypoints out of statically linked GLUT programs that do not use these routines. o Fix many warnings. GLUT 3.4 -> 3.5 ---------------- o Henk Kok (kok@wins.uva.nl) contributes another cool demo. See progs/demos/opengl_logo o README.win32 now named README.win o Add the MUI (micro-UI) library developed for GLUT experimentally based on SGI's Showcase user interface library. This code was developed by Tom Davis (davis@sgi.com). o The test directory now has subdirectories. test/glut has all the previous GLUT API tests. o Added menus to progs/advanced/projtex.c o Added tiffsift.c showing how to do "sifting" texture distortions with OpenGL's third texture coordinate. o Improve lib/glut/glut_menu.c by having the code check if the default visual is in the overlay so that it will get chosen as the pop-up menu visual to minimize colormap flashing. Suggested by Thomas Roell (thomas@xig.com). o Fix bug in glutStrokeLength and glutBitmapLength reported by Tom Carroll . o Added shadowfun.c, boundary.c, hello2rts.c and rts.c as examples of how to do fancy stenciled shadow volumes. See the progs/advanced subdirectory. o Now man pages get installed with "glut" suffix. Should avoid situations where GLUT's intro.3 clobber's systems intro.3 because GLUT should now install intro.3glut o Changes to Glut.cf for Digital Unix (Alpha) suggested by Dr Andrej Panjkov (A.Panjkov@latrobe.edu.au). o Added demos/chess and demos/rollercoaster demos written by Henk Kok (kok@wins.uva.nl). Very nice. o Michael Gold's "rasterization only" demo uses OpenGL as just a rasterization interfaces. See progs/advanced/rasonly.c o progs/demos/underwater shows OpenGL-based rendering of underwater caustics effects. Very cool! o Added progs/perf_harness directory with an example of how to create an application specific GLUT-based OpenGL benchmark. o Remove lib/glut/cannotate.c from distribution (no one should care). o Portability improvements throughout, particularly to Win32. GLUT 3.3 -> 3.4 ---------------- o Add glutStrokeLength and glutBitmapLength calls to glut.h (previously undocumented). Will be documented part of GLUT 4 API. o Added man discussion of glutStrokeLength, glutBitmapLength, and glutWarpPointer. o Used ANSI C "const" keyword in glut API and implementation as appropriate (this helped make Ada binding generation easier). o README.win32 added; this is from Nate Robins's GLUT 3.3 Win32 distribution. o SGI Makefiles use $(TOP)/glutdefs for shared GLUT-related macros. o Add workaround for Microsoft's OpenGL 1.1 implementation. MS OpenGL 1.1 does not advance the raster position by the xoffset and yoffset of glBitmap if the specified bitmap has a width or height of zero (it is just a no-op); this is not what OpenGL specifies. I've fixed the GLUT bitmap fonts to not use null bitmaps #ifdef WIN32 and instead use a 1x1 bitmap with not bit set. capturexfont.c has been changed to generate code with the #ifdef WIN32 workaround. o Fix bug in -geometry handling for negative window positions. Now "-geometry 400x500-23-34" does not crash GLUT programs. o Makefile support for SGI machines so that you can set your OBJECT_STYLE environment variable to one of SGI's various ABIs and ISAs. This can let you compile GLUT fully 64-bit with R10K instructions or mereley old 32-bit ABI. For example, to compile N32 with only R4K instructions, do a "setenv OBJECT_STYLE N32_M3". o Put header files in include/GL instead of GL - this would make it esier to support other libraries within the GLUT distribution (possibly libtiff) that wouldn't want a header to be in the GL subdirectory. o Add GLUT 4 glutReportErrors entry point. o New cool game-oriented rendering demos: dinoreflect.c dinoshade.c and halomagic.c o Support HP's Color Recovery System since Mesa uses it. o Add the libtiff examples in progs/tiff: showtiff, writetiff, and textiff o Add the new OpenGL Programming Guide 2nd Edition examples to the GLUT distribution. o added progs/mesademos/trdemo.c - Brian Paul's tiled rendering demo. o added progs/demos/geoface - facial animation demo. o no long export internal symbols in libglut that should have been static. See lib/glut/Makefile.sgi's "make symcheck" rule. o glutInitDisplayString implemented. See test23. Also works automatically with Mesa. o Added popup menu overlay color cell allocation logic for Sun's Creator hardware. See test24. o Enhanced tests and fixed messages in a few places. GLUT 3.2 -> 3.3 ---------------- o The SGI Makefiles always build O32 executables. In IRIX 6.4, the default executable type changes to N32; to avoid Makefile sommersaults, we just keep use at O32. o Get rid of all the __glutFatalError calls in the GLUT test suite. Naughty to be using a GLUT internal function. o Introduced some new entry points that will be part of the official GLUT 4 API when it is finalized for video resize & window status. The video resize API is useful for hardware with full screen video resize (ie, InfiniteReality). The window status callback extends the information of the previous visibility callback to tell you when the window is fully vs. partially visible and when the window is hidden vs. fully obscured. GUIs typically want to know when a window gets unmapped; programs that rely on a fully unobscured frame buffer (such as histogram occlusion culling) need to know when the window is fully visisble. o progs/advanced/occlude.c demonstrates a histogram based occlusion culling technique. It requires support of the histogram extension and works best on a machine like RealityEngine. o glutSolidCube and glutWireCube efficiency improved. o Added progs/examples/cube.c - simple demo to draw a 3D cube. o Fixed warning message from glutSetWindow. o glutFullScreen called on a window before it is mapped now properly overrides the WM_NORMAL_HINTS to ensure that the window is positioned at 0,0 (ie, no random or interactive placement by the window manager). o For IRIX 6.3 and IRIX 6.4, eliminate X server routine trips for interning atoms using SGI's fast atoms optimization. o Added a GLUT introduction man page. Either "man glut" or "man intro". o Previously, timer callbacks could be starved by continous X events. Now, timer callbacks and X event processing are handled at the same priority. test/timer_test.c helps verify the improved behavior. o Add IAFA for submitting GLUT to sunsite.unc.edu for anonymous ftp; based on Mesa version. o SGI Makefiles work with MIPS 7.10 compilers now. o Fixed more warnings. o advanced: Fixed overlay bug in zcomposite. o demos: Fixed OpenGL bug in glutmech. o demos: Fixed atlantis to have a more reasonable near/far range for machines with limited depth buffer resolution (<=16 bits). o Improved comments in places. o libglut: Fixed message if Motif atom intern'ing failed for fullscreen. GLUT 3.1 -> 3.2 ---------------- o Complete Unix-style nroff man pages for all the GLUT library routines. See README.man for details. o Implement the MESA_SWAP_HACK. If you set the MESA_SWAP_HACK enviornment variable and you are using Mesa, GLUT will attempt to simply do a glXSwapBuffers to repair damage to a double buffered GLUT window that appears to have been last displayed using a glutSwapBuffers call. This can *greatly* improve the redraw performance of GLUT programs running under Mesa when they are damaged (for example by popup menus that are not in the overlays). See lib/glut/glut_mesa.c This idea was suggested by Brian Paul on the Mesa mailing list. Note that some poorly behaved (probably buggy, actually) GLUT programs may no redraw correctly with MESA_SWAP_HACK. The optimization relies upon your display callback being idempotent and that the window is not otherwise rendered to by other callback routines. o Port Brian Paul's various Mesa 2.0 demo programs to use GLUT: bounce, gamma, gears, isosurf, offset, reflect, spin, tess_demo, texobj, & winpos. The reflect program is definitely worth checking out. o Include GLUT examples presented by Tom McReynolds and David Blythe at the "Advanced OpenGL Rendering" course at SIGGRAPH '96. o Add progs/examples/simple.c showing how to simply draw a single triangle with OpenGL. How long would an equivalent Direct3D immediate program be? Much longer... o Screen door transparency example using polygon stippling based on code from Tim Hall. progs/examples/screendoor.c o Fix bug where glutRemoveMenuItem about recalculating the menu's width in pixel that would sometimes cause an X protocol error. o Make sure that when a popup menu is finished that if the initiating window has an overlay, the overlay colormap is installed. An overlay popup menu could otherwise knock out the window's overlay colormap. o Fix an "off by one" error in the window number printed out in a fatal error message when a redisplay is generated on a window without a display callback. o Make consistent puncutation in some fatal error messages. o Some work to make example programs easier to build on Windows NT and 95 (probably not complete; report bugs please). GLUT 3.0 -> 3.1 ---------------- o The various shape rendering routines use single precision instead of double precision. o The box shape rendering routines don't generate redundant normals. o Make glutExtensionSupported more robust. o Added test20 for glutExtensionSupported. o Fixed Makefile in /usr/share/src/GLUT images. o Fixed multisample complication bug in dinospin.c o Fixed multiple includes in moth.c o Add contribed steam.c and glutmech demos (cool!). o Added fontdemo and evaltest in progs/examples. o Fix an HP/UX compilation problem with libglut.a o Fix GETTIMEOFDAY macro to take two args on a Sun. Why does Sun claim to be SVR4 when they have a BSD (2 parameter gettimeoday)? o Add an #ifdef to glut_win.c for working around Solaris 2.4 and 2.5 bug in XmuLookupStandardColormap. GLUT 2.3 -> 3.0 ---------------- o Major version change so GLUT 3.0 does have API additions! o Added yacme (yet another colormap editor) demo by Patrick Bouchaud (SGI Switzerland). o Updated glut.h so that GLUT_XLIB_IMPLEMENTATION=5 for 3.0 and GLUT_API_VERSION=3 for 3.0. o Change all the sample programs to _not_ #include or . From the spec: "Because a very large window system software vendor (who will remain nameless) has an apparent inability to appreciate that OpenGL's API is independent of their window system API, portable ANSI C GLUT programs should not directly include or . Instead, ANSI C GLUT programs should rely on to include the necessary OpenGL and GLU related header files." Sigh. o New Helvetica fonts: 10, 12, and 18 point versions. GLUT_BITMAP_HELVETICA_10, GLUT_BITMAP_HELVETICA_12, and GLUT_BITMAP_HELVETICA_18. o Implement glutFullScreen. o Implement glutSetCursor. o Implement glutGetModifiers. o Implement glutBitmapWidth and glutStrokeWidth. o Reimplement test2 to use glutGet(GLUT_ELAPSED_TIME) instead of the less than portable gettimeofday. o Ripped out all the support for compiling earlier GLUT API versions. It got very ugly and hard to maintain. o Added GLUT_LUMINANCE to GLUT verison 3 API and documented it, but it is not implemented as part of GLUT 3.0; should be in 3.1. o Added OpenVMS support to GLUT library with much help from Andy Vesper. o The display mode mask parameter for glutInitDisplayMode and the milliseconds parameter for glutTimerFunc are now of type unsigned int (previously unsigned long). o glutMenuStatus obsoletes glutMenuState. The callback registered by glutMenuStatus is triggered just like glutMenuState, except that an additional two parameters pass the X and Y location of the mouse when the menu status changes. This is to remedy problems a GLUT program using glutPassiveMotion might have re-sync'ing with the mouse position after menu use. o In previous releases of GLUT, various user input events were discarded when menus were in use. Now, these callbacks are generated. If the effect of the events should be performed after the menu is released, it is up to the GLUT program to delay the action. o Careful to ignore Enter/LeaveNotify events that come from the pop-up window pointer grab and ungrab (ie, Enter/LeaveNotify events not marked NotifyNormal for their mode. Eliminates "spurious" entry events. o Fixed bug with new work (like subwindow creation is a display callback) not being placed on the work queue and getting lost. o Fix memory corruption bug in caching of values returned by glXChooseVisual; no longer cache. o Fixed bug with glutCopyColormap sometimes not accurately re-establishing the WM_COLORMAP_WINDOWS property. o Fixed bug in deliver of enter and left callbacks. Before "virtual" enter and leave (X protocol teminology) were being reported. The semantic for the entry callback is it is entering and leaving a GLUT windows real estate that counts; not passing through the window hiearchy. o Add XFlush to __glutFinishMenu in case menu call back will want to read from a terminal window. In this case, the X server may still be grabbed since the XUngrabPointer hasn't been flushed out of Xlib's buffers to the X server for processing (deadlock!). o Don't allow modification of menus while in use. Spec ammended to say "It is illegal to create or destroy menus or change, add, or remove menu items while a menu (and any cascaded sub-menus) are in use (i.e., popped up)." Allowing modifications of menus while in use was dubious, the semantics would be unclear, and even more unfortunate, might vary from system to system. o Spec warns that you should not call routines that require a current window or menu when there is not a current window or menu (like before you create one or if you destroy the current one). o Fixed bug where glutSpecialFunc callback would only operate if a glutKeyboardFunc callback was also registered. o Fixed bug in color index visual selection so that largest number of bits of color resolution is preferred to smallest. o Fixed bug where if a double buffer X window was used to emulate a single buffer window, GLUT should set the OpenGL read mode to GL_FRONT (it was only changing the draw mode). o Fixed an obscure ordering bug with simultaneous glutPushWindow and glutPopWindow calls on different subwindows of the same window. o Now, it is a fatal error to receive an expose event with no display callback registered (it was stupid to allow mapped windows that made no attempt to redisplay). The spec has been changed to say NULL can not be passed to glutDisplayFunc; previously, it said this would disable the callback. Stupid. What was I thinking? o GLUT spec is indexed now and generally improved. o Support for IRIX 6.2's N32 and N64 object style to take advantage of new MIPS processor instruction sets. See lib/glut.n32 and lib/glut.n64 (IRIX 6.x only). o Fortran bindings also available for N32 and N64. See lib/fglut.n32 and lib/fglut.n64. o Tests support the new API version 3 interfaces. o Contributed "bigtest" test program. o Added splatlogo example demonstrating pixel path functionality. o Added zoomdino program demonstrating use overlay rubber-banding. o Contributed demo programs: hanoi, hanoi2, gears, moth, text3d, and noof. o Contributed SGI stereo program: stereo-plane o Being out of colors in the default colormap without overlay planes will no longer lead to a fatal error when allocating the color gray for a pop-up menu. Instead, GLUT finds the closest matching color automatically. Help from Brian Paul to code this. o Eliminated Glut64.mk from all Makefile.sgi's GLUT 2.2 -> 2.3 ---------------- o Fix obscure problem with how X Input extension button press and release events get selected; it seems GLUT should also be selecting for the DeviceButtonPressGrab event class since this ensures that a release will be delivered to the same window as the press; that was my intent for how buttons presses and releases should work. I just didn't know you needed this obscure event class to be selected. Such a grab is the default for pointer events. o If windows are indirect, make sure that a glFinish is properly done for all windows that have been made current to recently (ie, last main loop iteration). This helps ensure windows don't get ahead of themselves. Previously, GLUT simply did a glFinish to whatever window GLUT happened to be made current to last at the end of each main loop iteration. o Fix what can be considered a bug where calling glutPostRedisplay within a display callback would not leave the redisplay set; this applies other routines that set work state needing to be done. Essentially, clear the workMask before the work callbacks are done instead of after. The new test15 tests this. o To support other OpenGL higher-level library that might want to be able to call glXMakeCurrent, GLUT should not try to track make current state and short circuit glXMakeCurrent calls when GLUT believes the window/context are already current. glXMakeCurrent should implement the same "short circuit" case, but can appropriately track the changed state from multiple libraries. o The glutRemoveMenuItem routine was totally busted previous to 2.3. Now it is fixed and test14 is a regression test for it. o Add Greg Humphreys's hanoi program to progs/contrib o Examples demonstrating Open Inventor used with GLUT found in progs/inventor o New progs/examples programs: abgr, triselect, texenv, stenciltst, stars, fogtst GLUT 2.1 -> GLUT 2.2 --------------------- o Fixed bug in glutGet(GLUT_WINDOW_X) and glutGet(GLUT_WINDOW_Y). o Added Philip Winston's human kinetics demo in progs/demos/walker (COOL!). o Improved test suite. o Work around SunOS 4.x's non-ANSI compliant realloc. o Better handle delivery of reshape callback. o Pre-build stroke font C files to avoid having to rely on lex/yacc working correctly. Too many Linux systems missing flex/bison or having verisons that resulted in undefined symbols while building strokegen. o Better portability, mostly avoiding compiler warnings. o 64-bit clean (as far as I know!). o Compiles right for systems like DEC Alpha that support GLX 1.1 but do not support GLX_SGIS_multisample extension. o At Brian Paul's request for better Mesa support, changed colormap allocation to work if RGBA window has PsueoColor visual. o Fix Drew Bliss reported bug in colormap allocation (resulted in GLUT programs not correctly sharing colormaps). o Interesting bug involving the fact that XFlush may actually read X protocol into Xlib's internal buffers so if you call XFlush, then select on the X socket, you might find nothing to read, but when in fact there is data in the Xlib internal buffers that should be processed. Using ISDN (I guess it has weird network properties) showed this bug in a GLUT test13. The fix is to use XPending after XFlush. o Improve X Input documentation references in the GLUT spec. o Widen margins so spec kills less trees. o Clarify GLUT spec to explain glutGet values returned by GLUT_WINDOW_X, GLUT_WINDOW_Y, GLUT_WINDOW_WIDTH, and GLUT_WINDOW_HEIGHT as being returned in pixels. o Make sure consistently using reshape (and not resize) within GLUT spec. o GLUT spec should document that glutExtensionSupported, glutCreateWindow, and glutCreateSubwindow return int. GLUT 2.0 -> GLUT 2.1 --------------------- o XCOMM comments in Imakefiles results in unusable Makefiles for systems that pre-date an X11R5-based imake. o The rings.c and worms.c examples use "float" returning versions of trigonometric functions (ie, cosf, sinf, etc.). While ANSI C reserves these names for their logical purpose, many systems do not implement these functions. o Calls to __glutWarning in glut_cindex in places lack variable %d argument. o Intended comments in lib/Imakefile cause avoiable warnings for some C pre-processors. o Old (pre-X11R6) versions of Xlib did not have XK_Page_Up and XK_Page_Down keysym defs in /usr/include/X11/keysymdef.h These are aliases to XK_Prior and XK_Next. o The X11R5 to_wfont derived strokegen program for converting PEX fonts to C data structures was full of memory access bugs. On most systems, they were not fatal. That's what I get for trying to steal PEX code I gues. :-) o Various Purify-detected memory access bugs within the GLUT library have been fixed. o Better Imakefile handling of lex usage in lib/glut/Imakefile o Better document colormap management routines. o Correctly document the prototype for glutCreateSubWindow o Add documentation usage hint explaining glutGetWindow and glutGetMenu can be used to determine what window or menu a callback is for. o Fix bug in glutDetachMenu o Fix bug in delivery of visibility callback for subwindows of an unmapped top-level window. o scube.c should use more likely to be optimized glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) instead of glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA) o Supression of various compiler detected warnings through the GLUT distribution. o Use of the "polygon offset" extension if available in origami.c o SGI mkmkfiles.sgi script doesn't make Fortran by default now; see instructions in README.fortran o Improvements to the test programs. o Avoid X Input extension calls when extension is present but no devices are available. GLUT 1.0 -> GLUT 2.0 --------------------- o API extensions; see README.glut2 o Bug fixes. o More demos. o Update documentation. - Mark