1 /* DirectDraw using DGA or Xlib(XSHM)
3 * Copyright 1997-1999 Marcus Meissner
4 * Copyright 1998 Lionel Ulmer (most of Direct3D stuff)
16 #include "debugtools.h"
19 DEFAULT_DEBUG_CHANNEL(ddraw);
21 #include "x11_private.h"
24 int XShmErrorFlag = 0;
27 static inline BOOL get_option( const char *name, BOOL def ) {
28 return PROFILE_GetWineIniBool( "x11drv", name, def );
32 DDRAW_XSHM_Available(void) {
34 if (get_option( "UseXShm", 1 )) {
35 if (TSXShmQueryExtension(display)) {
39 if (TSXShmQueryVersion(display, &major, &minor, &shpix))
47 static HRESULT X11_Create( LPDIRECTDRAW *lplpDD ) {
48 IDirectDrawImpl* ddraw;
50 x11_dd_private *x11priv;
52 if (lplpDD == NULL) /* Testing ... this driver works all the time */
55 *lplpDD = (LPDIRECTDRAW)HeapAlloc(
58 sizeof(IDirectDrawImpl)
60 ddraw = (IDirectDrawImpl*)*lplpDD;
61 ICOM_VTBL(ddraw)= &xlib_ddvt;
64 ddraw->d = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*(ddraw->d)));
66 ddraw->d->private = HeapAlloc(
69 sizeof(x11_dd_private)
71 x11priv = (x11_dd_private*)ddraw->d->private;
73 /* At DirectDraw creation, the depth is the default depth */
74 depth = DefaultDepthOfScreen(X11DRV_GetXScreen());
76 switch (_common_depth_to_pixelformat(depth,(LPDIRECTDRAW)ddraw)) {
77 case -2: ERR("no depth conversion mode for depth %d found\n",depth); break;
78 case -1: WARN("No conversion needed for depth %d.\n",depth); break;
79 case 0: MESSAGE("Conversion needed from %d.\n",depth); break;
82 ddraw->d->height = GetSystemMetrics(SM_CYSCREEN);
83 ddraw->d->width = GetSystemMetrics(SM_CXSCREEN);
85 /* Test if XShm is available. */
86 if ((x11priv->xshm_active = DDRAW_XSHM_Available())) {
87 x11priv->xshm_compl = 0;
88 TRACE("Using XShm extension.\n");
94 /* Where do these GUIDs come from? mkuuid.
95 * They exist solely to distinguish between the targets Wine support,
96 * and should be different than any other GUIDs in existence.
98 static GUID X11_DirectDraw_GUID = { /* 1574a740-dc61-11d1-8407-f7875a7d1879 */
102 {0x84, 0x07, 0xf7, 0x87, 0x5a, 0x7d, 0x18, 0x79}
105 ddraw_driver x11_driver = {
106 &X11_DirectDraw_GUID,
108 "WINE X11 DirectDraw Driver",
113 DECL_GLOBAL_CONSTRUCTOR(X11_register) { ddraw_register_driver(&x11_driver); }