gamma ramp patch

Ove Kaaven ovehk at ping.uio.no
Sun Apr 15 16:36:27 CDT 2001


Log:
Ove Kaaven <ovek at transgaming.com>
Implemented the IDirectDrawGammaControl interface.

diff -u dlls/ddraw/dsurface/main.c dlls/ddraw/dsurface/main.c
--- dlls/ddraw/dsurface/main.c
+++ dlls/ddraw/dsurface/main.c
@@ -2,7 +2,7 @@
  *
  * Copyright 1997-2000 Marcus Meissner
  * Copyright 1998-2000 Lionel Ulmer (most of Direct3D stuff)
- * Copyright 2000 TransGaming Technologies Inc.
+ * Copyright 2000-2001 TransGaming Technologies Inc.
  */
 #include "config.h"
 #include "winerror.h"
@@ -32,7 +32,23 @@
     This->uniqueness_value = 1; /* unchecked */
     This->ref = 1;
 
+    This->local.lpSurfMore = &This->more;
+    This->local.lpGbl = &This->global;
+    This->local.dwProcessId = GetCurrentProcessId();
+    This->local.dwFlags = 0; /* FIXME */
+    This->local.ddsCaps.dwCaps = This->surface_desc.ddsCaps.dwCaps;
+    /* FIXME: more local stuff */
+    This->more.lpDD_lcl = &pDD->local;
+    This->more.ddsCapsEx.dwCaps2 = This->surface_desc.ddsCaps.dwCaps2;
+    This->more.ddsCapsEx.dwCaps3 = This->surface_desc.ddsCaps.dwCaps3;
+    This->more.ddsCapsEx.dwCaps4 = This->surface_desc.ddsCaps.dwCaps4;
+    /* FIXME: more more stuff */
+    This->gmore = &This->global_more;
+    This->global.u3.lpDD = pDD->local.lpGbl;
+    /* FIXME: more global stuff */
+
     This->final_release = Main_DirectDrawSurface_final_release;
+    This->late_allocate = Main_DirectDrawSurface_late_allocate;
     This->attach = Main_DirectDrawSurface_attach;
     This->detach = Main_DirectDrawSurface_detach;
     This->lock_update = Main_DirectDrawSurface_lock_update;
@@ -41,9 +57,13 @@
     This->set_palette    = Main_DirectDrawSurface_set_palette;
     This->update_palette = Main_DirectDrawSurface_update_palette;
     This->get_display_window = Main_DirectDrawSurface_get_display_window;
+    This->get_gamma_ramp = Main_DirectDrawSurface_get_gamma_ramp;
+    This->set_gamma_ramp = Main_DirectDrawSurface_set_gamma_ramp;
 
     ICOM_INIT_INTERFACE(This, IDirectDrawSurface3,
 			DDRAW_IDDS3_Thunk_VTable);
+    ICOM_INIT_INTERFACE(This, IDirectDrawGammaControl,
+			DDRAW_IDDGC_VTable);
     /* There is no generic implementation of IDDS7 */
 
     Main_DirectDraw_AddSurface(pDD, This);
@@ -55,6 +75,11 @@
     Main_DirectDraw_RemoveSurface(This->ddraw_owner, This);
 }
 
+HRESULT Main_DirectDrawSurface_late_allocate(IDirectDrawSurfaceImpl* This)
+{
+    return DD_OK;
+}
+
 static void Main_DirectDrawSurface_Destroy(IDirectDrawSurfaceImpl* This)
 {
     This->final_release(This);
@@ -113,6 +138,12 @@
 	*ppObj = ICOM_INTERFACE(This, IDirectDrawSurface3);
 	return S_OK;
     }
+    else if (IsEqualGUID(&IID_IDirectDrawGammaControl, riid))
+    {
+	This->ref++;
+	*ppObj = ICOM_INTERFACE(This, IDirectDrawGammaControl);
+	return S_OK;
+    }
     else
 	return E_NOINTERFACE;
 }
@@ -167,6 +198,34 @@
     return 0;
 }
 
+HRESULT
+Main_DirectDrawSurface_get_gamma_ramp(IDirectDrawSurfaceImpl* This,
+				      DWORD dwFlags,
+				      LPDDGAMMARAMP lpGammaRamp)
+{
+    HDC hDC;
+    HRESULT hr;
+    hr = This->get_dc(This, &hDC);
+    if (FAILED(hr)) return hr;
+    hr = GetDeviceGammaRamp(hDC, lpGammaRamp) ? DD_OK : DDERR_UNSUPPORTED;
+    This->release_dc(This, hDC);
+    return hr;
+}
+
+HRESULT
+Main_DirectDrawSurface_set_gamma_ramp(IDirectDrawSurfaceImpl* This,
+				      DWORD dwFlags,
+				      LPDDGAMMARAMP lpGammaRamp)
+{
+    HDC hDC;
+    HRESULT hr;
+    hr = This->get_dc(This, &hDC);
+    if (FAILED(hr)) return hr;
+    hr = SetDeviceGammaRamp(hDC, lpGammaRamp) ? DD_OK : DDERR_UNSUPPORTED;
+    This->release_dc(This, hDC);
+    return hr;
+}
+
 
 /*** Interface functions */
 
diff -u dlls/ddraw/dsurface/main.h dlls/ddraw/dsurface/main.h
--- dlls/ddraw/dsurface/main.h
+++ dlls/ddraw/dsurface/main.h
@@ -1,4 +1,4 @@
-/* Copyright 2000 TransGaming Technologies Inc. */
+/* Copyright 2000-2001 TransGaming Technologies Inc. */
 
 #ifndef DDRAW_DSURFACE_MAIN_H_INCLUDED
 #define DDRAW_DSURFACE_MAIN_H_INCLUDED
@@ -25,6 +25,8 @@
     DWORD size;
 } PrivateData;
 
+extern ICOM_VTABLE(IDirectDrawGammaControl) DDRAW_IDDGC_VTable;
+
 /* Non-interface functions */
 HRESULT
 Main_DirectDrawSurface_Construct(IDirectDrawSurfaceImpl* This,
@@ -34,6 +36,8 @@
 
 void
 Main_DirectDrawSurface_final_release(IDirectDrawSurfaceImpl* This);
+HRESULT
+Main_DirectDrawSurface_late_allocate(IDirectDrawSurfaceImpl* This);
 BOOL
 Main_DirectDrawSurface_attach(IDirectDrawSurfaceImpl *This,
 			      IDirectDrawSurfaceImpl *to);
@@ -56,6 +60,15 @@
 				      LPPALETTEENTRY palent);
 HWND
 Main_DirectDrawSurface_get_display_window(IDirectDrawSurfaceImpl* This);
+
+HRESULT
+Main_DirectDrawSurface_get_gamma_ramp(IDirectDrawSurfaceImpl* This,
+				      DWORD dwFlags,
+				      LPDDGAMMARAMP lpGammaRamp);
+HRESULT
+Main_DirectDrawSurface_set_gamma_ramp(IDirectDrawSurfaceImpl* This,
+				      DWORD dwFlags,
+				      LPDDGAMMARAMP lpGammaRamp);
 
 BOOL Main_DirectDrawSurface_flip_data(IDirectDrawSurfaceImpl* front,
 				      IDirectDrawSurfaceImpl* back,
diff -u dlls/ddraw/Makefile.in dlls/ddraw/Makefile.in
--- dlls/ddraw/Makefile.in
+++ dlls/ddraw/Makefile.in
@@ -33,6 +33,7 @@
 	dsurface/dib.c \
 	dsurface/dibtexture.c \
 	dsurface/fakezbuffer.c \
+	dsurface/gamma.c \
 	dsurface/main.c \
 	dsurface/thunks.c \
 	dsurface/user.c \
diff -u /dev/null dlls/ddraw/dsurface/gamma.c
--- /dev/null
+++ dlls/ddraw/dsurface/gamma.c
@@ -0,0 +1,66 @@
+/*		DirectDrawGammaControl implementation
+ *
+ * Copyright 2001 TransGaming Technologies Inc.
+ */
+
+#include "config.h"
+#include "winerror.h"
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "debugtools.h"
+#include "ddraw_private.h"
+#include "dsurface/main.h"
+
+DEFAULT_DEBUG_CHANNEL(ddraw);
+
+#define CONVERT(pddgc) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,	\
+					  IDirectDrawGammaControl,	\
+					  IDirectDrawSurface7,		\
+					  (pddgc))
+
+static HRESULT WINAPI
+DirectDrawGammaControl_QueryInterface(LPDIRECTDRAWGAMMACONTROL iface, REFIID riid,
+				      LPVOID *ppObj)                        
+{
+    TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), ppObj);
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI
+DirectDrawGammaControl_AddRef(LPDIRECTDRAWGAMMACONTROL iface)
+{
+    return IDirectDrawSurface7_AddRef(CONVERT(iface));
+}
+ 
+static ULONG WINAPI
+DirectDrawGammaControl_Release(LPDIRECTDRAWGAMMACONTROL iface)
+{
+    return IDirectDrawSurface7_Release(CONVERT(iface));
+}
+ 
+static HRESULT WINAPI
+DirectDrawGammaControl_GetGammaRamp(LPDIRECTDRAWGAMMACONTROL iface, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp)
+{
+    ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawGammaControl, iface);
+    TRACE("(%p)->(%08lx,%p)\n", iface,dwFlags,lpGammaRamp);
+    return This->get_gamma_ramp(This, dwFlags, lpGammaRamp);
+}
+
+static HRESULT WINAPI
+DirectDrawGammaControl_SetGammaRamp(LPDIRECTDRAWGAMMACONTROL iface, DWORD dwFlags, LPDDGAMMARAMP lpGammaRamp)
+{
+    ICOM_THIS_FROM(IDirectDrawSurfaceImpl, IDirectDrawGammaControl, iface);
+    TRACE("(%p)->(%08lx,%p)\n", iface,dwFlags,lpGammaRamp);
+    return This->set_gamma_ramp(This, dwFlags, lpGammaRamp);
+}
+
+ICOM_VTABLE(IDirectDrawGammaControl) DDRAW_IDDGC_VTable =
+{
+    DirectDrawGammaControl_QueryInterface,
+    DirectDrawGammaControl_AddRef,
+    DirectDrawGammaControl_Release,
+    DirectDrawGammaControl_GetGammaRamp,
+    DirectDrawGammaControl_SetGammaRamp
+};





More information about the wine-patches mailing list