This file contains information on the current implementation of the DirectDraw
API. Information specific to Direct3D is in the direct3D file.

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 either the XFree86-DGA extension 
to get very fast access to the graphics card framebuffer and doublebuffering
features or Xlib, which is slower.
The implementation using XFree86-DGA 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 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.
	- 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]:
     No longer works. Unclear why. [WINE-990131, Marcus Meissner]
  
   - 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.]

     Keyboard input does not work. This seems to be a problem with the 
     cooperative window and USER input handling in general.

     -> Unable to test Gameplay.

     The display is slower as before. Reason is unknown, but I suspect the 
     communication between winserver,dsoundmixerthread,mainthread takes
     up too much time.

     [WINE-990131, Marcus Meissner]

   - 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).
   
   - 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).
