
                         Mesa 3.3 release notes

                             July 21, 2000

                             PLEASE READ!!!!



Introduction
------------

Mesa uses an even/odd version number scheme like the Linux kernel.
Odd numbered versions (such as 3.3) designate new developmental releases.
Even numbered versions (such as 3.2.1) designate stable releases.

Mesa 3.3 has a undergone many internal changes since version 3.2
and features a lot of new extensions.  3.3 is expected to be pretty
stable, but perhaps not as stable as 3.2 which has been used by
thousands of users over the past months.

Everyone is encouraged to try Mesa 3.3.  Bugs should be reported to
the Mesa bug database on www.sourceforge.net.



Header file / GLenum changes
----------------------------

The gl.h and glu.h headers now use #defines to define all GL_* tokens
instead of C-language enums.  This change improves Mesa/OpenGL
interoperability.



New API dispatch code
---------------------

The core Mesa gl* functions are now implemented with a new dispatch
(jump table) which will allow simultaneous direct/indirect rendering.

The code is found in the glapi*.[ch] files.

Of interest:  the actual "glFooBar" functions are generated with
templatized code defined in glapitemp.h and included by glapi.c
The glapitemp.h template should be reusable for all sorts of OpenGL
projects.

The new dispatch code has also optimized with x86 assembly code.
This optimization eliminates copying the function arguments during
dispatch.



New thread support
------------------

Thread support in Mesa has been rewritten.  The glthread.[ch] files
replace mthreads.[ch].  Thread safety is always enabled (on platforms
which support threads, that is).  There is virtually no performance
penalty for typical single-thread applications.  See the glapi.c
file for details.

The Xlib driver (XMesa) is now thread-safe as well.  Be sure to
call XInitThreads() in your app first.  See the xdemos/glthreads.c
demo for an example.



Make configuration changes
--------------------------

If you use the old-style (non GNU automake) method to build Mesa note
that several of the configuration names have changed:

   Old name        New name
   -------------   ----------------
   linux-elf       linux
   linux           linux-static
   linux-386-elf   linux-386
   linux-386       linux-386-static
   etc.



New extensions
--------------

GL_ARB_transpose_matrix
	Adds glLoadTransposeMatrixARB() and glMultTransposeMatrixARB()
        functions.

GL_ARB_texture_cube_map
	For cube-based reflection mapping.

GL_EXT_texture_add_env
	Adds GL_ADD texture environment mode.
	See http://www.berkelium.com/OpenGL/EXT/texture_env_add.txt

GL_EXT_texture_lod_bias
	Allows mipmapped texture blurring and sharpening.

GLX_EXT_visual_rating extension
	This extension has no effect in stand-alone Mesa (used for DRI).

GL_HP_occlusion_test
	Used for bounding box occlusion testing (see demos/occlude.c).

GL_SGIX_pixel_texture / GL_SGIS_pixel_texture
	Lets glDraw/CopyPixels draw a texture coordinate image.

GL_SGI_color_matrix
	Adds a color matrix and another set of scale and bias parameters
	to the glDraw/CopyPixels paths.

GL_SGI_color_table
	Adds additional color tables to the glDraw/Read/CopyPixels paths.

GL_EXT_histogram
	Compute histograms for glDraw/Read/CopyPixels.

GL_EXT_blend_func_separate
	This is the same as GL_INGR_blend_func_separate.

GL_ARB_texture_cube_mapping
	6-face cube mapping, nicer than sphere mapping

GL_EXT_texture_env_combine
	For advanced texture environment effects.


Documentation for all these functions can be found at
http://oss.sgi.com/projects/ogl-sample/registry/



GLX_SGI_make_current_read functionality
---------------------------------------

The functionality of this extension is needed for GLX 1.3 (and required
for the Linux/OpenGL standards base).

Implementing this function required a **DEVICE DRIVER CHANGE**.
The old SetBuffer() function has been replaced by SetReadBuffer() and
SetDrawBuffer().  All device drivers will have to be updated because
of this change.

The new function, glXMakeContextCurrent(), in GLX 1.3 now works in Mesa.
The xdemos/wincopy.c program demonstrates it.



Image-related code changes
--------------------------

The imaging path code used by glDrawPixels, glTexImage[123]D,
glTexSubImage[123], etc has been rewritten.  It's now faster,
uses less memory and has several bug fixes.  This work was
actually started in Mesa 3.1 with the glTexImage paths but has now
been carried over to glDrawPixels as well.



Device driver interface changes
-------------------------------

Added new functions for hardware stencil buffer support:
   WriteStencilSpan
   ReadStencilSpan
   WriteStencilPixels
   ReadStencilPixels


Removed old depth buffer functions:
   AllocDepthBuffer
   DepthTestSpan
   DepthTestPixels
   ReadDepthSpanFloat
   ReadDepthSpanInt


Added new depth buffer functions:
   WriteDepthSpan
   ReadDepthSpan
   WriteDepthPixels
   ReadDepthPixels

   These functions always read/write 32-bit GLuints.  This will allow
   drivers to have anywhere from 0 to 32-bit Z buffers without
   recompiling for 16 vs 32 bits as was previously needed.


New texture image functions
   The entire interface for texture image specification has been updated.
   With the new functions, it's optional for Mesa to keep an internal copy
   of all textures.  Texture download should be a lot faster when the extra
   copy isn't made.

Misc changes
   TexEnv now takes a target argument
   Removed UseGlobalTexturePalette (use Enable function instead)


Also added
   ReadPixels
   CopyPixels


The SetBufffer function has been replaced by SetDrawBuffer and
SetReadBuffer functions.  This lets core Mesa independently
specify which buffer is to be used for reading and which for
drawing.

The Clear function's mask parameter has changed.  Instead of
mask being the flags specified by the user to glClear, the
mask is now a bitmask of the DD_*_BIT flags in dd.h.  Now
multiple color buffers can be specified for clearing (ala
glDrawBuffers).  The driver's Clear function must also
check the glColorMask glIndexMask, and glStencilMask settings
and do the right thing.  See the X/Mesa, OS/Mesa, or FX/Mesa
drivers for examples.


The depth buffer changes shouldn't be hard to make for existing
drivers.  In fact, it should simply the code.  Be careful with
the depthBits value passed to gl_create_context().  1 is a bad
value!  It should normally be 0, 16, 24, or 32.


gl_create_framebuffer() takes new arguments which explicitly tell
core Mesa which ancillary buffers (depth, stencil, accum, alpha)
should be implemented in software.  Mesa hardware drivers should
carefully set these flags depending on which buffers are in the
graphics card.



Internal constants
------------------

Point and line size range and granularity limits are now stored
in the gl_constants struct, which is the Const member of GLcontext.
The limits are initialized from values in config.h but may be
overridden by device drivers to reflect the limits of that driver's
hardware.

Also added constants for NumAuxBuffers and SubPixelBits.



OpenGL Conformance
------------------

Mesa now passes all the OpenGL 1.1 conformance tests, except for
antialiased lines.  AA lines fail on some, but not all, the tests.
In order to fix the remaining failures, a new AA line algorithm will
be needed (which computes coverage values for end-point fragments).
This will be done for Mesa 3.5/3.6.



OpenGL 1.2 GL_ARB_imaging subset
--------------------------------

Mesa 3.3 implements all the features of GL_ARB_imaging except for
image convolution.  This will (hopefully) be done for Mesa 3.5/3.6.



----------------------------------------------------------------------
