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.

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) that comes with the 5.2 DirectX SDK : 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.

 * 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) : runs but does not display
   anything

TODO
----
 * finish working on 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 : Sun Jan 10 1999
