
                         Mesa 3.5 release notes

                             June 21, 2001

                             PLEASE READ!!!!



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

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

The biggest change in Mesa 3.5 is a complete overhaul of the source
code in order to make it more modular.  This was driven by the DRI
hardware drivers.  It simplifies the DRI drivers and opens the door
to hardware transform/clip/lighting (TCL).  Keith Whitwell can take
the credit for that.



Driver Support
--------------

The device driver interface in Mesa 3.5 has changed a lot since Mesa 3.4
Not all of the older Mesa drivers have been updated.  Here's the status:

Driver			Status
----------------------	-----------
XMesa (Xlib)		updated
OSMesa (off-screen)	updated
FX (3dfx Voodoo1/2)	updated
SVGA			updated
GGI			not updated
Windows/Win32		not updated
DOS/DJGPP		not updated
BeOS			not updated
Allegro			not updated
D3D			not updated
DOS			not updated

We're looking for volunteers to update the remaining drivers.  Please
post to the Mesa3d-dev mailing list if you can help.



GLU 1.3
-------

Mesa 3.5 includes the SGI Sample Implementation (SI) GLU library.
This version of GLU supports the GLU 1.3 specification.  The old
Mesa GLU library implemented the 1.1 specification.  The SI GLU
library should work much better.

You'll need a C++ compiler to compile the SI GLU library.  This may
be a problem on some systems.



New Extensions
--------------

GL_EXT_convolution
	Adds image convolution to glRead/Copy/DrawPixels/TexImage.

GL_ARB_imaging
	This is the optional imaging subset of OpenGL 1.2.
	It's the GL_EXT_convolution, GL_HP_convolution_border_modes,
	GL_EXT_histogram, GL_EXT_color_table, GL_EXT_color_subtable
	GL_EXT_blend_color, GL_EXT_blend_minmax, GL_EXT_blend_subtract
	and GL_SGI_color_matrix extensions all rolled together.
	This is supported in all software renderers but not in all
	hardware drivers (3dfx for example).

GL_ARB_texture_compression
	This is supported in Mesa but only used by the 3dfx DRI drivers
	for Voodoo4 and later.

GL_ARB_texture_env_add
	This is identical to GL_EXT_texture_env_add.

GL_NV_blend_square
	Adds extra blend source and dest factors which allow squaring
	of color values.

GL_EXT_fog_coord
	Allows specification of a per-vertex fog coordinate instead of
	having fog always computed from the eye distance.

GL_EXT_secondary_color
	Allows specifying the secondary (specular) color for each vertex
	instead of getting it only from lighting in GL_SEPARATE_SPECULAR_COLOR
	mode.

GL_ARB_texture_env_combine
	Basically the same as GL_EXT_texture_env_combine

GL_ARB_texture_env_add extension
	Texture addition mode.

GL_ARB_texture_env_dot3 extension
	Dot product texture environment.

GL_ARB_texture_border_clamp
	Adds GL_CLAMP_TO_BORDER_ARB texture wrap mode

GL_SGIX_depth_texture, GL_SGIX_shadow and GL_SGIX_shadow_ambient
	Implements a shadow casting algorithm based on depth map textures

GL_SGIS_generate_mipmap
	Automatically generate lower mipmap images whenever the base mipmap
	image is changed with glTexImage, glCopyTexImage, etc.



libOSMesa.so
------------

libOSMesa.so is a new library which contains the OSMesa interface for
off-screen rendering.  Apps which need the OSMesa interface should link
with both -lOSMesa and -lGL.  This change was made so that stand-alone
Mesa works the same way as XFree86/DRI's libGL.



Device Driver Changes / Core Mesa Changes
-----------------------------------------

The ctx->Driver.LogicOp() function has been removed.  It used to
be called during state update in order to determine if the driver
could do glLogicOp() operations, and if not, set the SWLogicOpEnabled
flag.  Drivers should instead examine the LogicOp state themselves
and choose specialized point, line, and triangle functions appropriately,
or fall back to software rendering.  The Xlib driver was the only driver
to use this function.  And since the Xlib driver no longer draws
points, lines or triangles using Xlib, the LogicOp function isn't needed.

The ctx->Driver.Dither() function has been removed.  Drivers should
detect dither enable/disable via ctx->Driver.Enable() instead.

The ctx->Driver.IndexMask() and ctx->Driver.ColorMask() functions
are now just called from glIndexMask and glColorMask like the other
GL state-changing functions.  They are no longer called from inside
gl_update_state().  Also, they now return void.  The change was made
mostly for sake of uniformity.

The NEW_DRVSTATE[0123] flags have been removed.  They weren't being used
and are obsolete w.r.t. the way state updates are done in DRI drivers.


Removed obsolete gl_create_visual() and gl_destroy_visual().

Renamed functions (new namespace):

old				new
gl_create_framebuffer		_mesa_create_framebuffer
gl_destroy_framebuffer		_mesa_destroy_framebuffer
gl_create_context		_mesa_create_context
gl_destroy_context		_mesa_destroy_context
gl_context_initialize		_mesa_context_initialize
gl_copy_context			_mesa_copy_context
gl_make_current			_mesa_make_current
gl_make_current2		_mesa_make_current2
gl_get_current_context		_mesa_get_current_context
gl_flush_vb			_mesa_flush_vb
gl_warning			_mesa_warning
gl_compile_error		_mesa_compile_error


All the drivers have been updated, but not all of them have been
tested since I can't test some platforms (DOS, Windows, Allegro, etc).


X/Mesa Driver
-------------

The source files for the X/Mesa driver in src/X have been renamed.
The xmesa[1234].c files are gone.  The new files are xm_api.c,
xm_dd.c, xm_line.c, xm_span.c and xm_tri.c.



Multitexture
------------

Eight texture units are now supported by default.



OpenGL SI related changes
-------------------------

In an effort to make Mesa's internal interfaces more like the OpenGL
SI interfaces, a number of changes have been made:

1. Importing the SI's glcore.h file which defines a number of
interface structures like __GLimports and __GLexports.

2. Renamed "struct gl_context" to "struct __GLcontextRec".

3. Added __glCoreCreateContext() and __glCoreNopDispatch() functions.

4. The GLcontext member Visual is no longer a pointer.

5. New file: imports.c to setup default import functions for Mesa.




16-bit color channels
---------------------

There's experimental support for 16-bit color channels (64-bit pixels)
in Mesa 3.5.  Only the OSMesa interface can be used for 16-bit rendering.
Type "make linux-osmesa16" in the top-level directory to build the
special libOSMesa16.so library.

This hasn't been tested very thoroughly yet so please file bug reports
if you have trouble.

In the future I hope to implement support for 32-bit, floating point
color channels.

----------------------------------------------------------------------
$Id: RELNOTES-3.5,v 1.1.1.1 2012/03/29 17:22:08 uid42307 Exp $
