3 * COPYRIGHT: See COPYING in the top level directory
5 * FILE: lib/ddraw/main/surface.c
6 * PURPOSE: IDirectDrawSurface7 Implementation
7 * PROGRAMMER: Magnus Olsen, Maarten Bosma
14 HRESULT WINAPI
Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface
, LPDIRECTDRAW pDD
, LPDDSURFACEDESC2 pDDSD2
)
16 IDirectDrawSurfaceImpl
* This
= (IDirectDrawSurfaceImpl
*)iface
;
18 /* Call the Hal CreateSurface */
19 if (This
->owner
->DirectDrawGlobal
.lpDDCBtmp
->HALDD
.dwFlags
& DDHAL_CB32_CREATESURFACE
)
21 return Hal_DDrawSurface_Initialize (iface
, pDD
, pDDSD2
);
24 /* Call Hel if Hal of CreateSurface is not supported */
25 return Hel_DDrawSurface_Initialize (iface
, pDD
, pDDSD2
);
28 ULONG WINAPI
Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface
)
30 IDirectDrawSurfaceImpl
* This
= (IDirectDrawSurfaceImpl
*)iface
;
32 return InterlockedIncrement((PLONG
)&This
->owner
->DirectDrawGlobal
.dsList
->dwIntRefCnt
);
35 ULONG WINAPI
Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface
)
37 IDirectDrawSurfaceImpl
* This
= (IDirectDrawSurfaceImpl
*)iface
;
38 ULONG ref
= InterlockedDecrement((PLONG
)&This
->owner
->DirectDrawGlobal
.dsList
->dwIntRefCnt
);
41 HeapFree(GetProcessHeap(), 0, This
);
49 Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface
, REFIID riid
,
55 HRESULT WINAPI
Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface
, LPRECT rdst
,
56 LPDIRECTDRAWSURFACE7 src
, LPRECT rsrc
, DWORD dwFlags
, LPDDBLTFX lpbltfx
)
58 IDirectDrawImpl
* This
= (IDirectDrawImpl
*)iface
;
62 if (This
->DirectDrawGlobal
.lpDDCBtmp
->HALDD
.dwFlags
& DDHAL_CB32_FLIPTOGDISURFACE
)
64 return Hal_DDrawSurface_Blt( iface
, rdst
, src
, rsrc
, dwFlags
, lpbltfx
);
67 return Hel_DDrawSurface_Blt( iface
, rdst
, src
, rsrc
, dwFlags
, lpbltfx
);
71 HRESULT WINAPI
Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface
, LPRECT prect
,
72 LPDDSURFACEDESC2 pDDSD
, DWORD flags
, HANDLE event
)
77 HRESULT WINAPI
Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface
, LPRECT pRect
)
83 Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
84 LPDIRECTDRAWSURFACE7 pAttach
)
89 /* MSDN: "not currently implemented." */
91 Main_DDrawSurface_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE7 iface
,
98 Main_DDrawSurface_BltFast(LPDIRECTDRAWSURFACE7 iface
, DWORD dstx
,
99 DWORD dsty
, LPDIRECTDRAWSURFACE7 src
,
100 LPRECT rsrc
, DWORD trans
)
106 Main_DDrawSurface_Restore(LPDIRECTDRAWSURFACE7 iface
)
111 /* MSDN: "not currently implemented." */
113 Main_DDrawSurface_BltBatch(LPDIRECTDRAWSURFACE7 iface
,
114 LPDDBLTBATCH pBatch
, DWORD dwCount
,
121 Main_DDrawSurface_ChangeUniquenessValue(LPDIRECTDRAWSURFACE7 iface
)
127 Main_DDrawSurface_DeleteAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
129 LPDIRECTDRAWSURFACE7 pAttach
)
135 Main_DDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7 iface
,
137 LPDDENUMSURFACESCALLBACK7 cb
)
143 Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface
,
144 DWORD dwFlags
, LPVOID context
,
145 LPDDENUMSURFACESCALLBACK7 cb
)
151 Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface
,
152 LPDIRECTDRAWSURFACE7 override
, DWORD dwFlags
)
158 Main_DDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7 iface
, REFGUID tag
)
164 Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
166 LPDIRECTDRAWSURFACE7
* ppSurface
)
172 Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
178 Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface
, LPDDSCAPS2 pCaps
)
184 Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface
,
185 LPDIRECTDRAWCLIPPER
* ppClipper
)
191 Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
,
198 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface
, HDC
*phDC
)
204 Main_DDrawSurface_GetDDInterface(LPDIRECTDRAWSURFACE7 iface
, LPVOID
* pDD
)
209 Main_DDrawSurface_GetFlipStatus(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
215 Main_DDrawSurface_GetLOD(LPDIRECTDRAWSURFACE7 iface
, LPDWORD pdwMaxLOD
)
221 Main_DDrawSurface_GetOverlayPosition(LPDIRECTDRAWSURFACE7 iface
,
222 LPLONG pX
, LPLONG pY
)
227 Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface
,
228 LPDIRECTDRAWPALETTE
* ppPalette
)
234 Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface
,
235 LPDDPIXELFORMAT pDDPixelFormat
)
241 Main_DDrawSurface_GetPriority(LPDIRECTDRAWSURFACE7 iface
,
248 Main_DDrawSurface_GetPrivateData(LPDIRECTDRAWSURFACE7 iface
,
249 REFGUID tag
, LPVOID pBuffer
,
250 LPDWORD pcbBufferSize
)
256 Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface
,
257 LPDDSURFACEDESC2 pDDSD
)
263 Main_DDrawSurface_GetUniquenessValue(LPDIRECTDRAWSURFACE7 iface
,
270 Main_DDrawSurface_IsLost(LPDIRECTDRAWSURFACE7 iface
)
276 Main_DDrawSurface_PageLock(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
282 Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
288 Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface
, HDC hDC
)
294 Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface
,
295 LPDIRECTDRAWCLIPPER pDDClipper
)
301 Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface
,
302 DWORD dwFlags
, LPDDCOLORKEY pCKey
)
308 Main_DDrawSurface_SetLOD (LPDIRECTDRAWSURFACE7 iface
, DWORD dwMaxLOD
)
314 Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7 iface
,
321 Main_DDrawSurface_SetPalette (LPDIRECTDRAWSURFACE7 iface
,
322 LPDIRECTDRAWPALETTE pPalette
)
328 Main_DDrawSurface_SetPriority (LPDIRECTDRAWSURFACE7 iface
,
335 Main_DDrawSurface_SetPrivateData (LPDIRECTDRAWSURFACE7 iface
,
336 REFGUID tag
, LPVOID pData
,
337 DWORD cbSize
, DWORD dwFlags
)
343 Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface
,
345 LPDIRECTDRAWSURFACE7 pDstSurface
,
346 LPRECT pDstRect
, DWORD dwFlags
,
352 /* MSDN: "not currently implemented." */
354 Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface
,
360 HRESULT WINAPI
Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7 iface
,
361 DWORD dwFlags
, LPDIRECTDRAWSURFACE7 pDDSRef
)
366 IDirectDrawSurface7Vtbl DirectDrawSurface7_Vtable
=
368 Main_DDrawSurface_QueryInterface
,
369 Main_DDrawSurface_AddRef
,
370 Main_DDrawSurface_Release
,
371 Main_DDrawSurface_AddAttachedSurface
,
372 Main_DDrawSurface_AddOverlayDirtyRect
,
373 Main_DDrawSurface_Blt
,
374 Main_DDrawSurface_BltBatch
,
375 Main_DDrawSurface_BltFast
,
376 Main_DDrawSurface_DeleteAttachedSurface
,
377 Main_DDrawSurface_EnumAttachedSurfaces
,
378 Main_DDrawSurface_EnumOverlayZOrders
,
379 Main_DDrawSurface_Flip
,
380 Main_DDrawSurface_GetAttachedSurface
,
381 Main_DDrawSurface_GetBltStatus
,
382 Main_DDrawSurface_GetCaps
,
383 Main_DDrawSurface_GetClipper
,
384 Main_DDrawSurface_GetColorKey
,
385 Main_DDrawSurface_GetDC
,
386 Main_DDrawSurface_GetFlipStatus
,
387 Main_DDrawSurface_GetOverlayPosition
,
388 Main_DDrawSurface_GetPalette
,
389 Main_DDrawSurface_GetPixelFormat
,
390 Main_DDrawSurface_GetSurfaceDesc
,
391 Main_DDrawSurface_Initialize
,
392 Main_DDrawSurface_IsLost
,
393 Main_DDrawSurface_Lock
,
394 Main_DDrawSurface_ReleaseDC
,
395 Main_DDrawSurface_Restore
,
396 Main_DDrawSurface_SetClipper
,
397 Main_DDrawSurface_SetColorKey
,
398 Main_DDrawSurface_SetOverlayPosition
,
399 Main_DDrawSurface_SetPalette
,
400 Main_DDrawSurface_Unlock
,
401 Main_DDrawSurface_UpdateOverlay
,
402 Main_DDrawSurface_UpdateOverlayDisplay
,
403 Main_DDrawSurface_UpdateOverlayZOrder