

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.0.4  October 3, 2002
    New:
	- GL_NV_texture_rectangle extension
	- updated glext.h header (version 17)
	- updated DOS driver (Daniel Borca)
	- updated BeOS R5 driver (Philippe Houdoin)
	- added GL_IBM_texture_mirror_repeat
	- glxinfo now takes -l option to print interesting OpenGL limits info
	- GL_MESA_ycbcr_texture extension
	- GL_APPLE_client_storage extension (for some DRI drivers only)
	- GL_MESA_pack_invert extension
    Bug fixes:
	- fixed GL_LINEAR fog bug by adding clamping
	- fixed FP exceptions found using Alpha CPU
	- 3dfx MESA_GLX_FX=window (render to window) didn't work
	- fixed memory leak in wglCreateContest (Karl Schultz)
	- define GLAPIENTRY and GLAPI if undefined in glu.h
	- wglGetProcAddress didn't handle all API functions
	- when testing for OpenGL 1.2 vs 1.3, check for GL_ARB_texture_cube_map
	- removed GL_MAX_CONVOLUTION_WIDTH/HEIGHT from glGetInteger/Float/etc()
	- error checking in compressed tex image functions had some glitches
	- fixed AIX compile problem in src/config.c
	- glGetTexImage was using pixel unpacking instead of packing params
	- auto-mipmap generation for cube maps was incorrect
    Changes:
	- max texture units reduced to six to accomodate texture rectangles
	- removed unfinished GL_MESA_sprite_point extension code


4.1  October 29, 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
	- GL_EXT_multi_draw_arrays extension
	- GL_EXT_stencil_two_side extension
	- GLX_SGIX_fbconfig and GLX_SGIX_pbuffer extensions
	- GL_ATI_texture_mirror_once extension (Ian Romanick)
	- 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)
	- added glutGetProcAddress() to GLUT
	- added GLUT_FPS env var to compute frames/second in glutSwapBuffers()
	- pbinfo and pbdemo PBuffer programs
	- glxinfo -v prints transprent pixel info (Gerd Sussner)
    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
	- fixed some blend problems when GLchan==GLfloat (Gerk Huisma)
	- clamp colors to [0,inf] in OSMesa if GLchan==GLfloat (Gerk Huisma)
	- fixed divide by zero error in NURBS tessellator (Jon Perry)
	- fixed GL_LINEAR fog bug by adding clamping
	- fixed FP exceptions found using Alpha CPU
	- 3dfx/glide driver render-to-window feature was broken
	- added missing GLX_TRANSPARENT_RGB token to glx.h
	- fixed error checking related to paletted textures
	- fixed reference count error in glDeleteTextures (Randy Fayan)
    Changes:
	- New spec file and Python code to generate some GL dispatch files
	- Glide driver defaults to "no" with autoconf/automake
	- updated demos/stex3d with new options


5.0  November 13, 2002
    New:
	- OpenGL 1.4 support (glGetString(GL_VERSION) returns "1.4")
	- removed some overlooked debugging code
	- glxinfo updated to support GLX_ARB_multisample
	- GLUT now support GLX_ARB_multisample
	- updated DOS driver (Daniel Borca)
    Bug fixes:
	- GL_POINT and GL_LINE-mode polygons didn't obey cull state
	- fixed potential bug in _mesa_align_malloc/calloc()
	- fixed missing triangle bug when running vertex programs
	- fixed a few HPUX compilation problems
	- FX (Glide) driver didn't compile
	- setting GL_TEXTURE_BORDER_COLOR with glTexParameteriv() didn't work
	- a few EXT functions, like glGenTexturesEXT, were no-ops
	- a few OpenGL 1.4 functions like glFogCoord*, glBlendFuncSeparate,
	  glMultiDrawArrays and glMultiDrawElements were missing
	- glGet*(GL_ACTIVE_STENCIL_FACE_EXT) was broken
	- Pentium 4 Mobile was mistakenly identified as having 3DNow!
	- fixed one-bit error in point/line fragment Z calculation
	- fixed potential segfault in fakeglx code
	- fixed color overflow problem in DOT3 texture env mode


5.0.1  March 30, 2003
    New:
	- DOS driver updates from Daniel Borca
	- updated GL/gl_mangle.h file (Bill Hoffman)
    Bug fixes:
	- auto mipmap generation for cube maps was broken (bug 641363)
	- writing/clearing software alpha channels was unreliable
	- minor compilation fixes for OS/2 (Evgeny Kotsuba)
	- fixed some bad assertions found with shadowtex demo
	- fixed error checking bug in glCopyTexSubImage2D (bug 659020)
	- glRotate(angle, -x, 0, 0) was incorrect (bug 659677)
	- fixed potential segfault in texture object validation (bug 659012)
	- fixed some bogus code in _mesa_test_os_sse_exception_support (Linus)
	- fix fog stride bug in tnl code for h/w drivers (Michel Danzer)
	- fixed glActiveTexture / glMatrixMode(GL_TEXTURE) bug (#669080)
	- glGet(GL_CURRENT_SECONDARY_COLOR) should return 4 values, not 3
	- fixed compilation problem on Solaris7/x86 (bug 536406)
	- fixed prefetch bug in 3DNow! code (Felix Kuhling)
	- fixed NeXT build problem (FABSF macro)
	- glDrawPixels Z values when glPixelZoom!=1 were invalid (bug 687811)
	- zoomed glDraw/CopyPixels with clipping sometimes failed (bug 689964)
	- AA line and triangle Z values are now rounded, not truncated
	- fixed color interpolation bug when GLchan==GLfloat (bug 694461)
	- glArePrograms/TexturesResident() wasn't 100% correct (Jose Fonseca)
	- fixed a minor GL_COLOR_MATERIAL bug
	- NV vertex program EXP instruction was broken
	- glColorMask misbehaved with X window / pixmap rendering
	- fix autoconf/libtool GLU C++ linker problem on Linux (a total hack)
	- attempt to fix GGI compilation problem when MesaDemos not present
	- NV vertex program ARL-relative fetches didn't work
    Changes:
	- use glPolygonOffset in gloss demo to avoid z-fighting artifacts
	- updated winpos and pointblast demos to use ARB extensions
	- disable SPARC normal transformation code (bug 673938)
	- GLU fixes for OS/2 (Evgeny Kotsuba)


5.0.2  September 5, 2003
    Bug fixes:
	- fixed texgen problem causing texcoord's Q to be zero (stex3d)
	- default GL_TEXTURE_COMPARE_MODE_ARB was wrong
	- GL_CURRENT_MATRIX_NV query was wrong
	- GL_CURRENT_MATRIX_STACK_DEPTH_NV query was off by one
	- GL_LIST_MODE query wasn't correct
	- GL_FOG_COORDINATE_SOURCE_EXT query wasn't supported
	- GL_SECONDARY_COLOR_ARRAY_SIZE_EXT query returned wrong value
	- blended, wide lines didn't always work correctly (bug 711595)
	- glVertexAttrib4svNV w component was always 1
	- fixed bug in GL_IBM_rasterpos_clip (missing return)
	- GL_DEPTH_TEXTURE_MODE = GL_ALPHA didn't work correctly
	- a few Solaris compilation fixes
	- fixed glClear() problem for DRI drivers (non-existant stencil, etc)
	- fixed int/REAL mixup in GLU NURBS curve evaluator (Eric Cazeaux)
	- fixed delete [] bug in SI GLU (bug 721765) (Diego Santa Cruz)
	- glFog() didn't clamp fog colors
	- fixed bad float/int conversion for GL_TEXTURE_PRIORITY in the
	  gl[Get]TexParameteri[v] functions
	- fixed invalid memory references in glTexGen functions (bug 781602)
	- integer-valued color arrays weren't handled correctly
	- glDrawPixels(GL_DEPTH_COMPONENT) with glPixelZoom didn't work
	- GL_EXT_texture_lod_bias is part of 1.4, overlooked in 5.0.1
    Changes:
	- build GLUT with -fexceptions so C++ apps propogate exceptions


5.1  December 17, 2003
    New:
	- reorganized directory tree
	- GL_ARB_vertex/fragment_program extensions (Michal Krol & Karl Rasche)
	- GL_ATI_texture_env_combine3 extension (Ian Romanick)
	- GL_SGI_texture_color_table extension (Eric Plante)
	- GL_NV_fragment_program extension
	- GL_NV_light_max_exponent extension
	- GL_EXT_texture_rectangle (identical to GL_NV_texture_rectangle)
	- GL_ARB_occlusion_query extension
	- GL_ARB_point_sprite extension
	- GL_ARB_texture_non_power_of_two extension
	- GL_IBM_multimode_draw_arrays extension
	- GL_EXT_texture_mirror_clamp extension (Ian Romanick)
	- GL_ARB_vertex_buffer_object extension
	- new X86 feature detection code (Petr Sebor)
	- less memory used for display lists and vertex buffers
	- demo of per-pixel lighting with a fragment program (demos/fplight.c)
	- new version (18) of glext.h header
	- new spriteblast.c demo of GL_ARB_point_sprite
	- faster glDrawPixels in X11 driver in some cases (see RELNOTES-5.1)
	- faster glCopyPixels in X11 driver in some cases (see RELNOTES-5.1)
    Bug fixes:
	- really enable OpenGL 1.4 features in DOS driver.
	- fixed issues in glDrawPixels and glCopyPixels for very wide images
	- glPixelMapf/ui/usv()'s size parameter is GLsizei, not GLint
	- fixed some texgen bugs reported by Daniel Borca
	- fixed wglMakeCurrent(NULL, NULL) bug (#835861)
	- fixed glTexSubImage3D z-offset bug (Cedric Gautier)
	- fixed RGBA blend enable bug (Ville Syrjala)
	- glAccum is supposed to be a no-op in selection/feedback mode
	- fixed texgen bug #597589 (John Popplewell)
    Changes:
	- dropped API trace feature (src/Trace/)
	- documentation overhaul.  merged with website content.  more html.
	- glxgears.c demo updated to use GLX swap rate extensions
	- glTexImage1/2/3D now allows width/height/depth = 0
	- disable SPARC asm code on Linux (bug 852204)


6.0  January 16, 2004
    New:
	- full OpenGL 1.5 support
	- updated GL/glext.h file to version 21
    Changes:
	- changed max framebuffer size to 4Kx4K (MAX_WIDTH/HEIGHT in config.h)
    Bug fixes:
	- fixed bug in UNCLAMPED_FLOAT_TO_UBYTE macro; solves a color
	  clamping issue
	- updated suno5-gcc configs
	- glColor3 functions sometimes resulted in undefined alpha values
	- fixed FP divide by zero error seen on VMS with xlockmore, others
	- fixed vertex/fragment program debug problem (bug 873011)
	- building on AIX with gcc works now
	- glDeleteProgramsARB failed for ARB fragment programs (bug 876160)
	- glDrawRangeElements tried to modify potentially read-only storage
	- updated files for building on Windows


6.0.1  April 2, 2004
    New:
	- upgraded glext.h to version 22
	- new build targets (Dan Schikore)
	- new linux-x86-opteron build target (Heath Feather)
    Bug fixes:
	- glBindProgramARB didn't update all necessary state
	- fixed build problems on OpenBSD
	- omit CVS directories from tarballs
	- glGetTexImage(GL_COLOR_INDEX) was broken
	- fixed an infinite loop in t&l module
	- silenced some valgrind warnings about using unitialized memory
	- fixed some compilation/link glitches on IRIX (Mike Stephens)
	- glBindProgram wasn't getting compiled into display lists
	- GLX_FBCONFIG_ID wasn't recognized in glXChooseFBConfig() (bug 888079)
	- two-sided lighting and vertex program didn't work (bug 887330)
	- stores to program parameter registers in vertex state programs
	  didn't work.
	- fixed glOrtho bug found with gcc 3.2.2 (RH9)
	- glXCreateWindow() wasn't fully implemented (bug 890894)
	- generic vertex attribute arrays didn't work in display lists
	- vertex buffer objects' default usage and access fields were wrong
	- glDrawArrays with start!=0 was broken
	- fragment program PK2H, UP2H, UP4B and UP4UB instructions were broken
	- linux-osmesa16-static config didn't work
	- fixed a few color index rendering problems (bug 910687)
	- glInterleavedArrays didn't respect GL_CLIENT_ACTIVE_TEXTURE
	- OSMesa RGB and BGR modes were broken
	- glProgramStringARB mistakenly required a null-terminated string
	- fragment program XPD instruction was incorrect
	- glGetMaterial() didn't work reliably
	- ARB_fragment_program KIL instruction was incorrect


6.1  August 18, 2004
    New:
	- Revamped Makefile system
	- glXUseRotatedXFont() utility (see xdemos/xuserotfont.c)
	- internal driver interface changes related to texture object
	  allocation, vertex/fragment programs, BlendEquationSeparate, etc.
	- option to walk triangle edges with double-precision floats
	  (Justin Novosad of Discreet) (see config.h file)
	- support for AUX buffers in software GLX driver
	- updated glext.h to version 24 and glxext.h to version 6
	- new MESA_GLX_FORCE_ALPHA and MESA_GLX_DEPTH_BITS env vars
	- updated BeOS support (Philippe Houdoin)
    Changes:
	- fragment fog interpolation is perspective corrected now
	- new glTexImage code, much cleaner, may be a bit faster
    Bug fixes:
	- glArrayElement in display lists didn't handle generic vertex attribs
	- glFogCoord didn't always work properly
	- ARB_fragment_program fog options didn't work
	- frag prog TEX instruction no longer incorrectly divides s,t,r by q
	- ARB frag prog TEX and TEXP instructions now use LOD=0
	- glTexEnviv in display lists didn't work
	- glRasterPos didn't do texgen or apply texture matrix
	- GL_DOUBLE-valued vertex arrays were broken in some cases
	- fixed texture rectangle edge/border sampling bugs
	- sampling an incomplete texture in a fragment program would segfault
	- glTexImage was missing a few error checks
	- fixed some minor glGetTexParameter glitches
	- GL_INTENSITY was mistakenly accepted as a <format> to glTexImage
	- fragment program writes to RC/HC register were broken
	- fixed a few glitches in GL_HP_occlusion_test extension
	- glBeginQueryARB and glEndQueryARB didn't work inside display lists
	- vertex program state references were broken
	- fixed triangle color interpolation bug on AIX (Shane Blackett)
	- fixed a number of minor memory leaks (bug #1002030)


6.2  October 2, 2004
    New:
	- enabled GL_ARB_texture_rectangle (same as GL_NV_texture_rectangle)
	- updated Doxygen support (Jose Fonseca)
    Changes:
	- some GGI driver updates (Christoph Egger, bug 1025977)
    Bug fixes:
	- Omit GL_ARB_texture_non_power_of_two from list of OpenGL 1.5 features
	- fixed a few compilation issues on IRIX
	- fixed a matrix classification bug (reported by Wes Bethel)
	- we weren't reseting the vertex/fragment program error state
	  before parsing (Dave Reveman)
	- adjust texcoords for sampling texture rectangles (Dave Reveman)
	- glGet*(GL_MAX_VERTEX_ATTRIBS_ARB) wasn't implemented
	- repeated calls to glDeleteTexture(t) could lead to a crash
	- fixed potential ref count bugs in VBOs and vertex/fragment programs
	- spriteblast demo didn't handle window size changes correctly
	- glTexSubImage didn't handle pixels=NULL correctly for PBOs
	- fixed color index mode glDrawPixels bug (Karl Schultz)


6.2.1  December 9, 2004
    Bug fixes:
	- don't apply regular fog or color sum when using a fragment program
	- glProgramEnvParameter4fARB always generated an error on
	  GL_FRAGMENT_PROGRAM_ARB (fdo bug 1645)
	- glVertexAttrib3svNV and glVertexAttrib3svARB were broken
	- fixed width/height mix-up in glSeparableFilter2D()
	- fixed regression in glCopyPixels + convolution
	- glReadPixels from a clipped front color buffer didn't always work
	- glTexImage didn't accept GL_RED/GREEN/BLUE as the format
	- Attempting queries/accesses of VBO 0 weren't detected as errors
	- paletted textures failed if the palette had fewer than 256 entries
    Changes:
	- fixed a bunch of compiler warnings found with gcc 3.4
	- bug reports should to go bugzilla.freedesktop.org


6.3  July 20, 2005
    New:
	- GL_EXT_framebuffer_object extension
	- GL_ARB_draw_buffers extension
	- GL_ARB_pixel_buffer_object extension
	- GL_OES_read_format extension (Ian Romanick)
	- DirectFB driver (Claudio Ciccani)
	- x86_64 vertex transformation code (Mikko T.)
	- Updated GL/glext.h to version 29
    Changes:
	- added -stereo option for glxgears demo (Jacek Rosik)
	- updated the PBuffer demo code in xdemos/ directory
	- glDeleteTextures/Programs/Buffers() now makes the object ID
	  available for immediate re-use
	- assorted 64-bit clean-ups fixes (x86_64 and Win64)
	- lots of internal changes for GL_EXT_framebuffer_object
    Bug fixes:
	- some functions didn't support PBO functionality
	- glGetTexImage didn't convert color index images to RGBA as required
	- fragment program texcoords were sometimes wrong for points and lines
	- fixed problem with negative dot product in arbfplight, fplight demos
	- fixed bug in perspective correction of antialiased, textured lines
	- querying GL_POST_CONVOLUTION_ALPHA_BIAS_EXT returned wrong value
	- fixed a couple per-pixel fog bugs (Soju Matsumoto)
	- glGetBooleanv(GL_FRAGMENT_PROGRAM_BINDING_NV) was broken
	- fixed float parsing bug in ARB frag/vert programs (bug 2520)
	- XMesaGetDepthBuffer() returned incorrect value for bytesPerValue
	- GL_COLOR_MATERIAL with glColor3 didn't properly set diffuse alpha
	- glXChooseFBConfig() crashed if attribList pointer was NULL
	- program state.light[n].spot.direction.w was wrong value (bug 3083)
	- fragment program fog option required glEnable(GL_FOG) - wrong.
	- glColorTable() could produce a Mesa implementation error (bug 3135)
	- RasterPos could get corrupted by color index rendering path
	- Removed bad XTranslateCoordinates call when rendering to Pixmaps
	- glPopAttrib() didn't properly restore GL_TEXTURE_GEN enable state
	- fixed a few Darwin compilation problems


6.3.1
    This was an intermediate release for X.org which wasn't otherwise released.


6.3.2  August 19, 2005
    New:
	- The distribution now includes the DRI drivers and GLX code
    Changes:
	- Made the DRI "new" driver interface standard, remove old code
    Bug fixes:
	- GL_ARB_vertex/fragment_shader were mistakenly listed in the
	  extensions string
	- negative relative addressing in vertex programs was broken
	- update/fix SPARC assembly code for vertex transformation
	- fixed memory leak when freeing GLX drawables/renderbuffers
	- fixed display list memory leak
	- the GL_PIXEL_MAP_I_TO_I table is now floating point, not integer
	- wglGetProcAddress() didn't handle wgl-functions
	- fixed glxext.h cross-compile issue (Colin Harrison)
	- assorted DRI driver fixes


6.4  October 24, 2005
    New:
	- Added a fast XOR line drawing function in Xlib driver
	- Added support for GL_ARB_texture_mirrored_repeat to savage
	  driver (supported only on Savage4 hardware).
    Changes:
	- Mesa now packaged in three parts: Library, Demos and GLUT
    Bug fixes:
	- GLX_X_RENDERABLE token wasn't accepted by glXChooseFBConfig
	- Some files were present multiple times in the 6.3.2 tarballs
	- r200_vtxtmp_x86.S file was missing from 6.3.2 tarball (bug 4207)
	- glxgears_fbconfig demo didn't work (bug 4237)
	- fixed bug when bilinear sampling 2d textures with borders
	- glXCreatePbuffer() could segfault instead of returning 0 (bug 4235)
	- fixed undefined frexp and rand in X.org libGLcore.a (bug 4242)
	- fixed a few problems with proxy color tables (bug 4270)
	- fixed precision problem in Z clearing (bug 4395)
	- glBitmap, glDraw/CopyPixels mistakenly generated selection hits
	- fixed potential segfault caused by reading pixels outside
	  of renderbuffer bounds
	- glGetTexLevelParameter didn't accept GL_TEXTURE_DEPTH_SIZE_ARB
	- fixed memory corruption bug involving software alpha buffers
	- glReadPixels clipped by window bounds was sometimes broken
	- glDraw/CopyPixels of stencil data ignored the stencil write mask
	- glReadPixels from a texture bound to a framebuffer object didn't work
	- glIsRender/FramebufferEXT weren't totally correct
	- fixed a number of point size attenuation/fade bugs
	- fixed glFogCoord bug 4729
	- GLX encoding for transpose matrix functions was broken
	- fixed broken fragment program KIL and SWZ instructions
	- fragment programs that wrote result.depth.z didn't work


6.4.1  November 30, 2005
    Bug fixes:
	- redefining a vertex program string didn't take effect in TNL module
	- fixed occasional segfault upon vertex/fragment parsing error
	- vertex program LIT instruction didn't handle 0^0=1 correctly
	- fragment program fog option didn't work with glDrawPixels, glBitmap
	- USE_MGL_NAMESPACE didn't work for x86-64
	- OSMesa demos were missing from previous release tarballs
	- fixed problem with float->ushort conversion in glClear (bug 4992)
	- popping of GL_EYE_PLANE texgen state was broken (bug 4996)
	- popping of GL_SPOT_DIRECTION light state was broken (bug 5005)
	- fixed occasional triangle color interpolation problem on VMS
	- work around invalid free() call (bug 5131)
	- fixed BSD X server compilation problem by including stdint.h


6.4.2  February 2, 2006
    New:
	- added OSMesaColorClamp() function/feature
	- added wglGetExtensionStringARB() function
    Bug fixes:
	- fixed some problems when building on Windows
	- GLw header files weren't installed by installmesa script (bug 5396)
	- GL/glfbdev.h file was missing from tarballs
	- fixed TNL initialization bug which could lead to crash (bug 5791)


6.5  March 31, 2006
    New:
	- OpenGL Shading Language support through GL_ARB_shader_objects,
	  GL_ARB_shading_language_100, GL_ARB_vertex_shader and
	  GL_ARB_fragment_shader (done by Michal Krol)
	- GL_EXT_packed_depth_stencil extension
	- GL_EXT_timer_query extension
	- GL_EXT_framebuffer_blit extension
	- GL_ARB_half_float_pixel
	- reflect demo improved to support multiple windows
	- singlebuffer demo (shows no/little-flicker single-buffered rendering)
	- r200: enable GL_ARB_texture_env_crossbar, separate the texture
	  sampling unit bits from the texture env combine enable bits
	- r200: add support for GL_ATI_fragment_shader
	- added fast XOR-mode line drawing optimization
	- radeon: add support for all 3 tmus, GL_ARB_texture_cube_map
	  and GL_EXT_fog_coord
	- MESA_GLX_ALPHA_BITS env var for xlib driver
	- many DRI driver updates (including screen rotation support
	  for the Intel DRI driver)
    Changes:
	- removed GL_HP_occlusion_test (use GL_ARB_occlusion_query instead)
	- removed GL_SGIX/SGIS_pixel_texture extensions
    Bug fixes:
	- fixed glxcontextmodes.c datatype problem (bug 5835)
	- fixed aix-gcc build/install bugs (bug 5874)
	- fixed some bugs in texture env program generation
	- glXCopyContext() didn't handle texture object bindings properly
	- glXCopyContext() didn't copy all lighting state
	- fixed FreeBSD config (Pedro Giffuni)
	- fixed some minor framebuffer object bugs
	- replaced dprintf() with _glu_printf() in GLU (bug 6244)
	- fixed a number of thread safety bugs/regressions
	- fixed a number of GLU tesselator bugs (John Shell, bug 6339)
	- paletted texturing was broken w/ floating point palettes (K. Schultz)
	- lots of assorted framebuffer object bug fixes

6.5.1  August 31, 2006
    New:
	- Intel i965 DRI driver
	- GL_APPLE_vertex_array_object extension (Ian Romanick)
	- GL_EXT_texture_sRGB extension
	- GL_EXT_gpu_program_parameters (Ian Romanick)
	- "engine" demo
	- updated fbdev driver and GLUT for fbdev (Sean D'Epagnier)
	- many updates to the DRI drivers
    Changes:
	- The glVertexAttribARB functions no longer alias the conventional
	  vertex attributes.
	- glxinfo program prints more info with -l option
	- GL_FRAGMENT_PROGRAM_NV and GL_FRAGMENT_PROGRAM_ARB are now
	  compatible, in terms of glBindProgramARB()
    Bug fixes:
	- fixed broken texture border handling for depth textures (bug 6498)
	- removed the test for duplicated framebuffer attachments, per
	  version 117 of the GL_EXT_framebuffer_object specification
	- fixed a few render-to-texture bugs, including render to depth texture
	- clipping of lines against user-defined clip planes was broken (6512)
	- assembly language dispatch for SPARC was broken (bug 6484)
	- assorted compilation fixes on various Unix platforms (Dan Schikore)
	- glPopAttrib could restore an invalid value for GL_DRAW_BUFFER
	- assorted minor fixes for 16 and 32 bit/channel modes
	- fixed assorted bugs in texture compression paths
	- fixed indirect rendering vertex array crashes (bug 6863)
	- glDrawPixels GL_INDEX_OFFSET didn't always work
	- fixed convolution memory leak (bug 7077)
	- rectangular depth textures didn't work
	- invalid mode to glBegin didn't generate an error (bug 7142)
	- 'normalized' parameter to glVertexAttribPointerARB didn't work
	- disable bogus GLX_SGI_video_sync extension in xlib driver
	- fixed R128 driver locking bug (Martijn van Oosterhout)
	- using evaluators with vertex programs caused crashes (bug 7564)
	- fragment.position wasn't set correctly for point/line primitives
	- fixed parser bug for scalar sources for GL_NV_fragment_program
	- max fragment program length was incorrectly 128, now 1024
	- writes to result.depth in fragment programs weren't clamped to [0,1]
	- fixed potential dangling pointer bug in glBindProgram()
	- fixed some memory leaks (and potential crashes) in Xlib driver
