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

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

The current version requires :
 * Mesa (tested with version 3.1 beta)
 * a display in 16bpp

To minimize the impact on DirectDraw (i.e. to reuse most of the code
already done for DirectDraw), I decided not to start with an
implementation based on GLX, but on OSMesa. This way, all the OpenGL
rendering are done in a 'private' memory buffer, buffer that will
copied back to the DirectDraw Surface each time a 3D scene
finishes. It is not optimal for execution speed (on each frame, the
OpenGL buffer is converted from 32 to 16 bpp and copied onto the
screen) but is for development (I had almost nothing to change in
DirectDraw). Moreover, 99 % of the code in the Direct3D implementation
is 'device independant' (i.e. GLX / OSMesa / whatever), so that
changing to GLX will have only a minor impact on Direct3D's code.

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

The home of Mesa should soon be http://www.mesa3d.org/
But for now, check http://www.ssec.wisc.edu/~brianp/Mesa.html

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 wait for version 3.2b (that should have the bug corrected).

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). All the
   calls needed to make TR2 work have been written.

 * Jedi Knight (DX3.0) : does not start

 * 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 ?, seems to be 3.0 !!) : does not start.

TODO
----
 * work on optimizing Execute Buffers (i.e. Direct3D 3.0)
 * real GLX implementation (will need a complete rewrite of DirectDraw
   also) to have 3DFx support
 * 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 : Tue Jan 19 1999
