1 /* DirectDrawPalette HAL driver
3 * Copyright 2001 TransGaming Technologies Inc.
8 #include "debugtools.h"
13 #include "ddraw_private.h"
14 #include "dpalette/main.h"
15 #include "dpalette/hal.h"
16 #include "ddraw/main.h"
18 DEFAULT_DEBUG_CHANNEL(ddraw
);
20 static ICOM_VTABLE(IDirectDrawPalette
) DDRAW_HAL_Palette_VTable
;
22 /******************************************************************************
25 HRESULT
HAL_DirectDrawPalette_Construct(IDirectDrawPaletteImpl
* This
,
26 IDirectDrawImpl
* pDD
, DWORD dwFlags
)
28 LPDDRAWI_DIRECTDRAW_GBL dd_gbl
= pDD
->local
.lpGbl
;
29 DDHAL_CREATEPALETTEDATA data
;
32 hr
= Main_DirectDrawPalette_Construct(This
, pDD
, dwFlags
);
33 if (FAILED(hr
)) return hr
;
35 This
->final_release
= HAL_DirectDrawPalette_final_release
;
36 ICOM_INIT_INTERFACE(This
, IDirectDrawPalette
, DDRAW_HAL_Palette_VTable
);
38 /* initialize HAL palette */
40 data
.lpDDPalette
= &This
->global
;
41 data
.lpColorTable
= NULL
;
43 data
.CreatePalette
= dd_gbl
->lpDDCBtmp
->HALDD
.CreatePalette
;
44 if (data
.CreatePalette
)
45 data
.CreatePalette(&data
);
51 HAL_DirectDrawPalette_Create(IDirectDrawImpl
* pDD
, DWORD dwFlags
,
52 LPDIRECTDRAWPALETTE
* ppPalette
,
55 IDirectDrawPaletteImpl
* This
;
58 if (pUnkOuter
!= NULL
)
59 return CLASS_E_NOAGGREGATION
; /* unchecked */
61 This
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(*This
));
62 if (This
== NULL
) return E_OUTOFMEMORY
;
64 hr
= HAL_DirectDrawPalette_Construct(This
, pDD
, dwFlags
);
66 HeapFree(GetProcessHeap(), 0, This
);
68 *ppPalette
= ICOM_INTERFACE(This
, IDirectDrawPalette
);
74 HAL_DirectDrawPalette_SetEntries(LPDIRECTDRAWPALETTE iface
, DWORD dwFlags
,
75 DWORD dwStart
, DWORD dwCount
,
76 LPPALETTEENTRY palent
)
78 ICOM_THIS(IDirectDrawPaletteImpl
,iface
);
79 LPDDRAWI_DIRECTDRAW_GBL dd_gbl
= This
->local
.lpDD_lcl
->lpGbl
;
80 DDHAL_SETENTRIESDATA data
;
82 TRACE("(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",This
,dwFlags
,dwStart
,dwCount
,
86 data
.lpDDPalette
= &This
->global
;
87 data
.dwBase
= dwStart
;
88 data
.dwNumEntries
= dwCount
;
89 data
.lpEntries
= palent
;
91 data
.SetEntries
= dd_gbl
->lpDDCBtmp
->HALDDPalette
.SetEntries
;
93 data
.SetEntries(&data
);
95 return Main_DirectDrawPalette_SetEntries(iface
, dwFlags
, dwStart
, dwCount
, palent
);
98 void HAL_DirectDrawPalette_final_release(IDirectDrawPaletteImpl
* This
)
100 LPDDRAWI_DIRECTDRAW_GBL dd_gbl
= This
->local
.lpDD_lcl
->lpGbl
;
101 DDHAL_DESTROYPALETTEDATA data
;
103 /* destroy HAL palette */
105 data
.lpDDPalette
= &This
->global
;
107 data
.DestroyPalette
= dd_gbl
->lpDDCBtmp
->HALDDPalette
.DestroyPalette
;
108 if (data
.DestroyPalette
)
109 data
.DestroyPalette(&data
);
111 Main_DirectDrawPalette_final_release(This
);
114 static ICOM_VTABLE(IDirectDrawPalette
) DDRAW_HAL_Palette_VTable
=
116 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
117 Main_DirectDrawPalette_QueryInterface
,
118 Main_DirectDrawPalette_AddRef
,
119 Main_DirectDrawPalette_Release
,
120 Main_DirectDrawPalette_GetCaps
,
121 Main_DirectDrawPalette_GetEntries
,
122 Main_DirectDrawPalette_Initialize
,
123 HAL_DirectDrawPalette_SetEntries