
                           Mesa 6.3 release notes

                              July 20, 2005

                              PLEASE READ!!!!



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

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



New Features
------------

GL_ARB_draw_buffers - allows a fragment program to write to a number of
  separate color buffers, instead of just one.

GL_OES_read_format - allows one to query the fastest glReadPixels format
  and datatype.

GL_ARB_pixel_buffer_object - buffer objects for pixel read/write functions.

GL_EXT_framebuffer_object - allows render-to-texture and provides a
  window-system indepedent Pbuffer facility.
  The Mesa CVS tree contains a couple tests of this extension.

DirectFB driver, contributed by Claudio Ciccani.  See docs/README.directfb
for details.



Vertex/Fragment Program PRINT Instruction
-----------------------------------------

The GL_NV_vertex_program and GL_NV_fragment_program languages have been
extended with a PRINT instruction.



glDeleteTextures(), glDeletePrograms() and glDeleteBuffers() Changed
--------------------------------------------------------------------

To match the behaviour of other OpenGL implementations, glDeleteTextures,
glDeletePrograms and glDeleteBuffers have been modified so that:

  * The named texture/program/buffer ID is immediately freed for re-use.

  * The actual texture object, program or buffers isn't really deleted until
    it is no longer bound in any rendering context (the reference count
    is zero).

Previously, the texture/program/buffer ID wasn't freed until the object
was really deleted.

Note that textures, programs and buffers can be shared by several rendering
contexts so they can't be deleted until they're unbound in _all_ contexts.



GL_EXT_framebuffer_object changes
---------------------------------

Implementing this extension involved changing a lot of code (for the better).

The gl_framebuffer object now a collection of gl_renderbuffer objects.
Renderbuffers may store colors, stencil indices, or depth values.  The
gl_framebuffer and gl_renderbuffer types are object-oriented in design.

All the old RGB, color index, stencil and depth-related span functions for
reading/writing pixels from/to buffers has changed.  Now, all pixels are
read/written through a set of common renderbuffer functions (methods).

Most device drivers have been updated for these changes, but some haven't.



To Do (someday) items
---------------------
 Switch to freeglut
 Increase MAX_DRAWBUFFERS
 driver hooks for BeginQuery/EndQuery



Miscellaneous
-------------

The main/get.c file is now generated with a Python script (get_gen.py).



Driver			Status
----------------------	---------------------
XMesa (Xlib)		implements OpenGL 1.5
OSMesa (off-screen)	implements OpenGL 1.5
Glide (3dfx Voodoo1/2)	implements OpenGL 1.3
SVGA			implements OpenGL 1.3
Wind River UGL		implements OpenGL 1.3
Windows/Win32		implements OpenGL 1.5
DJGPP			implements OpenGL 1.5
GGI			implements OpenGL 1.3
BeOS			implements OpenGL 1.5
Allegro			needs updating
D3D			needs updating


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