This file contains information on the current implementation of the DirectDraw
API.

The DirectDraw API is being used in a lot of current computergames. Its API
layer is represented by the functions in the Win32 DLL ddraw.dll and the
IDirectDraw* interfaces (that can be created using the API functions). 

WINE currently implements a very basic set of the DirectDraw functionality
in graphics/ddraw.c. This implementation uses the XFree86-DGA extension 
to get very fast access to the graphics card framebuffer and doublebuffering
features. It is as fast as the MS equivalent for the stuff that is implemented.
Several applications already work, see below.
Problems of the implementation using XFree86-DGA:

	- XFree86 cannot switch resolution nor depth on the fly.
	  This is a problem with X and unavoidable.
	  Current solution is to pop up a MessageBox with an error for 
	  mismatched parameters and advice the user to restart the X server
	  with the specified depth and/or screensize.
	- The rest of the functionality that has to be implemented will have
	  to be done in software and will be very slow.
	- This requires WINE to be run as root user so XF86DGA can mmap the
	  framebuffer into the addressspace of the process.
	- Blocks all other X windowed applications.

Status:
   - Diablo [640x480x8]:
     The movies play with speed comparable to the MS DDRAW one.
     The game doesn't work, it somehow tries to write into 2 lines _BEFORE_
     the start of the surface. I have tried to investigate this, but it is
     in code that is automatically generated.
  
   - WingCommander 4 / Win95 Patch [640x480x8]:
     The intromovie plays, in 8 bit mode (to reconfigure wc4, run wine
     "wc4w.exe -I"). The 16bit mode looks broken on Mystique, but I think
     this is due to the unusual colorweight (565 rgb) of the Mystique in 16bit
     mode. [Specifying it in DDPIXELFORMAT didn't help.]

     Requires to be run in 640x480xdepth mode (doesn't seem to heed
     DDSURFACEDESC.lPitch).
     You can even fly the first mission with Maniac (ignore the weird sounds),
     but it crashes as soon as you arrive at Blue Point Station...
  
   - Monkey Island 3 [640x480x8]:
     WINE-CVS-981116: 
     	Works, using DGA and Xlib. (Mousecontrol is a bit off in windowed mode.)
   
   - DiscWorld 2 [640x480x8]:
     Plays through nearly all intro movies. Sound and animation skip a lot of
     stuff (possible DirectSound asynchronization problem).
   
   - XvT [640x480x16]:
     Shows the splash screen, then fails with missing Joystick. I have
     investigated but failed to find a reason for this.
  
   - Tomb Raider 2 Demo (using 8 bit renderer) [640x480x8]:
     I have played nearly all of the DEMO level using Keyboard Controls.
     Sound is a bit weird. Keyboard/Mouse handling too due to incomplete
     DirectInput.
  
   - WingCommander Prophecy Demo (using software renderer) [640x480x16]:
     Plays trailer, hangs in selection screen (no keyboard input, DirectInput
     problem).
