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

This file contains information about Wine's implementation of
Direct3D. 

The current version has been tested using Mesa. For optimal
performances, you need at least Mesa 3.1 beta 2.


Where to find Mesa :
--------------------

The home of Mesa should soon be http://www.mesa3d.org/

For precompiled RPMs, use AltaVista or FTPSearch, but I prefer to 'Use
the Source' :-)

WARNING : if you experience crashes in D3DTexture2_Load, see file
d3dtexture.c for a 'cure'. You could also patch your version of Mesa
or get version 3.1 beta 2 or the latest CVS version.

How to configure Mesa :
-----------------------

For Mesa version > 3.1b2, you can configure the Voodoo driver to not
override the signal handlers (something that Wine does really not
like).

For that add the following lines to the /etc/mesa.conf file :

;; Profile for Wine
(config-mesa wine
	     ((fx-catch-signals false)))

And do a 'export MESA_CONFIG=wine' before starting Wine.

Code structure
--------------

TODO (well, once the code will be put in the dll/ddraw directory)

Status
------

Some programs with which I tested the code :

 * BOIDS.EXE (DX5.0) : works great. Only thing missing is the
   texturing and transparency on the spinning gobes. Lighting seems to
   be a bit different than the Real One.

 * TWIST.EXE (DX3.0) : vertex transformation works as it
   should. Texturing and lighting still off.

 * Tomb Raider II (DX5.0) : works perfectly (but slowly) in software
   mode. All the calls needed to make TR2 work have been written.  In
   3D accelerated mode with a Voodoo board, it works fine except for
   color keying (no transparent textures :/). This is being
   investigated with the Mesa authors.

 * Jedi Knight Demo (DX3.0) : works well with the old OSMesa
   code. Works for the new GLX code but without the 'head-up' display
   (because it is blitted directly on the frame-buffer :/)

 * Shadow of the Empire demo (DX3.0) : displays a mangled intro screen
   (only blue squares on the screen)

 * Forsaken Demo : starts to work. Texturing is missing and it is
   really really slow.

 * Grim Fandango (DX 3.0 !!) : works in DDraw mode. Some problems in
   D3D mode as it does direct Z Buffer writing.

TODO
----
 * work on optimizing Execute Buffers (i.e. Direct3D 3.0)
 * restructuration of all the DDRAW.DLL (put that in the dll
   directory, better separation of 'drivers, ...)
 * start looking into DirectX 6.0
 * inquire on Mesa / XFree86 mailing lists about direct access to 
   display hardware (for games such as Tomb Raider II that displays 
   vertices that are already in screen coordinates)
 * look into thread safeness...

-- 
Lionel Ulmer - ulmer@directprovider.net
Last updated : Sat May 08 1999
