[PATCH] WineD3D: Move some swapchain code into a base class=0A=

Stefan Doesinger stefan at codeweavers.com
Sun Jul 27 18:04:16 CDT 2008


=0A=
This is a preparation for using swapchains for gdi surfaces too, instead =
of the hacky=0A=
ddraw_window, ddraw_fullscreen and ddraw_primary members in the device.=0A=
---=0A=
 dlls/wined3d/Makefile.in       |    1 +=0A=
 dlls/wined3d/swapchain.c       |  183 =
+++-------------------------------------=0A=
 dlls/wined3d/swapchain_base.c  |  182 =
+++++++++++++++++++++++++++++++++++++++=0A=
 dlls/wined3d/wined3d_private.h |   13 +++=0A=
 4 files changed, 209 insertions(+), 170 deletions(-)=0A=
 create mode 100644 dlls/wined3d/swapchain_base.c=0A=
=0A=
diff --git a/dlls/wined3d/Makefile.in b/dlls/wined3d/Makefile.in=0A=
index d09e88b..7591b4d 100644=0A=
--- a/dlls/wined3d/Makefile.in=0A=
+++ b/dlls/wined3d/Makefile.in=0A=
@@ -30,6 +30,7 @@ C_SRCS =3D \=0A=
 	surface.c \=0A=
 	surface_gdi.c \=0A=
 	swapchain.c \=0A=
+	swapchain_base.c \=0A=
 	texture.c \=0A=
 	utils.c \=0A=
 	vertexbuffer.c \=0A=
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c=0A=
index 318c220..72b1c7c 100644=0A=
--- a/dlls/wined3d/swapchain.c=0A=
+++ b/dlls/wined3d/swapchain.c=0A=
@@ -4,7 +4,7 @@=0A=
  *Copyright 2002-2003 Jason Edmeades=0A=
  *Copyright 2002-2003 Raphael Junqueira=0A=
  *Copyright 2005 Oliver Stieber=0A=
- *Copyright 2007 Stefan D=F6singer for CodeWeavers=0A=
+ *Copyright 2007-2008 Stefan D=F6singer for CodeWeavers=0A=
  *=0A=
  *This library is free software; you can redistribute it and/or=0A=
  *modify it under the terms of the GNU Lesser General Public=0A=
@@ -35,53 +35,6 @@ WINE_DECLARE_DEBUG_CHANNEL(fps);=0A=
 =0A=
 #define GLINFO_LOCATION This->wineD3DDevice->adapter->gl_info=0A=
 =0A=
-/* IDirect3DSwapChain IUnknown parts follow: */=0A=
-static ULONG WINAPI IWineD3DSwapChainImpl_AddRef(IWineD3DSwapChain =
*iface) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    DWORD refCount =3D InterlockedIncrement(&This->ref);=0A=
-    TRACE("(%p) : AddRef increasing from %d\n", This, refCount - 1);=0A=
-    return refCount;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_QueryInterface(IWineD3DSwapChain *iface, REFIID =
riid, LPVOID *ppobj)=0A=
-{=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj);=0A=
-    if (IsEqualGUID(riid, &IID_IUnknown)=0A=
-        || IsEqualGUID(riid, &IID_IWineD3DBase)=0A=
-        || IsEqualGUID(riid, &IID_IWineD3DSwapChain)){=0A=
-        IWineD3DSwapChainImpl_AddRef(iface);=0A=
-        if(ppobj =3D=3D NULL){=0A=
-            ERR("Query interface called but now data allocated\n");=0A=
-            return E_NOINTERFACE;=0A=
-        }=0A=
-        *ppobj =3D This;=0A=
-        return WINED3D_OK;=0A=
-    }=0A=
-    *ppobj =3D NULL;=0A=
-    return E_NOINTERFACE;=0A=
-}=0A=
-=0A=
-=0A=
-static ULONG WINAPI IWineD3DSwapChainImpl_Release(IWineD3DSwapChain =
*iface) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    DWORD refCount;=0A=
-    refCount =3D InterlockedDecrement(&This->ref);=0A=
-    TRACE("(%p) : ReleaseRef to %d\n", This, refCount);=0A=
-    if (refCount =3D=3D 0) {=0A=
-        IWineD3DSwapChain_Destroy(iface, D3DCB_DefaultDestroySurface);=0A=
-    }=0A=
-    return refCount;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI IWineD3DSwapChainImpl_GetParent(IWineD3DSwapChain =
*iface, IUnknown ** ppParent){=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    *ppParent =3D This->parent;=0A=
-    IUnknown_AddRef(*ppParent);=0A=
-    TRACE("(%p) returning %p\n", This , *ppParent);=0A=
-    return WINED3D_OK;=0A=
-}=0A=
-=0A=
 /*IWineD3DSwapChain parts follow: */=0A=
 static void WINAPI IWineD3DSwapChainImpl_Destroy(IWineD3DSwapChain =
*iface, D3DCB_DESTROYSURFACEFN D3DCB_DestroyRenderTarget) {=0A=
     IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
@@ -380,134 +333,24 @@ static HRESULT WINAPI =
IWineD3DSwapChainImpl_Present(IWineD3DSwapChain *iface, CO=0A=
     return WINED3D_OK;=0A=
 }=0A=
 =0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *iface, =
IWineD3DSurface *pDestSurface) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    POINT start;=0A=
-=0A=
-    TRACE("(%p) : iface(%p) pDestSurface(%p)\n", This, iface, =
pDestSurface);=0A=
-=0A=
-    start.x =3D 0;=0A=
-    start.y =3D 0;=0A=
-=0A=
-    if (This->presentParms.Windowed) {=0A=
-        MapWindowPoints(This->win_handle, NULL, &start, 1);=0A=
-    }=0A=
-=0A=
-    IWineD3DSurface_BltFast(pDestSurface, start.x, start.y, =
This->frontBuffer, NULL, 0);=0A=
-    return WINED3D_OK;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT =
iBackBuffer, WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface =
**ppBackBuffer) {=0A=
-=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-=0A=
-    if (iBackBuffer > This->presentParms.BackBufferCount - 1) {=0A=
-        TRACE("Back buffer count out of range\n");=0A=
-        /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But =
set it here=0A=
-         * in wined3d to avoid problems in other libs=0A=
-         */=0A=
-        *ppBackBuffer =3D NULL;=0A=
-        return WINED3DERR_INVALIDCALL;=0A=
-    }=0A=
-=0A=
-    *ppBackBuffer =3D This->backBuffer[iBackBuffer];=0A=
-    TRACE("(%p) : BackBuf %d Type %d  returning %p\n", This, =
iBackBuffer, Type, *ppBackBuffer);=0A=
-=0A=
-    /* Note inc ref on returned surface */=0A=
-    if(*ppBackBuffer) IWineD3DSurface_AddRef(*ppBackBuffer);=0A=
-    return WINED3D_OK;=0A=
-=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface, =
WINED3DRASTER_STATUS *pRasterStatus) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    static BOOL showFixmes =3D TRUE;=0A=
-    pRasterStatus->InVBlank =3D TRUE;=0A=
-    pRasterStatus->ScanLine =3D 0;=0A=
-    /* No openGL equivalent */=0A=
-    if(showFixmes) {=0A=
-        FIXME("(%p) : stub (once)\n", This);=0A=
-        showFixmes =3D FALSE;=0A=
-    }=0A=
-    return WINED3D_OK;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface, =
WINED3DDISPLAYMODE*pMode) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    HRESULT hr;=0A=
-=0A=
-    TRACE("(%p)->(%p): Calling GetAdapterDisplayMode\n", This, pMode);=0A=
-    hr =3D IWineD3D_GetAdapterDisplayMode(This->wineD3DDevice->wineD3D, =
This->wineD3DDevice->adapter->num, pMode);=0A=
-=0A=
-    TRACE("(%p) : returning w(%d) h(%d) rr(%d) fmt(%u,%s)\n", This, =
pMode->Width, pMode->Height, pMode->RefreshRate,=0A=
-    pMode->Format, debug_d3dformat(pMode->Format));=0A=
-    return hr;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI IWineD3DSwapChainImpl_GetDevice(IWineD3DSwapChain =
*iface, IWineD3DDevice**ppDevice) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-=0A=
-    *ppDevice =3D (IWineD3DDevice *) This->wineD3DDevice;=0A=
-=0A=
-    /* Note  Calling this method will increase the internal reference =
count=0A=
-       on the IDirect3DDevice9 interface. */=0A=
-    IWineD3DDevice_AddRef(*ppDevice);=0A=
-    TRACE("(%p) : returning %p\n", This, *ppDevice);=0A=
-    return WINED3D_OK;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetPresentParameters(IWineD3DSwapChain *iface, =
WINED3DPRESENT_PARAMETERS *pPresentationParameters) {=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    TRACE("(%p)\n", This);=0A=
-=0A=
-    *pPresentationParameters =3D This->presentParms;=0A=
-=0A=
-    return WINED3D_OK;=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_SetGammaRamp(IWineD3DSwapChain *iface, DWORD =
Flags, CONST WINED3DGAMMARAMP *pRamp){=0A=
-=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    HDC hDC;=0A=
-    TRACE("(%p) : pRamp@%p flags(%d)\n", This, pRamp, Flags);=0A=
-    hDC =3D GetDC(This->win_handle);=0A=
-    SetDeviceGammaRamp(hDC, (LPVOID)pRamp);=0A=
-    ReleaseDC(This->win_handle, hDC);=0A=
-    return WINED3D_OK;=0A=
-=0A=
-}=0A=
-=0A=
-static HRESULT WINAPI =
IWineD3DSwapChainImpl_GetGammaRamp(IWineD3DSwapChain *iface, =
WINED3DGAMMARAMP *pRamp){=0A=
-=0A=
-    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
-    HDC hDC;=0A=
-    TRACE("(%p) : pRamp@%p\n", This, pRamp);=0A=
-    hDC =3D GetDC(This->win_handle);=0A=
-    GetDeviceGammaRamp(hDC, pRamp);=0A=
-    ReleaseDC(This->win_handle, hDC);=0A=
-    return WINED3D_OK;=0A=
-=0A=
-}=0A=
-=0A=
-=0A=
 const IWineD3DSwapChainVtbl IWineD3DSwapChain_Vtbl =3D=0A=
 {=0A=
     /* IUnknown */=0A=
-    IWineD3DSwapChainImpl_QueryInterface,=0A=
-    IWineD3DSwapChainImpl_AddRef,=0A=
-    IWineD3DSwapChainImpl_Release,=0A=
+    IWineD3DBaseSwapChainImpl_QueryInterface,=0A=
+    IWineD3DBaseSwapChainImpl_AddRef,=0A=
+    IWineD3DBaseSwapChainImpl_Release,=0A=
     /* IWineD3DSwapChain */=0A=
-    IWineD3DSwapChainImpl_GetParent,=0A=
+    IWineD3DBaseSwapChainImpl_GetParent,=0A=
     IWineD3DSwapChainImpl_Destroy,=0A=
-    IWineD3DSwapChainImpl_GetDevice,=0A=
+    IWineD3DBaseSwapChainImpl_GetDevice,=0A=
     IWineD3DSwapChainImpl_Present,=0A=
-    IWineD3DSwapChainImpl_GetFrontBufferData,=0A=
-    IWineD3DSwapChainImpl_GetBackBuffer,=0A=
-    IWineD3DSwapChainImpl_GetRasterStatus,=0A=
-    IWineD3DSwapChainImpl_GetDisplayMode,=0A=
-    IWineD3DSwapChainImpl_GetPresentParameters,=0A=
-    IWineD3DSwapChainImpl_SetGammaRamp,=0A=
-    IWineD3DSwapChainImpl_GetGammaRamp=0A=
+    IWineD3DBaseSwapChainImpl_GetFrontBufferData,=0A=
+    IWineD3DBaseSwapChainImpl_GetBackBuffer,=0A=
+    IWineD3DBaseSwapChainImpl_GetRasterStatus,=0A=
+    IWineD3DBaseSwapChainImpl_GetDisplayMode,=0A=
+    IWineD3DBaseSwapChainImpl_GetPresentParameters,=0A=
+    IWineD3DBaseSwapChainImpl_SetGammaRamp,=0A=
+    IWineD3DBaseSwapChainImpl_GetGammaRamp=0A=
 };=0A=
 =0A=
 WineD3DContext =
*IWineD3DSwapChainImpl_CreateContextForThread(IWineD3DSwapChain *iface) {=0A=
diff --git a/dlls/wined3d/swapchain_base.c =
b/dlls/wined3d/swapchain_base.c=0A=
new file mode 100644=0A=
index 0000000..6b91234=0A=
--- /dev/null=0A=
+++ b/dlls/wined3d/swapchain_base.c=0A=
@@ -0,0 +1,182 @@=0A=
+/*=0A=
+ *IDirect3DSwapChain9 implementation=0A=
+ *=0A=
+ *Copyright 2002-2003 Jason Edmeades=0A=
+ *Copyright 2002-2003 Raphael Junqueira=0A=
+ *Copyright 2005 Oliver Stieber=0A=
+ *Copyright 2007-2008 Stefan D=F6singer for CodeWeavers=0A=
+ *=0A=
+ *This library is free software; you can redistribute it and/or=0A=
+ *modify it under the terms of the GNU Lesser General Public=0A=
+ *License as published by the Free Software Foundation; either=0A=
+ *version 2.1 of the License, or (at your option) any later version.=0A=
+ *=0A=
+ *This library is distributed in the hope that it will be useful,=0A=
+ *but WITHOUT ANY WARRANTY; without even the implied warranty of=0A=
+ *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU=0A=
+ *Lesser General Public License for more details.=0A=
+ *=0A=
+ *You should have received a copy of the GNU Lesser General Public=0A=
+ *License along with this library; if not, write to the Free Software=0A=
+ *Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, =
USA=0A=
+ */=0A=
+=0A=
+#include "config.h"=0A=
+#include "wined3d_private.h"=0A=
+=0A=
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);=0A=
+=0A=
+/* IDirect3DSwapChain IUnknown parts follow: */=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_QueryInterface(IWineD3DSwapChain *iface, =
REFIID riid, LPVOID *ppobj)=0A=
+{=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppobj);=0A=
+    if (IsEqualGUID(riid, &IID_IUnknown)=0A=
+        || IsEqualGUID(riid, &IID_IWineD3DBase)=0A=
+        || IsEqualGUID(riid, &IID_IWineD3DSwapChain)){=0A=
+        IWineD3DSwapChain_AddRef(iface);=0A=
+        if(ppobj =3D=3D NULL){=0A=
+            ERR("Query interface called but now data allocated\n");=0A=
+            return E_NOINTERFACE;=0A=
+        }=0A=
+        *ppobj =3D This;=0A=
+        return WINED3D_OK;=0A=
+        }=0A=
+        *ppobj =3D NULL;=0A=
+        return E_NOINTERFACE;=0A=
+}=0A=
+=0A=
+ULONG WINAPI IWineD3DBaseSwapChainImpl_AddRef(IWineD3DSwapChain *iface) =
{=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    DWORD refCount =3D InterlockedIncrement(&This->ref);=0A=
+    TRACE("(%p) : AddRef increasing from %d\n", This, refCount - 1);=0A=
+    return refCount;=0A=
+}=0A=
+=0A=
+ULONG WINAPI IWineD3DBaseSwapChainImpl_Release(IWineD3DSwapChain =
*iface) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    DWORD refCount;=0A=
+    refCount =3D InterlockedDecrement(&This->ref);=0A=
+    TRACE("(%p) : ReleaseRef to %d\n", This, refCount);=0A=
+    if (refCount =3D=3D 0) {=0A=
+        IWineD3DSwapChain_Destroy(iface, D3DCB_DefaultDestroySurface);=0A=
+    }=0A=
+    return refCount;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetParent(IWineD3DSwapChain =
*iface, IUnknown ** ppParent){=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    *ppParent =3D This->parent;=0A=
+    IUnknown_AddRef(*ppParent);=0A=
+    TRACE("(%p) returning %p\n", This , *ppParent);=0A=
+    return WINED3D_OK;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *iface, =
IWineD3DSurface *pDestSurface) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    POINT start;=0A=
+=0A=
+    TRACE("(%p) : iface(%p) pDestSurface(%p)\n", This, iface, =
pDestSurface);=0A=
+=0A=
+    start.x =3D 0;=0A=
+    start.y =3D 0;=0A=
+=0A=
+    if (This->presentParms.Windowed) {=0A=
+        MapWindowPoints(This->win_handle, NULL, &start, 1);=0A=
+    }=0A=
+=0A=
+    IWineD3DSurface_BltFast(pDestSurface, start.x, start.y, =
This->frontBuffer, NULL, 0);=0A=
+    return WINED3D_OK;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT =
iBackBuffer, WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface =
**ppBackBuffer) {=0A=
+=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+=0A=
+    if (iBackBuffer > This->presentParms.BackBufferCount - 1) {=0A=
+        TRACE("Back buffer count out of range\n");=0A=
+        /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But =
set it here=0A=
+        * in wined3d to avoid problems in other libs=0A=
+        */=0A=
+        *ppBackBuffer =3D NULL;=0A=
+        return WINED3DERR_INVALIDCALL;=0A=
+    }=0A=
+=0A=
+    *ppBackBuffer =3D This->backBuffer[iBackBuffer];=0A=
+    TRACE("(%p) : BackBuf %d Type %d  returning %p\n", This, =
iBackBuffer, Type, *ppBackBuffer);=0A=
+=0A=
+    /* Note inc ref on returned surface */=0A=
+    if(*ppBackBuffer) IWineD3DSurface_AddRef(*ppBackBuffer);=0A=
+    return WINED3D_OK;=0A=
+=0A=
+}=0A=
+=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface, =
WINED3DRASTER_STATUS *pRasterStatus) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    static BOOL showFixmes =3D TRUE;=0A=
+    pRasterStatus->InVBlank =3D TRUE;=0A=
+    pRasterStatus->ScanLine =3D 0;=0A=
+    /* No openGL equivalent */=0A=
+    if(showFixmes) {=0A=
+        FIXME("(%p) : stub (once)\n", This);=0A=
+        showFixmes =3D FALSE;=0A=
+    }=0A=
+    return WINED3D_OK;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface, =
WINED3DDISPLAYMODE*pMode) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    HRESULT hr;=0A=
+=0A=
+    TRACE("(%p)->(%p): Calling GetAdapterDisplayMode\n", This, pMode);=0A=
+    hr =3D IWineD3D_GetAdapterDisplayMode(This->wineD3DDevice->wineD3D, =
This->wineD3DDevice->adapter->num, pMode);=0A=
+=0A=
+    TRACE("(%p) : returning w(%d) h(%d) rr(%d) fmt(%u,%s)\n", This, =
pMode->Width, pMode->Height, pMode->RefreshRate,=0A=
+          pMode->Format, debug_d3dformat(pMode->Format));=0A=
+    return hr;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDevice(IWineD3DSwapChain =
*iface, IWineD3DDevice**ppDevice) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+=0A=
+    *ppDevice =3D (IWineD3DDevice *) This->wineD3DDevice;=0A=
+=0A=
+    /* Note  Calling this method will increase the internal reference =
count=0A=
+    on the IDirect3DDevice9 interface. */=0A=
+    IWineD3DDevice_AddRef(*ppDevice);=0A=
+    TRACE("(%p) : returning %p\n", This, *ppDevice);=0A=
+    return WINED3D_OK;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetPresentParameters(IWineD3DSwapChain *iface, =
WINED3DPRESENT_PARAMETERS *pPresentationParameters) {=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    TRACE("(%p)\n", This);=0A=
+=0A=
+    *pPresentationParameters =3D This->presentParms;=0A=
+=0A=
+    return WINED3D_OK;=0A=
+}=0A=
+=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_SetGammaRamp(IWineD3DSwapChain =
*iface, DWORD Flags, CONST WINED3DGAMMARAMP *pRamp){=0A=
+=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    HDC hDC;=0A=
+    TRACE("(%p) : pRamp@%p flags(%d)\n", This, pRamp, Flags);=0A=
+    hDC =3D GetDC(This->win_handle);=0A=
+    SetDeviceGammaRamp(hDC, (LPVOID)pRamp);=0A=
+    ReleaseDC(This->win_handle, hDC);=0A=
+    return WINED3D_OK;=0A=
+=0A=
+}=0A=
+=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetGammaRamp(IWineD3DSwapChain =
*iface, WINED3DGAMMARAMP *pRamp){=0A=
+=0A=
+    IWineD3DSwapChainImpl *This =3D (IWineD3DSwapChainImpl *)iface;=0A=
+    HDC hDC;=0A=
+    TRACE("(%p) : pRamp@%p\n", This, pRamp);=0A=
+    hDC =3D GetDC(This->win_handle);=0A=
+    GetDeviceGammaRamp(hDC, pRamp);=0A=
+    ReleaseDC(This->win_handle, hDC);=0A=
+    return WINED3D_OK;=0A=
+=0A=
+}=0A=
diff --git a/dlls/wined3d/wined3d_private.h =
b/dlls/wined3d/wined3d_private.h=0A=
index 91617e8..0629dd2 100644=0A=
--- a/dlls/wined3d/wined3d_private.h=0A=
+++ b/dlls/wined3d/wined3d_private.h=0A=
@@ -1746,6 +1746,19 @@ typedef struct IWineD3DSwapChainImpl=0A=
 =0A=
 extern const IWineD3DSwapChainVtbl IWineD3DSwapChain_Vtbl;=0A=
 =0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_QueryInterface(IWineD3DSwapChain *iface, =
REFIID riid, LPVOID *ppobj);=0A=
+ULONG WINAPI IWineD3DBaseSwapChainImpl_AddRef(IWineD3DSwapChain *iface);=0A=
+ULONG WINAPI IWineD3DBaseSwapChainImpl_Release(IWineD3DSwapChain =
*iface);=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetParent(IWineD3DSwapChain =
*iface, IUnknown ** ppParent);=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetFrontBufferData(IWineD3DSwapChain *iface, =
IWineD3DSurface *pDestSurface);=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetBackBuffer(IWineD3DSwapChain *iface, UINT =
iBackBuffer, WINED3DBACKBUFFER_TYPE Type, IWineD3DSurface =
**ppBackBuffer);=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetRasterStatus(IWineD3DSwapChain *iface, =
WINED3DRASTER_STATUS *pRasterStatus);=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetDisplayMode(IWineD3DSwapChain *iface, =
WINED3DDISPLAYMODE*pMode);=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetDevice(IWineD3DSwapChain =
*iface, IWineD3DDevice**ppDevice);=0A=
+HRESULT WINAPI =
IWineD3DBaseSwapChainImpl_GetPresentParameters(IWineD3DSwapChain *iface, =
WINED3DPRESENT_PARAMETERS *pPresentationParameters);=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_SetGammaRamp(IWineD3DSwapChain =
*iface, DWORD Flags, CONST WINED3DGAMMARAMP *pRamp);=0A=
+HRESULT WINAPI IWineD3DBaseSwapChainImpl_GetGammaRamp(IWineD3DSwapChain =
*iface, WINED3DGAMMARAMP *pRamp);=0A=
+=0A=
 WineD3DContext =
*IWineD3DSwapChainImpl_CreateContextForThread(IWineD3DSwapChain *iface);=0A=
 =0A=
 =
/************************************************************************=
*****=0A=
-- =0A=
1.5.4.5=0A=
=0A=

------=_NextPart_000_0025_01C90123.F5B9D6D0--




More information about the wine-patches mailing list