			     Mesa 6.1 for MinGW32
			     ~~~~~~~~~~~~~~~~~~~~



Quick & dirty start:
--------------------

	mingw32-make -f Makefile.mgw [OPTIONS...]

   Look into the corresponding makefiles for further information.
   Check README.3DFX to find out how to compile Mesa Glide3 driver
   with MinGW32!



*******************************************************************************
The Mingw port for Mesa 3-D Graphics Library was created August 30, 1998 by Paul Garceau.

Updated January 13, 2000; June 3, 2005 -- Paul Garceau <pgarceau@users.sourceforge.net>

DISCLAIMER:  I make this port of the Mesa 3-D Graphics Library as a service
to the general public.  I can, in no way support or make any guarantee that the
build will work for your system.

Acknowledgements:

	Daniel Borca, whose work and commitment to maintaining the Mingw port of the Mesa 3-D Graphics Library has been, and will continue to be greatly appreciated by an overworked and underpaid developer such as myself.
	Without the creative inspiration and personal commitment provided by Mumit Khan, Jan-Jaap Vanderhagen and Colin Peters, Mingw would never have existed.  	Acknowledgements also need to be given to all of the developers who have worked on Mingw, Mesa and Msys over the years.
	Last, but certainly far from the least, Brian Paul, who has dedicated at least the last seven or eight years of his life to making Mesa 3-D Graphics Library what it is today and managing the development for all of those years.
*********************************************************************************

Greetings,

	Feel free to modify or change things related to the Mingw build as you see fit, just remember that, the author of the current build may not be able to support any modifications you might want to make to the files which have been included for the build.

Mesa core components are licensed under XFree-86 (for more on licensing of Mesa 3-D Graphics Library, check out the Mesa homepage (http://www.mesa3d.org).

The Mingw generated libraries themselves are licensed under the GNU-LGPL license.  Source code for Mingw can be found at http://www.mingw.org.  For licensing terms on Mingw, please visit http://www.mingw.org.

	It is recommended that you use the latest "stable" release of Mingw.  "Candidates" are beta testing distributions for Mingw.  Mingw is available at http://www.mingw.org.

	This build has been tested under WinNT4/SP6.  Win9x and WinNT5 remain untested by me.  I have not tested any of the demos included with Mesa3d.

Installation:

	This readme assumes that you already have extracted the necessary files to a working directory/folder that Mingw can use to build the Mesa3D libraries and that you know where that directory/folder is located on your Windows system.  If you have any questions about how to set things up properly which is specific to Mesa3D, the folks on the Mesa3D mailing lists (http://www.mesa3d.org) would probably be happy to assist you.  Also you can probably ask anyone on the Mingw mailing lists for any questions specific to Mingw (http://www.mingw.org)

Targets and Environment variables used for Mingw build:

	Before going into the actual build of the libraries, here is a list of available targets for the make process:

	"all" or "libgl"  -- this target will build libopengl.a, a static library.  It will not build the demos, etc.

	clean -- this target will clean up most of the Mesa 3-D Graphics Library/object code from your hard drive.

	realclean -- this target will clean up all of the Mesa 3D Graphics Library and the Mesa object code that it can find.

	Environment Variables:

	The environment variables are used to determine what sort of graphics driver support needs to be included in the finished Mesa 3-D Graphics Library.

	GLIDE		path to Glide3 SDK; used with FX.
			default = $(TOP)/glide3
	FX=1		build for 3dfx Glide3. Note that this disables
			compilation of most WMesa code and requires fxMesa.
			As a consequence, you'll need the Win32 Glide3
			library to build any application.
			default = no
	ICD=1		build the installable client driver interface
			(windows opengl driver interface)
			default = no
	X86=1		optimize for x86 (if possible, use MMX, SSE, 3DNow).
			default = no

	
Running the Build:

	Launch Mingw.
	From the Windows Command Prompt:
	Set Environment Variables (as needed).
	"cd" to your Mesa3D 'root' directory.
	Enter "mingw32-make -f makefile.mgw <target>

	That's all there is to it.

	Enjoy!

		Paul G. <pgarceau@users.sourceforge.net>
		Daniel Borca <dborca@users.sourceforge.net>



******This section is added by Heromyth <zxpmyth@yahoo.com.cn>*************

====================
Updated on 2007-7-21
====================

Notice:
	1) The generated DLLs are *not* compatible with the ones built
with the other compilers like VC8, especially for GLUT. 

	2) Although more tests are needed, it can be used individually!

	3) You can set the options about whether using STDCALL to build MESA. The 
config file is <Mesa3D-root>\configs\config.mgw. The default setting is that:
		ALL_USING_STDCALL = 1
, which means using STDCALL to build MESA. 

	4) Of course, you can MESA without using STDCALL,I like this:) 
The setting is :
		ALL_USING_STDCALL = 0
To do this, however, you must modify wingdi.h which is in MingW's include dir. 
For example, run:
	notepad	C:\MingW\include\wingdi.h
, and delete all the lines where all the wgl*() functions are. Because they would 
be conflicted with the ones in <Mesa3D-root>\include\GL\mesa_wgl.h.

>>>>>>>>>> Conflicted Functions List >>>>>>>>>>
WINGDIAPI BOOL WINAPI wglCopyContext(HGLRC,HGLRC,UINT);
WINGDIAPI HGLRC WINAPI wglCreateContext(HDC);
WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC,int);
WINGDIAPI BOOL WINAPI wglDeleteContext(HGLRC);
WINGDIAPI BOOL WINAPI wglDescribeLayerPlane(HDC,int,int,UINT,LPLAYERPLANEDESCRIPTOR);
WINGDIAPI HGLRC WINAPI wglGetCurrentContext(void);
WINGDIAPI HDC WINAPI wglGetCurrentDC(void);
WINGDIAPI int WINAPI wglGetLayerPaletteEntries(HDC,int,int,int,COLORREF*);
WINGDIAPI PROC WINAPI wglGetProcAddress(LPCSTR);
WINGDIAPI BOOL WINAPI wglMakeCurrent(HDC,HGLRC);
WINGDIAPI BOOL WINAPI wglRealizeLayerPalette(HDC,int,BOOL);
WINGDIAPI int WINAPI wglSetLayerPaletteEntries(HDC,int,int,int,const COLORREF*);
WINGDIAPI BOOL WINAPI wglShareLists(HGLRC,HGLRC);
WINGDIAPI BOOL WINAPI wglSwapLayerBuffers(HDC,UINT);
WINGDIAPI BOOL WINAPI wglUseFontBitmapsA(HDC,DWORD,DWORD,DWORD);
WINGDIAPI BOOL WINAPI wglUseFontBitmapsW(HDC,DWORD,DWORD,DWORD);
WINGDIAPI BOOL WINAPI wglUseFontOutlinesA(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT);
WINGDIAPI BOOL WINAPI wglUseFontOutlinesW(HDC,DWORD,DWORD,DWORD,FLOAT,FLOAT,int,LPGLYPHMETRICSFLOAT);
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

====================
Updated on 2007-7-22
====================
	I havn't thought that I would find a better way to solve my problems so soon. 
I changed the method in which the import-libs and DLLs are made. After this update,
the DLLs of MESA are more optimized and more compatible. 
	It seems that there is no need to keep the building way of 'NO-STDCALL'.The 
way of USING_STDCALL is so nice! The file <Mesa3D-root>\configs\config.mgw is 
also not needed, and can be deleted safely!
	


*********************************************************************************