
                            3Dfx Glide device driver



Requirements:
-------------

A Voodoo-based videocard/accelerator
DOS (with DJGPP), Windows9x/2k (with MinGW), Linux
Glide3x library for your OS

http://sourceforge.net/projects/glide/



How to compile:
---------------

DJGPP:
   Place the Glide3 SDK in the top Mesa directory:
	$(MESA)/glide3/include/
		3dfx.h, g3ext.h, glide.h, glidesys.h, glideutl.h, sst1vid.h
	$(MESA)/glide3/lib/
		libgld3x.a, libgld3i.a, glide3x.dxe
   Type:
	make -f Makefile.DJ X86=1 FX=1
   Look into the makefile for further information.

MinGW:
   Place the Glide3 SDK in the top Mesa directory:
	$(MESA)/glide3/include/
		3dfx.h, g3ext.h, glide.h, glidesys.h, glideutl.h, sst1vid.h
	$(MESA)/glide3/lib/
		libglide3x.a, glide3x.dll
   Type:
	make -f Makefile.mgw X86=1 FX=1
   Look into the makefile for further information.

Linux:
   Place the Glide3 SDK in /usr/local/glide
	/usr/local/glide/include/
		3dfx.h, g3ext.h, glide.h, glidesys.h, glideutl.h, sst1vid.h
	/usr/local/glide/lib/
		libglide3x.a, libglide3x.so
   Type:
	make linux-glide
	or
	make linux-x86-glide



Compilation defines:
--------------------

FX_DEBUG
	enable driver debug code
FX_TRAP_GLIDE
	enable Glide trace code
FX_PACKEDCOLOR
	use packed color in vertex structure
FX_TC_NAPALM
	map GL_COMPRESSED_RGB[A] to FXT1. Works with VSA100-based cards only.
FX_COMPRESS_S3TC_AS_FXT1_HACK
	map S3TC to FXT1
FX_RESCALE_BIG_TEXURES_HACK
	fake textures larger than HW can support
	(see MESA_FX_MAXLOD environment variable)



Environment variables:
----------------------

The following environment variables affect MesaFX. Those that affect Glide
only, are beyond the scope of this section. Entries that don't have a "Value"
field, can have any value whatsoever
	ex: set MESA_FX_IGNORE_CMBEXT=y

"Note" (*) means that the environment variable affects Glide, too; also, if
the var is not found in the environment, it is searched in windoze registry.
"Note" (!) means that the environment variable is not working as expected;
may have undefined effects, might have effects only at Glide level or might
not have any effect whatsoever. Caveat emptor! Those are to be revised soon.

It is recommended to leave the envvars alone, so that Mesa/Glide will run with
default values. Use them only when you experience crashes or strange behavior.

FX_GLIDE_NUM_TMU
	OS: all
	HW: dual-TMU cards (Voodoo2, Avenger, Napalm)
	Desc: force single-TMU
	Note: (*)
	Value: "1"
FX_GLIDE_SWAPPENDINGCOUNT
	OS: all
	HW: all
	Desc: max # of buffers allowed to build up
	Note: (*) (!)
	Value: "0", "1", "2", "3", "4", "5" or "6"
FX_GLIDE_SWAPINTERVAL
	OS: all
	HW: all
	Desc: number of vertical retraces to wait before swapping
	Note: (*) (!) works only at Glide-level?
SSTH3_SLI_AA_CONFIGURATION
	OS: all
	HW: VSA100-based cards
	Desc: SLI/AA setup
	Note: (*) (!) works only at Glide-level?
	Value:
	    1, 2, 4 chip cards
		"0" - SLI & AA disable
		"1" - SLI disabled, 2 sample AA enabled
	    2, 4 chip cards
		"2" - 2-way SLI enabled, AA disabled
		"3" - 2-way SLI enabled, 2 sample AA enabled
		"4" - SLI disabled, 4 sample AA enabled
	    4 chip cards
		"5" - 4-way SLI enabled, AA disabled
		"6" - 4-way SLI enabled, 2 sample AA enabled
		"7" - 2-way SLI enabled, 4 sample AA enabled
		"8" - SLI disabled, 8 sample AA enabled 
SST_DUALHEAD
	OS: win32
	HW: ?
	Desc: ?
	Note: (!) disabled?
MESA_FX_NO_SIGNALS
	OS: linux
	HW: all
	Desc: avoid installing signals
	Note: (!) untested!
MESA_FX_INFO
	OS: all
	HW: all
	Desc: verbose to stderr
	Value: any; special value "r" to redirect stderr to MESA.LOG
MESA_FX_NOSNAP
	OS: all
	HW: Voodoo1, Rush, Banshee
	Desc: do not snap vertices inside Mesa
	Note: to be used with Glide3x that snaps vertices internally
MESA_FX_POINTCAST
	OS: all
	HW: dual-TMU cards (some Voodoo1, Voodoo2, Avenger, Napalm)
	Desc: try to use pointcast palette
	Note: may give adverse effects on UMA cards (Avenger, Napalm)
MESA_FX_IGNORE_PALEXT
	OS: all
	HW: all
	Desc: disable 6666 palette
MESA_FX_IGNORE_PIXEXT
	OS: all
	HW: Napalm
	Desc: force 565 16bpp mode (traditional Voodoo, no 32/15bpp)
MESA_FX_IGNORE_TEXFMT
	OS: all
	HW: Napalm
	Desc: disable 32bit textures
MESA_FX_IGNORE_CMBEXT
	OS: all
	HW: Napalm
	Desc: disable Napalm combiners (color/alpha/texture)
	Note: this option allows dual-TMU cards perform single-pass
	      trilinear, but some advanced (multi)texturing modes
	      won't work (GL_EXT_texture_env_combine)
MESA_FX_IGNORE_MIREXT
	OS: all
	HW: all
	Desc: disable mirror extension
MESA_FX_IGNORE_TEXUMA
	OS: all
	HW: all
	Desc: disable UMA
MESA_FX_IGNORE_TEXUS2
	OS: all
	HW: all
	Desc: disable Texus2
MESA_FX_MAXLOD
	OS: all
	HW: non VSA-100 cards
	Desc: enable large texture support using SW rescaling
	Value:
	    "9"  - 512x512 textures
	    "10" - 1024x1024 textures
	    "11" - 2048x2048 textures
MESA_FX_ALLOW_VP
	OS: all
	HW: all
	Desc: allow vertex program extensions
MESA_GLX_FX
	OS: linux
	HW: Voodoo1, Rush, Voodoo2
	Desc: display mode
	Note: (!) experimental
	Value:
	    "w" - windowed mode
	    "f" - fullscreen mode
	    "d" - disable glide driver
	OS: win32
	HW: Rush, Banshee, Avenger, Napalm
	Desc: display mode
	Note: (!) experimental
	Value:
	    "w" - windowed mode



Contact:
--------

Daniel Borca <dborca 'at' users 'dot' sourceforge 'dot' net>
Hiroshi Morii <koolsmoky 'at' users 'dot' sourceforge 'dot' net>



WARNING! The info below this line is outdated (yet some of it useful). WARNING!
*******************************************************************************



Info for Mesa 4.1
-----------------

The 3dfx Glide driver in Mesa is disabled by default.  Not too many people
use this driver anymore and at some point down the road it will be dropped.

To use/enable the Glide driver either do this:

'./configure --with-glide=DIR'    Where DIR is the location of Glide, like
                                  /usr/ or /usr/local

OR

'make linux-x86-glide'     If using the old-style Makefile system.

The rest of this file hasn't changed since Mesa 3.3.  Some of it's out of
date, but some is still valid.



What do you need ?
------------------

	- A PC with a 3Dfx Voodoo1/2 Graphics or Voodoo Rush based board
	  (Pure3D, Monster 3D, R3D, Obsidian, Stingray 128/3D, etc.).
	  The Quantum3D Obsidian3D-2 X-24 requires some special env. setting
	  under Linux (more information in the "Useful Glide Environment
	  Variables");

	- The 3Dfx Glide library 2.3 or later for your OS (the 2.4 works fine).
	  The Voodoo2 requires the Glide library 2.51. The Glide 3.1 is not
	  compatible with the Glide 2.x so it doesn't work with the current
	  version of the driver;

	- A compiler supported by the Glide library (Micro$oft VC++ (tested),
	  Watcom (tested), GCC for Linux (tested), etc.);

	- It's nice to have two monitors - one for your normal graphics
	  card and one for your 3Dfx card. If something goes wrong with
	  an application using the 3Dfx hardware you can still see your
	  normal screen in order to recover.



Tested on:
----------
	Windows 95 - David Bucciarelli
	Windows NT - Henri Fousse
	MS-DOS
	Linux - Daryll Strauss, Brian Paul, David Bucciarelli
	FreeBSD
	BeOS - Duncan Wilcox
	MacOS - Fazekas Miklos


What is able to do ?
--------------------

	- It is able accelerate points, lines and polygon with flat
	  shading, gouraud shading, Z-buffer, texture mapping, blending, fog and
	  antialiasing (when possible). There is also the support for rendering
	  in a window with a slow trick for the Voodoo Graphics (available only
	  for Linux) and at full speed with the Voodoo Rush chipset.
	  Under Linux is also possible to switch on-the-fly between the fullscreen
	  and in-window rendering hack.
	  There is also the support for using more than one Voodoo Graphics in the
	  some application/PC (you can create one context for each board and use
	  multiple video outputs for driving monitors, videoprojectors or HMDs).
	  The driver is able to fallback to pure software rendering when afeature
	  isn't supported by the Voodoo hardware (however software rendering is
	  very slow compared to hardware supported rendering)



How to compile:
---------------

Linux:
------
	Here are the basic steps for using the 3Dfx hardware with Mesa
	on Linux:

	- You'll need the Glide library and headers.  Mesa expects:
		/usr/local/glide/include/*.h        // all the Glide headers
		/usr/local/glide/lib/libglide2x.so

	  If your Glide libraries and headers are in a different directory
	  you'll have to modify the Mesa-config and mklib.glide files.

	- Unpack the MesaLib-3.1.tar.gz and MesaDemos-3.1.tar.gz archives;

	- If you're going to use a newer Mesa/Glide driver than v0.27 then
          unpack the new driver archive over the Mesa directory.

	- In the Mesa-3.1 directory type "make linux-glide"

	- Compilation _should_ finish without errors;

	- Set your LD_LIBRARY_PATH environment variable so that the
	  libglide2x.so and Mesa library files can be found.  For example:
	    setenv LD_LIBRARY_PATH "/usr/local/glide/lib:/SOMEDIR/Mesa-3.1/lib"

	- You'll have to run Glide-based programs as root or set the suid
	  bit on executables;

	- Try a demo:
	    cd gdemos
	    su
	    setenv MESA_GLX_FX f
	    ./gears     (hit ESC to exit)

	- You can find the demos especially designed for the Voodoo driver in
	  in the Mesa-3.1/3Dfx/demos directory (type "make" in order to compile
	  everything).

MacOS:
------
	Check the WEB page at http://valerie.inf.elte.hu/~boga/Mesa.html
      
MS Windows:
-----------

	For the MSVC++:
	- The glide2x.lib have to be in the default MSVC++ lib directory;

	- The Glide headers have to be in the default MSVC++ include directory;

	- You must have the vcvars32.bat script in your PATH;

	- Go to the directory Mesa-3.1 and run the mesafx.bat;

	- The script will compile everything (Mesa-3.1/lib/OpenGL32.{lib,dll},
	  Mesa-3.1/lib/GLU32.{lib,dll}, Mesa-3.1/lib/GLUT32.{lib,dll} and
          Voodoo demos);

	- At the end, you will be in the Mesa-3.1/3Dfx/demos directory;

	- Try some demo (fire.exe, teapot.exe, etc.) in order to check if
	  everything is OK (you can use Alt-Tab or Ctrl-F9 to switch between
	  the Voodoo screen and the windows desktop);

	- Remember to copy the Mesa OpenGL32.dll, GLU32.dll and GLUT32.dll in the
          some directory were you run your Mesa based applications.

	- I think that you can easy change the Makefile.fx files in order
	  to work with other kind of compilers;

	- To discover how open the 3Dfx screen, read the sources under
	  the Mesa-3.1/3Dfx/demos directory. You can use the GLUT library or
          the Diego Picciani's wgl emulator.

	NOTE: the MSVC++ 5.0 optimizer is really buggy. Also if you install the
	SP3, you could have some problem (you can disable optimization in order
	solve these kind of problems).


Doing more with Mesa & Linux Glide:
-----------------------------------

	The MESA_GLX_FX environment variable can be used to coax most
	GLX-based programs into using Glide (and the __GLUT library
	is GLX-based__).

        Full-screen 3Dfx rendering:
        ---------------------------

	1. Set the MESA_GLX_FX variable to "fullscreen":

		ksh:
			export MESA_GLX_FX = "fullscreen"
		csh:
			setenv MESA_GLX_FX fullscreen

	2. As root, run a GLX-based program (any GLUT demo on Linux).
	
	3. Be careful:  once the 3Dfx screen appears you won't be able
	to see the GLUT windows on your X display.  This can make using
	the mouse tricky!  One solution is to hook up your 3Dfx card to
	a second monitor.  If you can do this then set these env vars
	first:

		setenv SST_VGA_PASS 1
		setenv SST_NOSHUTDOWN
	
	or for the Voodoo2:

		setenv SSTV2_VGA_PASS 1
		setenv SSTV2_NOSHUTDOWN

        Rendering into an X window with the help of the Voodoo hardware:
        ----------------------------------------------------------------

	1. Start your X server in 16 bpp mode (XFree86:  startx -- -bpp 16)
	   in order to have the best performance and the best visual
	   quality. However you can use any visual depth supported by X.

	2. Set the following environment variables:
		export MESA_GLX_FX="window"	# to enable window rendering
		export SST_VGA_PASS=1	# to stop video signal switching
		export SST_NOSHUTDOWN=1	# to stop video signal switching
	    OR
		setenv MESA_GLX_FX window
		setenv SST_VGA_PASS 1
		setenv SST_NOSHUTDOWN 1

	(the Voodoo2 requires to use "SSTV2_" instead "SST_").

	3. As root, try running a GLX-based program

	How does it work?  We use the 3Dfx hardware to do rendering then
	copy the image from the 3Dfx frame buffer into an X window when
	the SwapBuffers() function is called.  The problem with this
	idea is it's slow.  The image must be copied from the 3Dfx frame
	buffer to main memory then copied into the X window (and when the X
	visual depth doesn't match the Voodoo framebufffer bit per pixel, it
	is required also a pixel format translation).

	NOTE: the in-window rendering feature only works with double-buffering.


        On the fly switching between in window rendering and full screen rendering
	--------------------------------------------------------------------------

	The Mesa 2.6 has introduced the capability of switching
	on-the-fly between the fullscreen/fullspeed rendering and the in-window
	hack and vice versa. The on-the-fly switching requires a direct support
	by the application but it is really easy to add. You have to start
	your X server in 16 bpp mode and to add the following lines to your
	application:

		#if defined(FX) && define(XMESA)
		#include <GL/xmesa.h>

		static int fullscreen=1;
		#endif

		...

		/* In the GLUT keyboard event callback */

		#if defined(FX) && !define(WIN32)
		  case ' ':
		    fullscreen=(!fullscreen);
		    XMesaSetFXmode(fullscreen ? XMESA_FX_FULLSCREEN : XMESA_FX_WINDOW);
		    break;
		#endif
		...

       	See the 3Dfx/demos/tunnel.c program
       	for an example.  You have to set the -DXMESA flag in the Makefile's COPTS
       	to enable it.

  	Rendering into an X window with the X11 software driver:
        --------------------------------------------------------

	Set the MESA_GLX_FX variable to "disable" your GLX-based program will use
	the X11 software driver (the 3Dfx hardware isn't used at all).



Useful Glide Environment Variables:
-----------------------------------

	- To disable the 3Dfx logo, set the FX_GLIDE_NO_SPLASH variable.

	- To disable video signal switching:
		setenv SST_VGA_PASS 1
		setenv SST_NOSHUTDOWN
	  or for the Voodoo2:
		setenv SSTV2_VGA_PASS 1
		setenv SSTV2_NOSHUTDOWN

        - To set the default screen refresh rate:
                setenv SST_SCREENREFRESH=75

          the supported values are 60, 70, 72, 75, 80, 85, 90, 100, 120.

	- To force the Mesa library to swap buffers as fast as possible,
	  without any vertical blanking synchronization (useful for benchmarks):
		setenv FX_GLIDE_SWAPINTERVAL 0
                setenv SST_SWAP_EN_WAIT_ON_VIDSYNC 0

	- You can slight improve the performances of your Voodoo1 board with
	  the following env. var.:
		setenv SST_FASTMEM 1
		setenv SST_PCIRD 1
		setenv SST_GRXCLK 57

	  (don't use this setting with the Quantum3D 100SB or with any other
	  SLI configuration: it will hang everything !).
	  The following setting can be used with the Voodoo2:
		setenv SSTV2_FASTMEM_RAS_READS=1
		setenv SSTV2_FASTPCIRD=1
		setenv SSTV2_GRXCLK=95

	- The Quantum3D Obsidian3D-2 X-24 requires some special env. setting
	  in order to work under Linux:

		export SSTV2_FT_CLKDEL=5
		export SSTV2_TF0_CLKDEL=7
		export SSTV2_TF1_CLKDEL=7
		export SSTV2_TF2_CLKDEL=7
		export SSTV2_SLIM_VIN_CLKDEL=3
		export SSTV2_SLIM_VOUT_CLKDEL=2
		export SSTV2_SLIS_VIN_CLKDEL=3
		export SSTV2_SLIS_VOUT_CLKDEL=2

	  (Thanks to Phil Ross for this trick).




The Mesa/Voodoo Environment Variables:
--------------------------------------

	- Only for Windows/Voodoo Rush users, if you define the
	  env. var. MESA_WGL_FX:
		export MESA_WGL_FX=fullscreen
	  you will get fullscreen rendering;

	- Only for Windows/Voodoo Rush users, if you define the
	  env. var. MESA_WGL_FX:
		export MESA_WGL_FX=window
	  you will get window rendering (default value);

	- Only for Linux users, you can find more informations about
	  the env. var. MESA_GLX_FX in the "Doing more with Mesa & Linux Glide"
	  section;

	- If you define the env. var. MESA_FX_SWAP_PENDING:
		export MESA_FX_SWAP_PENDING=4
	  you will able to set the maximum number of swapbuffers
	  commands in the Voodoo FIFO after a swapbuffer (default value: 2);

        - If you define the env. var. MESA_FX_INFO:
		export MESA_FX_INFO=1
          you will get some useful statistic.

        - If you define the env. var. MESA_FX_NO_SIGNALS:
		export MESA_FX_NO_SIGNALS=1
          Mesa/FX will not install atexit() or signal() handlers.



Know BUGS and Problems:
-----------------------

	- fog doesn't work in the right way when using the glDepthRange() function;

	- Maximum texture size: 256x256 (this is an hardware limit);

	- Texture border aren't yet supported;

	- A GL_BLEND in a glTexEnv() is not supported (it is an hardware limit);

        - Use the glBindTexture extension (standard in OpenGL 1.1) for texture
	  mapping (the old way: glTexImage inside a display list, download
	  the texture map each time that you call the display list !!!);

	- Stencil buffer and Accumulation buffer are emulated in software (they are not
	  directly supported by the Hardware);

	- Color index mode not implemented (this is an hardware limit);

	- Thre is an know bug in the Linux Glide library so the in-window-rendering hack
	  and any other operations that requires to read the Voodoo frame buffer
	  (like the accumulation buffer support) doesn't work on Voodoo SLI cards.

	- The driver switch to pure software (_slow_) rendering when:

		- Stencil enabled;
		- Using the Accumulation buffer;
		- Blend enabled and blend equation != GL_FUNC_ADD_EXT;
		- Color logic operation enabled and color logic operation != GL_COPY;
		- Using GL_SEPARATE_SPECULAR_COLOR;
		- The four values of glColorMask() aren't the some;
		- Texture 1D or 3D enabled;
		- Texture function is GL_BLEND;
		- Using the Multitexture extension with Voodoo cards with only one TMU;
		- Using the Multitexture extension with Voodoo cards with more than
		   one TMU, and texture function isn't GL_MODULATE;
		- Point size is != 1.0 or point params vector != (1.0,0.0,0.0);
		- Line width != 1.0 or using stipple lines.
		- Using polygon offset or stipple polygons;

	NOTE: this is list is not yet complete.
		

Hints and Special Features:
---------------------------

	- Under Linux and with a Voodoo Graphics board, you can use
	  XMesaSetFXmode(XMESA_FX_FULLSCREEN or XMESA_FX_WINDOW) in order to
	  switch on the fly between fullscreen rendering and the in-window-rendering
	  hack.

	- The driver is able to use all the texture memory available: 2/4MB on
	  Voodoo1 boards and 8MB (!) on high-end Voodoo1 and Voodoo2 boards.

	- Trilinear filtering is fully supported on Voodoo boards with two TMUs
	  (high-end Voodoo1 boards and Voodoo2 boards). When only one TMU is
	  available the driver fallback to bilinear filter also if you ask
	  for trilinear filtering.

        - The Voodoo driver support multiple Voodoo Graphics boards in the
          some PC. Using this feature, you can write applications that use
          multiple monitors, videoprojectors or HMDs for the output. See
	  Mesa-3.1/3Dfx/demos/tunnel2.c for an example of how setup one
          context for each board.

	- The v0.19 introduces a new powerful texture memory manager: the
	  texture memory is used as a cache of the set of all defined texture
	  maps. You can now define several MBs of texture maps also with a 2MB
	  of texture memory (the texture memory manager will do automatically
	  all the swap out/swap in
	  texture memory work). The new texture memory manager has also
	  solved a lot of other bugs/no specs compliance/problems
	  related to the texture memory usage.

	- Use triangles and quads strip: they are a LOT faster than sparse
	  triangles and quads.

	- The Voodoo driver supports the GL_EXT_paletted_texture. it works
	  only with GL_COLOR_INDEX8_EXT, GL_RGBA palettes and the alpha value
	  is ignored because this is a limitation of the the current Glide
	  version and of the Voodoo hardware. See Mesa-3.1/3Dfx/demos/paltex.c for
	  a demo of this extension.

	- The Voodoo driver directly supports 3Dfx Global Palette extension.
	  It was written for GLQuake and I think that it isn't a good idea
	  to use this extension for any other purpose (it is a trick). See
	  Mesa-3.1/3Dfx/demos/glbpaltex.c for a demo of this extension.

	- The Voodoo driver chooses the screen resolution according to the
	  requested window size. If you open a 640x480 window, you will get
	  a 640x480 screen resolution, if you open a 800x600 window, you
	  will get a 800x600 screen resolution, etc.
	  Most GLUT demos support the '-geometry' option, so you can choose
	  the screen resolution: 'tunnel -geometry 800x600'.
	  Clearly, you Voodoo board must have enough framebuffer RAM (otherwise
	  the window creation will fail).

	- The glGetString(GL_RENDERER) returns more information
          about the hardware configuration: "Mesa Glide <version>
          <Voodoo_Graphics|Voodoo_Rush|UNKNOWN> <num> CARD/<num> FB/
          <num> TM/<num> TMU/<NOSLI|SLI>"
          where: <num> CARD is the card used for the current context,
          <num> FB is the number of MB for the framebuffer,
          <num> TM is the number of MB for the texture memory,
          <num> TMU is the number of TMU. You can try to run
          Mesa/demos/glinfo in order to have an example of the output.

Did you find a lot BUGs and problems ? Good, send me an email.



FAQ:
----

For a complete FAQ check the Bernd Kreimeier's Linux 3Dfx HOWTO
available at http://www.gamers.org/dEngine/xf3D (it includes also
a lot of informations not strictly related to Linux, so it can be
useful also if you don't use Linux)

1. What is 3Dfx?

3Dfx Interactive, Inc. is the company which builds the VooDoo 3-D graphics
chipset (and others) used in popular PC cards such as the Diamond Monster 3D
and the Orchid Righteous 3D (more informations at http://www.3dfx.com).


2. What is Glide?

Glide is a "thin" programming interface for the 3Dfx hardware.  It was
originally written for Windows/Intel but has been ported to Linux/Intel
by Daryll Strauss.

3Dfx, Inc. should be applauded for allowing the Linux version of Glide
to be written.

You can directly program with the Glide library if you wish.  You can
obtain Glide from the "Developer" section of the 3Dfx website: www.3dfx.com
There's a Linux/Glide newsgroup at news://news.3dfx.com/3dfx.glide.linux


3. What is fxmesa?

"fxmesa" is the name of the Mesa device driver for the 3Dfx Glide library.
It was written by David Bucciarelli and others.  It works on both Linux
and Windows.  Basically, it allows you to write and run OpenGL-style programs
on the 3Dfx hardware.


4. What is GLQuake?

Quake is a very popular game from id software, Inc.  See www.idsoftware.com
GLQuake is a version of Quake written for OpenGL.  There is now a Linux
version of GLQuake with works with the Mesa/3Dfx/Glide combo.

Here's what you need to run GLQuake on Linux:
   PC with 100MHz Pentium or better
   a 3Dfx-based card
   Mesa 3.1 libraries:  libMesaGL.so  libMesaGLU.so
   Glide 2.4 libraries:  libglide2x.so  libtexus.so
   GLQuake for Linux.

Also, the windows version of GLQuake works fine with the Mesa OpenGL32.dll,
you have only to copy the Mesa-3.1/lib/OpenGL32.dll in the GLQuake directory
in order to test 'MesaQuake'.


5. What is GLUT?

GLUT is Mark Kilgard's OpenGL Utility Toolkit.  It provides an API for
writing portable OpenGL programs with support for multiple windows, pop-
up menus, event handling, etc.

Check the Mark's home page for more informations (http://reality.sgi.com/mjk_asd).

Every OpenGL programmer should check out GLUT.

GLUT on Linux uses GLX.


6. What is GLX?

GLX is the OpenGL extension to the X Window System.  I defines both a
programming API (glX*() functions) and a network protocol.  Mesa implements
an emulation of GLX on Linux.  A real GLX implementation would requires
hooks into the X server.  The 3Dfx hardware can be used with GLX-based
programs via the MESA_GLX_FX environment variable.


7. Is the Voodoo driver able to use the 4Mb texture memory of
the Pure3D boards ?

Yes, the Voodoo driver v0.20 includes the support for Voodoo
Graphics boards with more than 2Mb of texture memory.


8. Do the Voodoo driver support the Voodoo Rush under Windows ?

Yes, Diego Picciani has developed the support for the Voodoo
Rush but David Bucciarelli has a Pure3D and a Monster3D and Brian Paul
has a Monster3D, so the new versions of the Mesa/Voodoo sometime are
not tested with the Voodoo Rush.


9. Do the Voodoo driver support the Voodoo Rush under Linux ?

No because the Linux Glide doesn't (yet) support the Voodoo Rush.


10. Can I sell my Mesa/Voodoo based software and include
a binary copy of the Mesa in order to make the software
working out of the box ?

Yes.


11. Which is the best make target for compiling the Mesa for
Linux GLQuake ('make linux-glide', 'make linux-386-glide', etc.) ?

'make linux-386-opt-glide' for Voodoo1 and 'make linux-386-opt-V2-glide'
for Voodoo2 boards because it doesn't include the '-fPIC'
option (4-5% faster).


12. Can I use a Mesa compiled with a 'make linux-386-opt-V2-glide'
for my applications/programs/demos ?

Yes, there is only one constrain: you can't run two Mesa applications
at the some time. This isn't a big issue with the today Voodoo Graphics.


Thanks to:
----------

Henri Fousse       (he has written several parts of the v0.15 and the old GLUT
	            emulator for Win);

Diego Picciani     (he has developed all the Voodoo Rush support and the wgl
	            emulator);

Daryll Strauss     (for the Linux Glide and the first Linux support);

Brian Paul         (of course);

Dave 'Zoid' Kirsch (for the Linux GLQuake and Linux Quake2test/Q2 ports)

Bernd Kreimeier    (for the Linux 3Dfx HOWTO and for pushing companies to offer
                    a better Linux support)

3Dfx and Quantum3D (for actively supporting Linux)

The most update places where find Mesa VooDoo driver related informations are
the Mesa mailing list and my driver WEB page
(http://www-hmw.caribel.pisa.it/fxmesa/index.shtml)


David Bucciarelli (davibu@tin.it)

Humanware s.r.l. 
Via XXIV Maggio 62
Pisa, Italy
Tel./Fax +39-50-554108
email: info.hmw@plus.it
www: www-hmw.caribel.pisa.it
