[PATCH] WineD3D: Remove the device-global fullscreen flag=0A=

Stefan Doesinger stefan at codeweavers.com
Mon Aug 4 14:11:22 CDT 2008


=0A=
---=0A=
 dlls/ddraw/ddraw.c               |    5 ---=0A=
 dlls/wined3d/device.c            |   60 =
+++++++++++++++++---------------------=0A=
 dlls/wined3d/swapchain_gdi.c     |    6 ++--=0A=
 dlls/wined3d/wined3d_private.h   |    1 -=0A=
 include/wine/wined3d_interface.h |    2 -=0A=
 5 files changed, 30 insertions(+), 44 deletions(-)=0A=
=0A=
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c=0A=
index 6ae0269..425503f 100644=0A=
--- a/dlls/ddraw/ddraw.c=0A=
+++ b/dlls/ddraw/ddraw.c=0A=
@@ -445,9 +445,6 @@ IDirectDrawImpl_SetCooperativeLevel(IDirectDraw7 =
*iface,=0A=
         {=0A=
             This->dest_window =3D hwnd;=0A=
         }=0A=
-=0A=
-        IWineD3DDevice_SetFullscreen(This->wineD3DDevice,=0A=
-                                     FALSE);=0A=
     }=0A=
     else if(cooplevel & DDSCL_FULLSCREEN)=0A=
     {=0A=
@@ -467,8 +464,6 @@ IDirectDrawImpl_SetCooperativeLevel(IDirectDraw7 =
*iface,=0A=
         */=0A=
 =0A=
         This->cooperative_level &=3D ~DDSCL_NORMAL;=0A=
-        IWineD3DDevice_SetFullscreen(This->wineD3DDevice,=0A=
-                                     TRUE);=0A=
 =0A=
         /* Don't override focus windows or private device windows */=0A=
         if( hwnd &&=0A=
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c=0A=
index b89db16..91da15a 100644=0A=
--- a/dlls/wined3d/device.c=0A=
+++ b/dlls/wined3d/device.c=0A=
@@ -1299,7 +1299,7 @@ static LONG fullscreen_exStyle(LONG orig_exStyle) {=0A=
     return exStyle;=0A=
 }=0A=
 =0A=
-static void WINAPI =
IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *iface, HWND =
window) {=0A=
+static void WINAPI =
IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *iface, HWND =
window, UINT w, UINT h) {=0A=
     IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl *)iface;=0A=
 =0A=
     LONG style, exStyle;=0A=
@@ -1329,7 +1329,7 @@ static void WINAPI =
IWineD3DDeviceImpl_SetupFullscreenWindow(IWineD3DDevice *ifac=0A=
 =0A=
     /* Inform the window about the update. */=0A=
     SetWindowPos(window, HWND_TOP, 0, 0,=0A=
-            This->ddraw_width, This->ddraw_height, SWP_FRAMECHANGED);=0A=
+                 w, h, SWP_FRAMECHANGED);=0A=
     ShowWindow(window, SW_NORMAL);=0A=
 }=0A=
 =0A=
@@ -1433,8 +1433,10 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic=0A=
         object->win_handle =3D This->createParms.hFocusWindow;=0A=
     }=0A=
     if(!This->ddraw_window) {=0A=
-        if(This->ddraw_fullscreen && object->win_handle) {=0A=
-            IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
object->win_handle);=0A=
+        if(!pPresentationParameters->Windowed && object->win_handle) {=0A=
+            IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
object->win_handle,=0A=
+                                                     =
pPresentationParameters->BackBufferWidth,=0A=
+                                                     =
pPresentationParameters->BackBufferHeight);=0A=
         }=0A=
         This->ddraw_window =3D object->win_handle;=0A=
     }=0A=
@@ -1528,7 +1530,6 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_CreateAdditionalSwapChain(IWineD3DDevic=0A=
 =0A=
         IWineD3DDevice_SetDisplayMode(iface, 0, &mode);=0A=
         displaymode_set =3D TRUE;=0A=
-        IWineD3DDevice_SetFullscreen(iface, TRUE);=0A=
     }=0A=
 =0A=
         /**=0A=
@@ -2442,25 +2443,6 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_UninitGDI(IWineD3DDevice *iface, D3DCB_=0A=
     return WINED3D_OK;=0A=
 }=0A=
 =0A=
-static void WINAPI IWineD3DDeviceImpl_SetFullscreen(IWineD3DDevice =
*iface, BOOL fullscreen) {=0A=
-    IWineD3DDeviceImpl *This =3D (IWineD3DDeviceImpl *) iface;=0A=
-    TRACE("(%p) Setting DDraw fullscreen mode to %s\n", This, =
fullscreen ? "true" : "false");=0A=
-=0A=
-    /* Setup the window for fullscreen mode */=0A=
-    if(fullscreen && !This->ddraw_fullscreen) {=0A=
-        IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
This->ddraw_window);=0A=
-    } else if(!fullscreen && This->ddraw_fullscreen) {=0A=
-        IWineD3DDeviceImpl_RestoreWindow(iface, This->ddraw_window);=0A=
-    }=0A=
-=0A=
-    /* DirectDraw apps can change between fullscreen and windowed mode =
after device creation with=0A=
-     * IDirectDraw7::SetCooperativeLevel. The GDI surface =
implementation needs to know this.=0A=
-     * DDraw doesn't necessarily have a swapchain, so we have to store =
the fullscreen flag=0A=
-     * separately.=0A=
-     */=0A=
-    This->ddraw_fullscreen =3D fullscreen;=0A=
-}=0A=
-=0A=
 /* Enables thread safety in the wined3d device and its resources. =
Called by DirectDraw=0A=
  * from SetCooperativeLevel if DDSCL_MULTITHREADED is specified, and by =
d3d8/9 from=0A=
  * CreateDevice if D3DCREATE_MULTITHREADED is passed.=0A=
@@ -2529,10 +2511,6 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_SetDisplayMode(IWineD3DDevice *iface, U=0A=
     This->ddraw_height =3D pMode->Height;=0A=
     This->ddraw_format =3D pMode->Format;=0A=
 =0A=
-    /* Only do this with a window of course, and only if we're =
fullscreened */=0A=
-    if(This->ddraw_window && This->ddraw_fullscreen)=0A=
-      MoveWindow(This->ddraw_window, 0, 0, pMode->Width, pMode->Height, =
TRUE);=0A=
-=0A=
     /* And finally clip mouse to our screen */=0A=
     SetRect(&clip_rc, 0, 0, pMode->Width, pMode->Height);=0A=
     ClipCursor(&clip_rc);=0A=
@@ -7417,9 +7395,25 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_Reset(IWineD3DDevice* iface, WINED3DPRE=0A=
        (swapchain->presentParms.Windowed && =
!pPresentationParameters->Windowed) ||=0A=
         DisplayModeChanged) {=0A=
 =0A=
-        IWineD3DDevice_SetFullscreen(iface, =
!pPresentationParameters->Windowed);=0A=
-        swapchain->presentParms.Windowed =3D =
pPresentationParameters->Windowed;=0A=
         IWineD3DDevice_SetDisplayMode(iface, 0, &mode);=0A=
+=0A=
+        if(This->ddraw_window && !pPresentationParameters->Windowed) {=0A=
+            if(swapchain->presentParms.Windowed) {=0A=
+                /* switch from windowed to fs */=0A=
+                IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
This->ddraw_window,=0A=
+                                                         =
pPresentationParameters->BackBufferWidth,=0A=
+                                                         =
pPresentationParameters->BackBufferHeight);=0A=
+            } else {=0A=
+                /* Fullscreen -> fullscreen mode change */=0A=
+                MoveWindow(This->ddraw_window, 0, 0,=0A=
+                        pPresentationParameters->BackBufferWidth, =
pPresentationParameters->BackBufferHeight,=0A=
+                        TRUE);=0A=
+            }=0A=
+        } else if(This->ddraw_window && =
!swapchain->presentParms.Windowed) {=0A=
+            /* Fullscreen -> windowed switch */=0A=
+            IWineD3DDeviceImpl_RestoreWindow(iface, This->ddraw_window);=0A=
+        }=0A=
+        swapchain->presentParms.Windowed =3D =
pPresentationParameters->Windowed;=0A=
     } else if(!pPresentationParameters->Windowed) {=0A=
         DWORD style =3D This->style, exStyle =3D This->exStyle;=0A=
         /* If we're in fullscreen, and the mode wasn't changed, we have =
to get the window back into=0A=
@@ -7428,7 +7422,9 @@ static HRESULT WINAPI =
IWineD3DDeviceImpl_Reset(IWineD3DDevice* iface, WINED3DPRE=0A=
          */=0A=
         This->style =3D 0;=0A=
         This->exStyle =3D 0;=0A=
-        IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
This->ddraw_window);=0A=
+        IWineD3DDeviceImpl_SetupFullscreenWindow(iface, =
This->ddraw_window,=0A=
+                                                 =
pPresentationParameters->BackBufferWidth,=0A=
+                                                 =
pPresentationParameters->BackBufferHeight);=0A=
         This->style =3D style;=0A=
         This->exStyle =3D exStyle;=0A=
     }=0A=
@@ -7704,7 +7700,6 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =3D=0A=
     IWineD3DDeviceImpl_InitGDI,=0A=
     IWineD3DDeviceImpl_Uninit3D,=0A=
     IWineD3DDeviceImpl_UninitGDI,=0A=
-    IWineD3DDeviceImpl_SetFullscreen,=0A=
     IWineD3DDeviceImpl_SetMultithreaded,=0A=
     IWineD3DDeviceImpl_EvictManagedResources,=0A=
     IWineD3DDeviceImpl_GetAvailableTextureMem,=0A=
@@ -7850,7 +7845,6 @@ const IWineD3DDeviceVtbl =
IWineD3DDevice_DirtyConst_Vtbl =3D=0A=
     IWineD3DDeviceImpl_InitGDI,=0A=
     IWineD3DDeviceImpl_Uninit3D,=0A=
     IWineD3DDeviceImpl_UninitGDI,=0A=
-    IWineD3DDeviceImpl_SetFullscreen,=0A=
     IWineD3DDeviceImpl_SetMultithreaded,=0A=
     IWineD3DDeviceImpl_EvictManagedResources,=0A=
     IWineD3DDeviceImpl_GetAvailableTextureMem,=0A=
diff --git a/dlls/wined3d/swapchain_gdi.c b/dlls/wined3d/swapchain_gdi.c=0A=
index 658ea2f..41a5475 100644=0A=
--- a/dlls/wined3d/swapchain_gdi.c=0A=
+++ b/dlls/wined3d/swapchain_gdi.c=0A=
@@ -101,9 +101,9 @@ void x11_copy_to_screen(IWineD3DSwapChainImpl *This, =
LPRECT rc) {=0A=
         }=0A=
 =0A=
         /* Front buffer coordinates are screen coordinates. Map them to =
the destination=0A=
-        * window if not fullscreened=0A=
-        */=0A=
-        if(!front->resource.wineD3DDevice->ddraw_fullscreen) {=0A=
+         * window if not fullscreened=0A=
+         */=0A=
+        if(This->presentParms.Windowed) {=0A=
             ClientToScreen(hDisplayWnd, &offset);=0A=
         }=0A=
 #if 0=0A=
diff --git a/dlls/wined3d/wined3d_private.h =
b/dlls/wined3d/wined3d_private.h=0A=
index 3cdfd1a..ee1e1e8 100644=0A=
--- a/dlls/wined3d/wined3d_private.h=0A=
+++ b/dlls/wined3d/wined3d_private.h=0A=
@@ -923,7 +923,6 @@ struct IWineD3DDeviceImpl=0A=
     HWND ddraw_window;=0A=
     DWORD ddraw_width, ddraw_height;=0A=
     WINED3DFORMAT ddraw_format;=0A=
-    BOOL ddraw_fullscreen;=0A=
 =0A=
     /* Final position fixup constant */=0A=
     float                       posFixup[4];=0A=
diff --git a/include/wine/wined3d_interface.h =
b/include/wine/wined3d_interface.h=0A=
index 72ee7fd..0768b0a 100644=0A=
--- a/include/wine/wined3d_interface.h=0A=
+++ b/include/wine/wined3d_interface.h=0A=
@@ -377,7 +377,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)=0A=
     STDMETHOD(InitGDI)(THIS_ WINED3DPRESENT_PARAMETERS* =
pPresentationParameters, D3DCB_CREATEADDITIONALSWAPCHAIN =
D3DCB_CreateAdditionalSwapChain);=0A=
     STDMETHOD(Uninit3D)(THIS, D3DCB_DESTROYSURFACEFN pFn, =
D3DCB_DESTROYSWAPCHAINFN pFn2);=0A=
     STDMETHOD(UninitGDI)(THIS, D3DCB_DESTROYSWAPCHAINFN pFn2);=0A=
-    STDMETHOD_(void, SetFullscreen)(THIS_ BOOL fullscreen);=0A=
     STDMETHOD_(void, SetMultithreaded)(THIS);=0A=
     STDMETHOD(EvictManagedResources)(THIS) PURE;=0A=
     STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE;=0A=
@@ -518,7 +517,6 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)=0A=
 #define IWineD3DDevice_InitGDI(p, a, b)                         =
(p)->lpVtbl->InitGDI(p, a, b)=0A=
 #define IWineD3DDevice_Uninit3D(p, a, b)                        =
(p)->lpVtbl->Uninit3D(p, a, b)=0A=
 #define IWineD3DDevice_UninitGDI(p, a)                          =
(p)->lpVtbl->UninitGDI(p, a)=0A=
-#define IWineD3DDevice_SetFullscreen(p, a)                      =
(p)->lpVtbl->SetFullscreen(p, a)=0A=
 #define IWineD3DDevice_SetMultithreaded(p)                      =
(p)->lpVtbl->SetMultithreaded(p)=0A=
 #define IWineD3DDevice_EvictManagedResources(p)                 =
(p)->lpVtbl->EvictManagedResources(p)=0A=
 #define IWineD3DDevice_GetAvailableTextureMem(p)                =
(p)->lpVtbl->GetAvailableTextureMem(p)=0A=
-- =0A=
1.5.4.5=0A=
=0A=

------=_NextPart_000_0011_01C90123.DD7D2860--




More information about the wine-patches mailing list