$Id: VERSIONS,v 1.91 2002/06/26 02:36:34 brianp Exp $


Mesa Version History
====================

1.0 beta   February 1995
    Initial release

1.1 beta   March 4, 1995
    Changes:
	faster point and line drawing (2x faster)
	more systems supported, better Makefiles
	Renamed lib*.a files to avoid collisions
	many small bug fixes
    New:
	pseudo-GLX functions added
	new implementation of evaluators (eval2.c)
	GLUT support

1.1.1 beta   March 7, 1995
    Changes:
	Reverted from eval2.c to eval.c due to FPE on Linux
	more speed improvements
	more Makefile changes

1.1.2 beta   March 14, 1995
    New:
	implementation of SGI's blending extensions
	glXUseXFont implemented
	added MESA_DEBUG environment variable support
    Changes:
	Using eval2.c again
	more FPE-prevention checks (0-length normals are OK)
	a few small bug fixes
	much faster pixel logic ops!
	faster transformation arithmetic

1.1.3 beta   March 31, 1995
    New:
	gluScaleImage() and gluBuild2DMipMaps() implemented
	Mesa widgets for Xt/Motif
	blendEXT demos
	added environment variables for selecting visuals
    Changes:
	almost all GLUT demos work correctly now
	faster X device driver functions
	more bug fixes

1.1.4 beta   April 20, 1995
    Bug fixes:
	- missing #define SEEK_SET in src-tk/image.c
	- compile glShadeModel into display lists
	- fixed pow() domain error in src/light.c
	- fixed "flickering bitmaps" in double buffer mode
	- fixed tk.h and aux.h for C++
	- state of LIGHT_MODEL_LOCAL_VIEWER was inverted
    New features:
	- MUCH, MUCH nicer dithering in 8-bit RGB mode
	- updated widgets and widget demos
	- Implemented GLXPixmap functions
	- Added GLU 1.1 and GLX 1.1 functions
	- Changed the X/Mesa interface API, more versatile
	- Implemented gluPartialDisk()

1.2   May 22, 1995
    Bug fixes:
	- IRIX 4.x makefile problem
	- modified tk to share root colormap as needed
	- gluLookAt normalization problem
	- suppress Expose, NoExpose events in swapbuffers
	- glBitmap() and glDrawPixels() clipping
    New features:
	- GL_BLEND, GL_MODULATE, GL_DECAL, and GL_REPLACE_EXT texture
	      modes implemented
	- texture maps stored more efficiently
	- texture maps can be compiled into display lists
	- Bogdan Sikorski's GLU polygon tesselation code
	- Linas Vepstas's sweep and extrusion library
	- glXCreateContext()'s shareList parameter works as it's supposed to.
	      XMesaCreateContext() updated to accept a shareList parameter too.
	- Mesa can be compiled with real OpenGL .h files
	- MESA_BACK_BUFFER environment variable
	- better GLX error checking

1.2.1   June 22, 1995
    Bug fixes:
	- X/Mesa double buffer window resize crash
	- widgets now pass PointerMotion events
	- X/Mesa incorrect default clear color and drawing color
	- more robust X MIT-SHM support in X/Mesa
	- glTexImage( format=GL_LUMINANCE ) didn't work
	- GL_LINE mode polygons with line width > 1.0 could cause a crash
	- numerous feedback bugs
	- glReadPixels() from depth buffer was wrong
	- error prone depth and stencil buffer allocation
    New features:
	- Preliminary Microsoft Windows driver
	- Implemented a number of missing functions: glEvalCoord[12][df]v(),
	    glGet...(), etc.
	- Added a few missing symbols to gl.h and glu.h
	- Faster rendering of smooth-shaded, RGBA, depth-buffered polygons.
	- Faster rendering of lines when width=2.0
	- Stencil-related functions now work in display lists
    Changes:
	- renamed aux.h as glaux.h (MS-DOS names can't start with aux)
	- most filenames are in 8.3 format to accomodate MS-DOS
	- use GLubytes to store arrays of colors instead of GLints

1.2.2   August 2, 1995
    New features:
	- texture mapped points and lines
	- NURBS! (but not 100% complete)
	- viewports may safely extend beyond window boundaries
	- MESA_PRIVATE_CMAP environment variable
	- Grayscale X display support
	- two new demos:  demos/gears.c and demos/shadow.c
	- MachTen for Macintosh configuration
    Bug fixes:
	- glGet*(GL_DEPTH_BITS) returned bytes, not bits
	- point, line, and bitmap rasterization suffered from roundoff errors
	- fixed a division by zero error in line clippping
	- occasional wrong default background color really fixed!
	- glDepthFunc(GL_ALWAYS) with glDepthMask(GL_FALSE) didn't work
	- gluBuild2DMipmaps malloc problem fixed
	- view volume clipping of smooth shaded lines resulted in bad colors
    Changes:
	- new visual selection method in glXChooseVisual()
	- improved GLU quadric functions
	- call XSync for glFinish and XFlush for glFlush
	- glVertex() calls now use a function pointer to avoid conditionals
	- removed contrib directory from Mesa tar file (available on ftp site)
	- AIX shared library support
	- Removed GLUenum type as it's not in OpenGL

1.2.3   September 26, 1995
    New features:
	- Mesa header files now equivalent to SGI OpenGL headers
	- Support for HP's Color Recovery dithering displays
	- Faster vertex transformation
	- Faster raster operations into X windows under certain conditions
	- New configurations:  HP w/ shared libs, Ultrix w/ GCC, Data General
	- 4-bit visuals now supported
    Bug fixes:
	- glScissor bug fixed
	- round-off errors in clipping lines against clip planes fixed
	- byte swapping between hosts and display servers implemented
	- glGetError() can be called without a current rendering context
	- problem with accidentally culled polygons is fixed
	- fixed some widget compilation problems

1.2.4   November 17, 1995
    New features:
	- More speed improvements (lighting, fogging, polygon drawing)
	- Window system and OS-independent off-screen rendering
	- Preliminary Fortran bindings
	- glPolygonOffsetEXT implemented
	- glColorMask and glIndexMask now fully implemented
	- glPixelZoom implemented
	- display lists fully implemented
	- gamma correction
	- dithering in 8-bit TrueColor/DirectColor visuals
    Changes:
	- Improved device driver interface
	- tk.h renamed to gltk.h to avoid conflicts with Tcl's Tk
	- Dithering support moved from core into device driver
    Bug fixes:
	- glEnable/Disable( GL_LIGHTING ) didn't always take effect
	- glReadPixels byte swapping was broken
	- glMaterial with pname==GL_AMBIENT_AND_DIFFUSE was broken
	- duplicate glColor4b() prototype in GL/gl.h removed
	- stripes in wave -ci demo fixed
	- GL_LINEAR_MIPMAP_NEAREST had wrong value
	- bugs in HP Color Recovery support fixed
	- fixed bug when blending lines, points, bitmaps outside of window

1.2.5   November 30, 1995
    New Features:
	- updated MS Windows driver
	- new implementation of StaticGray/GrayScale visual support
    Bug fixes:
	- pixelzooming with gamma correction or blending didn't work
	- HP color recovery visual wasn't being picked by glXChooseVisual
	- glClear didn't always observe glColorMask changes
	- olympic and offset demos didn't compile on some Suns
	- texcoord clamping wasn't correct
	- a polygon optimization introduced an occasional sampling problem

1.2.6   January 26, 1996
    New Features:
	- faster line and polygon rendering under certain conditions.  See
	  Performance Tips 9 and 10 in README
	- profiling
	- lighting is a bit faster
	- better perspective corrected texture mapping
	- Amiga AmiWin (X11) support
	- preliminary Linux SVGA driver
    Changes:
	- now using a 16-bit depth buffer, faster, smaller
	- GL_NORMALIZE is disabled by default
    Bug fixes:
	- projective texture mapping
	- fixed a memory leak in the context destroy function
	- GL_POLYGON with less than 3 vertices caused a crash
	- glGet*() returned wrong result for GL_INDEX_MODE
	- reading pixels from an unmapped X window caused a BadMatch error

1.2.7   March 5, 1996
    New:
	- faster lighting
	- faster 16-bit TrueColor rendering on Linux
	- faster 32-bit TrueColor rendering on Linux, HP, IBM
	- non-depth-buffered XImage polygons are faster
	- vertex array extension
	- software alpha planes
	- updated Macintosh driver
	- new NeXT driver
	- GLU quadric functions generate texture coordinates
	- reflect.c demo - reflective, textured surface demo
    Changes:
	- gamma correction code moved into the X driver for better performance
    Bug fixes:
	- multiple glClipPlane()'s didn't work reliably
	- glPolygonMode() didn't always work
	- glCullFace( GL_FRONT_AND_BACK ) didn't work
	- texture mapping with gamma correction was buggy
	- floating point exceptions in texture coordinate interpolation
	- XImage byte swapping didn't always work
	- polygon edge flags weren't always used correctly

1.2.8   May 22, 1996
    New:
	- overlay planes on X servers with the SERVER_OVERLAY_VISUALS property
	- better monochrome output
	- more IRIX 6.x configurations
	- more robust RGB mode color allocation
	- added MESA_XSYNC environment variable
	- GLX_MESA_pixmap_colormap and GLX_EXT_visual_info extensions
	- GL_MESA_window_pos extension
	- faster glReadPixels/glDrawPixels for GL_DEPTH and GL_UNSIGNED_SHORT
	  and GL_UNSIGNED_INT
        - driver for prototype Cirrus Mondello 3-D board
	- updated AmigaDOS driver
        - a few small speed optimizations in polygon rendering
    Changes:
	- internal device driver interface modified to simplify device
	  driver implementations and to support hardware Z buffers
	- several changes to the X/Mesa interface (xmesa.h)
    Bug fixes:
	- fixed pow(0,0) domain error triggered on some systems
	- glStencilClear() in a display list caused an infinite loop
	- glRasterPos*() was sometimes off by +/-0.5 in X and Y
	- color masking and blending were performed in wrong order
	- auxSolidCylinder() sometimes drew a wire-frame cylinder
	- fixed file writing bug in osdemo.c
	- pixel mapping didn't always work
	- the GL_GEQUAL stencil func didn't work
	- the GL_INVERT stencil op didn't work
	- the stencil write mask didn't work
	- glPush/PopAttrib() didn't do enough error checking
	- glIsList() didn't always work correctly

2.0  October 10, 1996
    New:
	- Implements OpenGL 1.1 API functions
	- all texture filtering modes supported (mipmapping)
	- faster texture mapping, see Performance Tip 11 in README
	- antialiased RGB points
	- X support for line and polygon stippling
	- glDrawBuffer( GL_FRONT_AND_BACK ) works
	- util/ directory of useful stuff
	- demos/texobj demo of texture objects
    Changes:
	- major internal changes for thread-safeness
	- new device driver interface
	- MESA_ALPHA env variable removed
	- triangle rasterizer replaces polygon rasterizer
    Bug fixes:
	- glPopAttrib() bug
	- glDrawBuffer(GL_NONE) works now

2.1  December 14, 1996
    New:
	- VMS support
	- MS-DOS driver
	- OpenStep support
	- updated, combined Windows 95/NT driver
	- implemented glGetLighti() and glGetTexGen*()
	- GLX does garbage collection of ancillary buffers
    Bug fixes:
	- removed unused _EXT constants from gl.h
	- fixed polygon offset bugs
	- Z coordinates of clipped lines were incorrect
	- glEdgeFlag() in display lists didn't always work
	- glLight*() in display lists didn't work
	- fixed X line stipple bugs (Michael Pichler)
	- glXUseXfonts XFreeFont/XFreeFontInfo bug fixed
	- fixed a feedback bug
	- glTexGen*() now transforms GL_EYE_PLANE by inverse modelview matrix
	- polygons were sometimes culled instead of clipped
	- triangle rasterizer suffered from float/int overflow exceptions
	- fixed FP underflow exception in lighting (specular exponent)
	- glEnable/glDisable of GL_EXT_vertex_array enums didn't work
	- fixed free(NULL) in GLU tesselator code
	- using 24-bit color on some X servers resulted in garbage rendering
	- 32-bit per pixel mode for XFree86 now works
	- glRotate(a,0,0,0) gave unpredictable results
	- GL_LINE_STRIP with > 480 vertices had occasional clipping problems
	- 8-bit TrueColor GLXPixmap rendering incorrectly required a colormap
	- glMaterial() wasn't ignored when GL_COLOR_MATERIAL was enabled
	- glEnable(GL_COLOR_MATERIAL) followed by glColor() didn't work right
	- accumulation buffer was limited to positive values
	- projective textures didn't work
	- selection buffer overflows weren't handled correctly
    Changes:
	- restored the GL_EXT_polygon_offset extension
	- slightly faster RGB dithering
	- the SVGA driver works again
	- Amiga driver now distributed separately
	- NeXT driver updated for Mesa 2.x

2.2  March 14, 1997
    New:
	- better color selection when dithering
	- added GL_EXT_texture_object extension
	- updated MS-DOS driver for DJGPP
	- added openbsd make configuration
	- faster dithered flat-shaded triangles
	- various compilation problems with Motif widgets fixed
	- gl.h, glx.h and glu.h name mangling option
	- BeOS driver
	- 3D texture mapping extension
	- GL_MESA_resize_buffers extension
	- morph3d, stex3d and spectex demos
	- 3Dfx support
    Bug fixes:
	- glColorMaterial should finally work right in all respects
	- linear interpolation of mipmap levels was incorrectly weighted
	- readpix.c didn't compile on Macintosh
	- GL_INVERT and related logic ops didn't work right
	- glTexImage[12]D() didn't check its parameters consistantly
	- fixed a memory leak in glTexImage[12]D()
	- kludged around a SunOS 5.x/GCC compiler bug in the feedback code
	- glReadPixels aborted instead of normally catching some errors
	- a few 1.1 constants were missing or misnamed in gl.h
	- glBegin(p); glBegin(q); didn't generate an error
	- fixed a memory leak in GLX code
	- clipping of concave polygons could cause a core dump
	- 1-component alpha texture maps didn't work
	- fixed a GLU polygon tesselator bug
	- polygons with colinear vertices were sometimes culled
	- feedback triangle colors were wrong when using smooth shading
	- textures with borders didn't work correctly
	- colors returned in feedback mode were wrong when using lighting
	- spotlights didn't effect ambient lighting correctly
	- gluPartialDisk() had a few bugs
    Changes:
	- device driver interface expanded to support texture mapping
	- faster matrix inversion subroutine
	- commented out #include "wmesa_extend.h" from src/wmesa.c
	- fixed many compiler warnings in the demo programs

2.3  June 30, 1997
    New:
	- Mesa distribution divided into two pieces:  library code and demos
	- faster vertex transformation, clip testing, lighting
	- faster line drawing
	- TrueColor visuals how have dithering (for depths < 24 bits)
	- added MESA_NO_DITHER environment variable
	- new device driver function: NearFar(), RenderVB(), RasterSetup()
	- added LynxOS configuration
	- added cygnus Win32 configuration
	- added texcyl.c GLUT demo
	- added XMesaDitherColor() to X/Mesa interface
	- new NURBS code from Bogdan Sikorski
	- added demos/shape.c (non-rectangular X window!)
    Bug fixes:
	- glEnable/DisableClientState() were missing from GL/gl.h
	- GL_SPHERE_MAP texcoord generation didn't work correctly
	- glXGetConfig() returned wrong number of depth, stencil, accum bits
	- glDrawPixels feedback/selection didn't examine RasterPos valid bit
	- black and white were reversed on some monochrome displays
	- fixed potential image memory leak (wasn't setting reference counter)
	- glDrawPixels sometimes didn't recognize some GL state changes
	- gluProject/UnProject() didn't check for divide by zero
	- stex3d demo called random() and srandom(), not portable
	- fixed memory leaks in context.c and drawpix.c
	- fixed NULL dereferencing problem in gl_update_texture_state()
	- glReadPixels between glBegin/glEnd didn't generate an error.
	- fixed memory leak in polygon tesselator (Randy Frank)
	- fixed seg fault bug drawing flat-shaded, depth-tested lines
	- clipped GL_TRIANGLE_STRIPs sometimes had wrong color when flat-shaded
	- glBindTexture sometimes didn't work
	- fixed a bug deep in glXReleaseBuffersMESA()
	- fog was mistakenly applied to alpha
	- glPopMatrix didn't set "dirty matrix" flag
	- glPolygonStipple pattern was sometimes wrong
	- glClear wasn't disabled during feedback and selection
	- fixed memory leak in glTexSubImage[123]D
    Changes:
	- many library source files reorganized
	- faster X color allocation, colors also freed when finished with them
	- new texture sampling function pointer in texture objects
	- incorporated 3Dfx VooDoo driver v0.16 into main source tree
	- many 3Dfx driver updates
	- cygnus Makefiles now included
	- updated DOS driver
	- made a few changes to dosmesa.c and wmesa.c (VB->Unclipped)
	- internally, colors now stored in GLubytes, not GLfixed
	- optimized changing of GL_SHININESS parameter

2.4  September 18, 1997
    New:
	- updated 3Dfx Glide driver
	- hacks for 3Dfx rendering into an X window or fullscreen
	- added depth buffer access functions to X/Mesa and OS/Mesa interfaces
    Bug fixes:
	- pixel buffer could overflow with long, wide lines
	- fixed FP underflow problems in lighting
	- glTexSubImage1D() had an unitialized variable
	- incomplete texture objects could cause a segfault
	- glDrawPixels with GL_COMPILE_AND_EXECUTE caused infinite loop
	- flat-shaded quads in a strip were miscolored if clipped
	- mipmapped triangle lod computation now works correctly
	- fixed a few under/overflow bugs in triangle rasterizer
	- glArrayElement() assigned bad normal if normal array disabled
	- changed argument to glXReleaseBuffersMESA()
	- fixed small triangle underflow bugs in tritemp.h (hopefully)
	- glBindTexture(target, 0) caused a crash
	- glTexImage[123]D() with NULL image pointer caused crash
	- glPixelStore parameters are now ignored during display list execution
	- fixed a two-sided lighting w/ clipping bug (black vertices)
	- textures with width!=height were sometimes mis-rendered
	- "weird" projection matrices could cause div by 0, other fp errors
    Changes:
	- changed precompiled header symbol from PCH to PC_HEADER
	- split api.c into api1.c and api2.c
	- added hash.c source file (but not used yet)
	- a few Sun and HP configuration file changes
	- MESA_GLX_FX env var replaces MESA_FX_WINDOW and MESA_FX_FULLSCREEN
	- fixed a few cygnus build problems (src/Makefile.cygnus, src/wmesa.c)

2.5  November 20, 1997
    New:
	- updated 3Dfx driver (v20) for GLQuake
	- added GL_EXT_paletted_texture extension
	- added GL_EXT_shared_texture_palette extension
	- added GL_EXT_point_parameters extension
	- now including Mark Kilgard's GLUT library v3.6
	- new GLUT-based demos in gdemos/
	- added a few more Unix config targets
	- added Intel X86 assembly language vertex transformation code
	- 3Dfx/Glide driver for Mesa now recognizes SST_SCREENREFRESH env var
	- Windows 95 S3 Virge driver
    Bug fixes:
	- glCopyTexImage?D would crash due to uninitialized variable
	- glColor w/ glColorMaterial in a display list caused a bug
	- fixed several glDrawPixels() and ReadPixels() bugs in 3Dfx driver
	- glVertex4*() vertices weren't always projected correctly
	- trying to use mipmapped textured points or lines caused crash
	- glColor[34][fd]() values now clamped to [0,1] before int conversion
    Changes:
	- new device driver functions for texture mapping
	- hash tables used for display list and texture object lookup
	- fixed GLX visual handling code to avoid saving redundant visuals
	- 3Dfx Glide libraries automatically linked to libMesaGL.so
	- dropped the Cirrus Logic Mondello code since it's obsolete
	- updated Cygnus Makefiles (Stephane Rehel)
	- updated Windows MSVC++ Makefiles (Oleg Letsinsky)
	- procedure for making library files has changed: scripts now take
	  a major and minor version arguments.  Make-config changed a lot.
	- new implementation of glTexSubImage2D()
	- updated widgets-mesa directory to create libMesaGLwM.a (Motif widget)
	- separate linux-glide and linux-386-glide configurations

2.6  February 12, 1998
    New:
	- Windows WGL functions
	- updated VMS, DOS, Windows, Cygnus, BeOS, Amiga compilation support
	- v0.22 of 3Dfx Glide driver
	- more X86 assembly language optimizations
	- faster blending for some modes
	- XMesaSetFXmode() to switch between 3Dfx window and full-screen mode 
	- added preliminary thread support
	- added GLX_MESA_copy_sub_buffer extension
	- some clipping optimizations
    Bug fixes:
	- fixed shading/material bug when drawing long primitive strips
	- fixed clipping problem in long primitive strips
	- fixed clipping bug when using 3Dfx driver
	- fixed a problem when trying to use X fonts w/ 3Dfx driver
	- fixed a texture filter bug in 3Dfx/Glide driver
	- fixed bug in 3Dfx/Glide driver involving depth mask & clearing
	- glLoadMatrix to set projection matrix confused the 3Dfx driver
	- non-identity texture matrices didn't work with linux-386 configs
	- glGenTextures() didn't reserve the returned texture IDs
	- NULL proxy image sent to glTexImageXD() caused crash
	- added texture state validation optimization (Henk Kok)
	- fixed colormap reuse problem when using both RGB and CI windows
	- 32bpp True/DirectColor X visuals weren't recognized
	- fixed potential problem in evaluators memory allocation
	- fixed assorted demo compilation bugs
    Changes:
	- replaced old Mesa/windows/ directory with Mesa/WIN32/ directory
	- converted a few old glaux/gltk demos to GLUT
	- renamed directories:  demos -> xdemos,  gdemos -> demos


3.0  September 17, 1998
    New:
	- OpenGL 1.2 API
	- GL_EXT_abgr pixel format extension
	- GL_SGIS_texture_edge_clamp extension
	- GL_SGIS_multitexture extension (to be replaced by GL_ARB_multitex)
	- GL_EXT_multitexture extension (to be replaced by GL_ARB_multitex)
	- GL_EXT_rescale_normal extension and renormal.c demo
	- GLX_SGI_video_sync extension (a no-op)
	- antialiased lines
	- glGetTexImage() now implemented
	- glDraw/Copy/ReadPixels() optimizations
	- optimized textured triangle code (Marten Stromberg)
	- more optimization of dithered TrueColor triangles in X driver
	- Linux GGI driver
	- updated MGL driver
    Bug fixes:
	- lots of assorted compilation fixes
	- glInitNames didn't write initial hit record
	- glBitmap didn't always check for invalid raster position
	- switching between GLX and OSMesa contexts caused a crash
	- fixed uninitialized variable in Mesa widget code
	- fixed typo in texture code which caused book/texgen to crash
	- fixed texture sampling bug when filter=GL_LINEAR and wrap=GL_CLAMP
	- gluDisk() in POINT or LINE mode sometimes failed
	- fixed texture + fog bug
	- GL_COMPILE_AND_EXECUTE mode didn't work reliably
	- glMultMatrix in projection matrix mode w/ 3Dfx driver could fail
	- glDrawPixels(color index pixels) weren't converted to RGBA
	- fixed possible getenv() buffer overflow security bug
	- glBitmap in feedback mode was offset by xOrig, yOrig params
	- device driver's DrawPixels hook was never used
	- glDrawPixels with zoomY!=1 and top/bottom clipping didn't work
	- glDrawPixels optimized for GL_LUMINANCE, GL_LUMINANCE_ALPHA, GLubyte
	- fixed MakeCurrent bug in GLwRedrawObjects() in MesaWorkstation.c
	- glCopyTexSubImage2D() didn't work with 3Dfx driver
	- lines with width = 2 could cause crash
	- glClear with scissor rect sometimes cleared whole buffer
	- glTexSubImage2D( .. GL_COLOR_INDEX .. ) didn't work
	- glTexImageXD( .. GL_ABGR_EXT .. ) didn't work
	- computation of inverse modelview matrix sometimes failed
	- fixed GL_CLAMP mode texture sampling bug
	- textured line interpolation was somewhat broken
	- textured triangle interpolation was also somewhat broken
	- glGet(MODELVIEW/PROJECTION/TEXTURE_MATRIX_STACK_DEPTH) off by one
	- evaluator state wasn't fully initialized
	- texture coordinate clipping was buggy
	- evaluator surfaces could be mis-colored
	- glAccum(GL_RETURN, s) didn't obey glColorMask() settings
	- zero area polygons shouldn't be culled if polygon mode is point/line
	- clipped width and height of glReadPixels was sometimes off by one
	- blending with alpha = 0 or 1.0 wasn't always exact
	- reading of pixels from clipped region was buggy
	- minor tweaking of X visual management in GLX emulator
	- glPolygonStipple now obeys pixel unpacking parameters
	- glGetPolygonStipple now obeys pixel packing parameters
	- interleaved vertex array texture coordinates were broken
	- query of proxy texture internal format was broken
	- alpha channel wasn't reliably cleared
	- fixed divide by zero error in gluScaleImage if dest size = 1 x 1
    Conformance bug fixes:
	- GL_SELECTION_BUFFER_POINTER and GL_SELECTION_BUFFER_SIZE were missing
	- GL_TEXTURE_INTERNAL_FORMAT was missing
	- glGet*(GL_POLYGON_STIPPLE) was broken
	- glPush/PopAttrib() didn't save/restore all texture state
	- glBitmap in feedback mode didn't work
	- feedback of texture coords didn't always work
	- glDrawPixels w/ format=GL_DEPTH_COMPONENT, type=GLbyte was broke
	- glDrawPixels w/ format=GL_DEPTH_COMPONENT, type=GLubyte was broke
	- glDrawPixels w/ format=GL_STENCIL_INDEX, type=GL_BITMAP was broke
    Changes:
	- upgraded GLUT to version 3.7
	- only GL and GLU library code included in MesaLib.tar.gz
	- GLUT and all demos now in MesaDemos.tar.gz
	- glaux and gltk libraries removed
	- IRIX -n32 and -64 libs go in lib32/ and lib64/ directories


3.1 beta 1  November 19, 1998
    New:
	- GL_EXT_stencil_wrap extension
	- GL_INGR_blend_func_separate extension
	- GL_ARB_multitexture extension
	- GL_NV_texgen_reflection extension
	- newly optimized vertex transformation code
	- updated GLUT 3.7 code
	- better precision when using 32-bit Z buffer
	- Allegro DJGPP driver
    Bug fixes:
	- glCopyPixels between front/back buffers didn't copy alpha correctly
	- fixed out-of-bounds memory access in optimized 2-D texture code
	- glPixelStorei didn't accept GL_PACK/UNPACK_IMAGE_HEIGHT parameter
	- glGet*() didn't accept GL_MAX_3D_TEXTURE_SIZE parameter
	- clipping of texture coordinates sometimes had bad R,Q values
	- GL_CLAMP_TO_EDGE texture sampling was off by 0.5 texels
	- glEdgeFlagPointer() now takes a GLvoid * instead of GLboolean *
	- texture was sometimes applied twice with 3Dfx driver
	- glPush/PopAttrib() fouled up texture object reference counts
	- glDeleteLists(0, n) caused assertion failure
	- bilinear texture sampling wasn't accurate enough
	- glClear w/ glDepthMask(GL_FALSE) didn't work right on 3Dfx
	- color components were reversed on big endian 32 bpp X visuals
    Changes:
	- removed GL_EXT_multitexture extension


3.1 beta 2  May 24, 1999
    New:
	- multi-textured points and lines (mjk@nvidia.com)
	- optimized 24bpp X rendering (bernd.paysan@gmx.de)
	- added allegro support (bernie-t@geocities.com)
	- cleaned-up Windows-related stuff (Ted Jump)
	- minor stereo changes (KendallB@scitechsoft.com)
	- new BeOS driver which implements BGLView class
	- new Direct3D driver (see src/D3D)
	- more efficient filled gluCylinder() function
	- utilities:  util/showbuffer.[ch] and util/glstate.[ch]
	- fixed some IRIX compiler warnings
	- added support for building Mesa in XFree86 with
	    SGI's GLX (kevin@precisioninsight.com)
    Bug fixes:
	- a variety of Windows/Mesa bug fixes (mjk@nvidia.com)
	- packed pixel images weren't unpacked correctly
	- patches some win32 files in GLUT (mjk@nvidia.com)
	- glTexImage[123]D() didn't accept internalFormat == GL_COLOR_INDEX
	- fixed lighting bug in Keith's new shading code
	- fixed texture segfault seen in Lament screensaver
	- fixed miscellaneous low-memory bugs
	- glClear(GL_COLOR_BUFFER_BIT) with RGBA or CI masking was broken
	- GL_LINEAR sampling of 3D textures was broken
	- fixed SVR4 'cc' compiler macro problem (dawes@xfree86.org)
	- added GL_TEXTURE_PRIORITY fix (keithh@netcomuk.co.uk)
	- fixed wide point and wide line conformance bugs (brianp)
    Changes:
	- some device driver changes (see src/dd.h)
	- new copyright on core Mesa code


3.1 beta 3  September 17, 1999
    New:
	- optimized glAccum function
	- optimized 24bpp rendering in XMesa driver
	- GLU 1.2 polygon tessellator
    Bug Fixes:
	- glGetTexLevelParameter wasn't fully implemented
	- glXUseXFont now handles multi-byte fonts
	- glIsEnabled(GL_TEXTURE_2D / 3D) returned wrong result
	- alpha channel of blending points, lines was sometimes incorrect
    Changes:
	- New library names:  "libGL" instead of "libMesaGL"
	- New library numbering: libGL.so.1.2.310
	- New subdirectories:  docs/ and bin/
	- New Makefile-system (autoconf,automake,libtool)


3.1 final  December 14, 1999
    New:
	- added demos/gloss.c
	- added xdemos/glxdpyinfo.c
	- added GLX_ARB_get_proc_address extension
	- rewritten glTexImage code paths (faster, less memory, bug fixes)
    Bug Fixes:
	- several vertex array bug fixes
	- overlapping glCopyPixels with pixel zooming now works
	- glXUseXFont() bitmaps were vertically shifted by one pixel
	- glCopyPixels with pixel zooming now works


3.2 final  April 24, 2000
    Bug fixes:
	- fixed memcpy bugs in span.c
	- fixed missing glEnd problem in demos/tessdemo.c
	- fixed bug when clearing 24bpp Ximages
	- fixed clipping problem found in Unreal Tournament
	- fixed Loki's "ice bug" and "crazy triangles" seen in Heretic2
	- fixed Loki's 3dfx RGB vs BGR bug
	- fixed Loki's 3dfx smooth/flat shading bug in SoF
    Changes:
	- updated docs/README file
	- use bcopy() optimizations on FreeBSD
	- re-enabled the optimized persp_textured_triangle() function


3.2.1  July 19, 2000
    Bug fixes:
	- gluBuild2DMipmaps() didn't accept GL_BGRA
	- Fixed compile/makefile problems on IRIX
	- fixed segfault in 3dfx driver when using GL selection/feedback
	- no longer cull very, very tiny triangles
	- blending w/ drawbuffer==GL_FRONT_BACK caused segfault (sw rendering)
	- fixed Motif detection code in widgets-mesa/configure.in
	- glColorMaterial and glMaterial updates to emissive and ambient
	  didn't always work right
	- Specular highlights weren't always in the right place
	- clipped GL_LINE mode polygons had interior lines appear
	- blend term GL_ONE_MINUS_CONSTANT_ALPHA was broken
	- GL_NICEST fog didn't always work with flat shading
	- glRect commands in display lists were sometimes miscolored
	- Line Z offset didn't always work
	- fixed texgen normal vector problem (gloss's teapot)
	- numerous GL conformance bugs fixed
    Changes:
	- glColorMask(false, false, false, false) handled better/faster
	- reverted to old GLU polygon tessellator, GLU 1.1
	- updated Win32 build files


3.3  July 21, 2000
    New:
	- antialiased triangles now implemented
	- GL_EXT_texture_env_add texture mode extension
	- GLX 1.3 API
	- support for separate draw/read buffers (ie GL_SGI_make_current_read)
	- thread-safe API dispath
	- improved glxinfo program
	- demos/texdown program to measure texture download performance
	- glext.h header file
	- demos/geartrain program
	- GL_EXT_texture_lod_bias extension
	- demos/lodbias program
	- further optimized glRead/DrawPixels for 16-bit TrueColor X visuals
	- GLX_EXT_visual_rating extension (a no-op, however)
	- GL_HP_occlusion_test extension (for X and OS/Mesa drivers)
	- demos/occlude program
	- GL_SGIS_pixel_texture and GL_SGIX_pixel_texture extensions
	- demos/pixeltex program
	- GL_SGI_color_matrix extension
	- GL_SGI_color_table extension
	- GL_EXT_histogram extension
	- GL_ARB_texture_cube_map extension
	- added xdemos/glxheads and xdemos/manywin
	- demos/texenv.c demo
	- GL_EXT_texture_env_combine extension (by Holger Waechtler)
	- Xlib driver is now thread-safe (see xdemos/glthreads)
    Bug Fixes:
	- various GL conformance failures fixed since 3.2.1
    Changes:
	- gl.h now uses #defines instead of C enums for all tokens
	- glu.h now uses #defines instead of C enums for all tokens
	- moved programs from 3Dfx/demos/ into demos/ directory


3.4  November 3, 2000
    New:
	- optimized glDrawPixels for glPixelZoom(1,-1)
    Bug Fixes:
	- widgets-mesa/src/*.c files were missing from 3.3 distro
	- include/GL/mesa_wgl.h file was missing from 3.3 distro
	- fixed some Win32 compile problems
	- texture object priorities weren't getting initialized to 1.0
	- glAreTexturesResident return value was wrong when using hardware
	- glXUseXFont segfaulted when using 3dfx driver (via MESA_GLX_FX)
	- glReadPixels with GLushort packed types was broken
	- fixed a few bugs in the GL_EXT_texture_env_combine texture code
	- glPush/PopAttrib(GL_ENABLE_BIT) mishandled multi-texture enables
	- fixed some typos/bugs in the VB code
	- glDrawPixels(GL_COLOR_INDEX) to RGB window didn't work
	- optimized glDrawPixels paths weren't being used
	- per-fragment fog calculation didn't work without a Z buffer
	- improved blending accuracy, fixes Glean blendFunc test failures
	- glPixelStore(GL_PACK/UNPACK_SKIP_IMAGES) wasn't handled correctly
	- glXGetProcAddressARB() didn't always return the right address
	- gluBuild[12]DMipmaps() didn't grok the GL_BGR pixel format
	- texture matrix changes weren't always detected (GLUT projtex demo)
	- fixed random color problem in vertex fog code
	- fixed Glide-related bug that let Quake get a 24-bit Z buffer
    Changes:
	- finished internal support for compressed textures for DRI


3.4.1  February 14, 2001
    New:
	- fixed some Linux build problems
	- fixed some Windows build problems
	- GL_EXT_texture_env_dot3 extension (Gareth Hughes)
    Bug fixes:
	- added RENDER_START/RENDER_FINISH macros for glCopyTexImage in DRI
	- various state-update code changes needed for DRI bugs
	- disabled pixel transfer ops in glColorTable commands, not needed
	- fixed bugs in glCopyConvolutionFilter1D/2D, glGetConvolutionFilter
	- updated sources and fixed compile problems in widgets-mesa/
	- GLX_PBUFFER enum value was wrong in glx.h
	- fixed a glColorMaterial lighting bug
	- fixed bad args to Read/WriteStencilSpan in h/w stencil clear function
	- glXCopySubBufferMESA() Y position was off by one
	- Error checking of glTexSubImage3D() was broken (bug 128775)
	- glPopAttrib() didn't restore all derived Mesa state correctly
	- Better glReadPixels accuracy for 16bpp color - fixes lots of OpenGL
	  conformance problems at 16bpp.
	- clearing depth buffer with scissoring was broken, would segfault
	- OSMesaGetDepthBuffer() returned bad bytesPerValue value
	- fixed a line clipping bug (reported by Craig McDaniel)
	- fixed RGB color over/underflow bug for very tiny triangles
    Known problems:
	- NURBS or evaluator surfaces inside display lists don't always work


3.4.2  May 17, 2001
    Bug fixes:
	- deleting the currently bound texture could cause bad problems
	- using fog could result in random vertex alpha values
	- AA triangle rendering could touch pixels outside right window bound
	- fixed byteswapping problem in clear_32bit_ximage() function
	- fixed bugs in wglUseFontBitmapsA(), by Frank Warmerdam
	- fixed memory leak in glXUseXFont()
	- fragment sampling in AA triangle function was off by 1/2 pixel
	- Windows: reading pixels from framebuffer didn't always work
	- glConvolutionFilter2D could segfault or cause FP exception
	- fixed segfaults in FX and X drivers when using tex unit 1 but not 0
	- GL_NAND logicop didn't work right in RGBA mode
	- fixed a memory corruption bug in vertex buffer reset code
	- clearing the softwara alpha buffer with scissoring was broken
	- fixed a few color index mode fog bugs
	- fixed some bad assertions in color index mode
	- fixed FX line 'stipple' bug #420091
	- fixed stencil buffer clear width/height typo
	- fixed GL error glitches in gl[Client]ActiveTextureARB()
	- fixed Windows compilation problem in texutil.c
	- fixed 1/8-pixel AA triangle sampling error
    Changes:
	- optimized writing mono-colored pixel spans to X pixmaps
	- increased max viewport size to 2048 x 2048


3.5  June 21, 2001
    New:
	- internals of Mesa divided into modular pieces (Keith Whitwell)
	- 100% OpenGL 1.2 conformance (passes all conformance tests)
	- new AA line algorithm
	- GL_EXT_convolution extension
	- GL_ARB_imaging subset
	- OSMesaCreateContextExt() function
	- GL_ARB_texture_env_add extension (same as GL_EXT_texture_env_add)
	- GL_MAX_TEXTURE_UNITS_ARB now defaults to eight
	- GL_EXT_fog_coord extension (Keith Whitwell)
	- GL_EXT_secondary_color extension (Keith Whitwell)
	- GL_ARB_texture_env_add extension (same as GL_EXT_texture_env_add)
	- GL_SGIX_depth_texture extension
	- GL_SGIX_shadow and GL_SGIX_shadow_ambient extensions
	- demos/shadowtex.c demo of GL_SGIX_depth_texture and GL_SGIX_shadow
	- GL_ARB_texture_env_combine extension
	- GL_ARB_texture_env_dot3 extension
	- GL_ARB_texture_border_clamp (aka GL_SGIS_texture_border_clamp)
	- OSMesaCreateContextExt() function
	- libOSMesa.so library, contains the OSMesa driver interface
	- GL/glxext.h header file for GLX extensions
	- somewhat faster software texturing, fogging, depth testing
	- all color-index conformance tests now pass (only 8bpp tested)
	- SPARC assembly language TCL optimizations (David Miller)
	- GL_SGIS_generate_mipmap extension
    Bug Fixes:
	- fbiRev and tmuRev were unitialized when using Glide3
	- fixed a few color index mode conformance failures; all pass now
	- now appling antialiasing coverage to alpha after texturing
	- colors weren't getting clamped to [0,1] before color table lookup
	- fixed RISC alignment errors caused by COPY_4UBV macro
	- drawing wide, flat-shaded lines could cause a segfault
	- vertices now snapped to 1/16 pixel to fix rendering of tiny triangles
    Changes:
	- SGI's Sample Implementation (SI) 1.3 GLU library replaces Mesa GLU
	- new libOSMesa.so library, contains the OSMesa driver interface


4.0  October 22, 2001
    New:
	- Mesa 4.0 implements the OpenGL 1.3 specification
	- GL_IBM_rasterpos_clip extension
	- GL_EXT_texture_edge_clamp extension (aka GL_SGIS_texture_edge_clamp)
	- GL_ARB_texture_mirrored_repeat extension
	- WindML UGL driver (Stephane Raimbault)
	- added OSMESA_MAX_WIDTH/HEIGHT queries
	- attempted compiliation fixes for Solaris 5, 7 and 8
	- updated glext.h and glxext.h files
	- updated Windows driver (Karl Schultz)
    Bug fixes:
	- added some missing GLX 1.3 tokens to include/GL/glx.h
	- GL_COLOR_MATRIX changes weren't recognized by teximage functions
	- glCopyPixels with scale and bias was broken
	- glRasterPos with lighting could segfault
	- glDeleteTextures could leave a dangling pointer
	- Proxy textures for cube maps didn't work
	- fixed a number of 16-bit color channel bugs
	- fixed a few minor memory leaks
	- GLX context sharing was broken in 3.5
	- fixed state-update bugs in glPopClientAttrib()
	- fixed glDrawRangeElements() bug
	- fixed a glPush/PopAttrib() bug related to texture binding
	- flat-shaded, textured lines were broken
	- fixed a dangling pointer problem in the XMesa code (Chris Burghart)
	- lighting didn't always produce the correct alpha value
	- fixed 3DNow! code to not read past end of arrays (Andrew Lewycky)


4.0.1 December 17, 2001
    New:
	- better sub-pixel sample positions for AA triangles (Ray Tice)
	- slightly faster blending for (GL_ZERO, GL_ONE) and (GL_ONE, GL_ZERO)
    Bug fixes:
	- added missing break statements in glGet*() for multisample cases
	- fixed uninitialized hash table mutex bug (display lists / texobjs)
	- fixed bad teximage error check conditional (bug 476846)
	- fixed demos readtex.c compilation problem on Windows (Karl Schultz)
	- added missing glGet() query for GL_MAX_TEXTURE_LOD_BIAS_EXT
	- silence some compiler warnings (gcc 2.96)
	- enable the #define GL_VERSION_1_3 in GL/gl.h
	- added GL 1.3 and GLX 1.4 entries to gl_mangle.h and glx_mangle.h
	- fixed glu.h typedef problem found with MSDev 6.0
	- build libGL.so with -Bsymbolic (fixes bug found with Chromium)
	- added missing 'const' to glXGetContextIDEXT() in glxext.h
	- fixed a few glXGetProcAddress() errors (texture compression, etc)
	- fixed start index bug in compiled vertex arrays (Keith)
	- fixed compilation problems in src/SPARC/glapi_sparc.S
	- fixed triangle strip "parity" bug found in VTK medical1 demo (Keith)
	- use glXGetProcAddressARB in GLUT to avoid extension linking problems
	- provoking vertex of flat-shaded, color-index triangles was wrong
	- fixed a few display list bugs (GLUT walker, molecule, etc) (Keith)
	- glTexParameter didn't flush the vertex buffer (Ray Tice)
	- feedback attributes for glDraw/CopyPixels and glBitmap were wrong
	- fixed bug in normal length caching (ParaView lighting bug)
	- fixed separate_specular color bug found in Chimera (18 Dec 2001)


4.0.2  April 2, 2002
    New:
	- New DOS (DJGPP) driver written by Daniel Borca
	- New driver interface functions for TCL drivers (such as Radeon DRI)
	- GL_RENDERER string returns "Mesa Offscreen16" or "Mesa Offscreen32"
	  if using deep color channels
	- latest GL/glext.h and GL/glxext.h headers from SGI
    Bug fixes:
	- GL_BLEND with non-black texture env color wasn't always correct
	- GL_REPLACE with GL_RGB texture format wasn't always correct (alpha)
	- glTexEnviv( pname != GL_TEXTURE_ENV_COLOR ) was broken
	- glReadPixels was sometimes mistakenly clipped by the scissor box
	- glDraw/ReadPixels didn't catch all the errors that they should have
	- Fixed 24bpp rendering problem in Windows driver (Karl Schultz)
	- 16-bit GLchan mode fixes (m_trans_tmp.h, s_triangle.c)
	- Fixed 1-bit float->int conversion bug in glDrawPixels(GL_DEPTH_COMP)
	- glColorMask as sometimes effecting glXSwapBuffers()
	- fixed a potential bug in XMesaGarbageCollect()
	- N threads rendering into one window didn't work reliably
	- glCopyPixels didn't work for deep color channels
	- improved 8 -> 16bit/channel texture image conversion (Gerk Huisma)
	- glPopAttrib() didn't correctly restore user clip planes
	- user clip planes failed for some perspective projections (Chromium)
    Known bugs:
	- mipmap LOD computation


4.0.3  June 25, 2002
    New:
	- updated GL/glext.h file (version 15)
	- corrected MMX blend code (Jose Fonseca)
	- support for software-based alpha planes in Windows driver
	- updated GGI driver (Filip Spacek)
    Bug fixes:
	- glext.h had wrong values for GL_DOT3_RGB[A]_EXT tokens
	- OSMesaMakeCurrent() didn't recognize buffer size changes
	- assorted conformance fixes for 16-bit/channel rendering
	- texcombine alpha subtraction mode was broken
	- fixed lighting bug with non-uniform scaling and display lists
	- fixed bug when deleting shared display lists
	- disabled SPARC cliptest assembly code (Mesa bug 544665)
	- fixed a couple Solaris compilation/link problems
	- blending clipped glDrawPixels didn't always work
	- glGetTexImage() didn't accept packed pixel types
	- glPixelMapu[is]v() could explode given too large of pixelmap
	- glGetTexParameter[if]v() didn't accept GL_TEXTURE_MAX_ANISOTROPY_EXT
	- glXCopyContext() could lead to segfaults
	- glCullFace(GL_FRONT_AND_BACK) didn't work (bug 572665)
    Changes:
	- lots of C++ (g++) code clean-ups
	- lots of T&L updates for the Radeon DRI driver
    Known bugs:
	- mipmap LOD computation (fixed for Mesa 4.1)


4.1  Month, ??, 2002
    New:
	- GL_NV_vertex_program extension
	- GL_NV_vertex_program1_1 extension
	- GL_ARB_window_pos extension
	- GL_ARB_depth_texture extension
	- GL_ARB_shadow extension
	- GL_ARB_shadow_ambient extension
	- GL_EXT_shadow_funcs extension
	- GL_ARB_point_parameters extension
	- GL_ARB_texture_env_crossbar
	- GL_NV_point_sprite extension
	- GL_NV_texture_rectangle extension
	- massive overhaul/simplification of software rasterizer module,
	  many contributions from Klaus Niederkrueger
	- faster software texturing in some cases (i.e. trilinear filtering)
	- new OSMesaGetProcAddress() function
	- more blend modes implemented with MMX code (Jose Fonseca)
    Bug fixes:
	- better mipmap LOD computation (prevents excessive blurriness)
	- OSMesaMakeCurrent() didn't recognize buffer size changes
	- assorted conformance fixes for 16-bit/channel rendering
	- texcombine alpha subtraction mode was broken
    Changes:
	- New spec file and Python code to generate some GL dispatch files
