3 * COPYRIGHT: See COPYING in the top level directory
5 * FILE: lib/ddraw/main/surface.c
6 * PURPOSE: DirectDraw Implementation
7 * PROGRAMMER: Magnus Olsen, Maarten Bosma
14 HRESULT WINAPI
Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface
, LPDIRECTDRAW pDD
, LPDDSURFACEDESC2 pDDSD
)
16 IDirectDrawSurfaceImpl
* This
= (IDirectDrawSurfaceImpl
*)iface
;
19 return DDERR_ALREADYINITIALIZED
;
21 if(sizeof(DDSURFACEDESC2
) != pDDSD
->dwSize
)
22 return DDERR_UNSUPPORTED
;
24 if(!(pDDSD
->dwFlags
& DDSD_CAPS
))
25 return DDERR_INVALIDPARAMS
;
27 This
->owner
= (IDirectDrawImpl
*)pDD
;
29 // Surface Global Struct
30 DDRAWI_DDRAWSURFACE_GBL Global
;
31 memset(&Global
, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL
));
33 if(pDDSD
->ddsCaps
.dwCaps
== DDSCAPS_PRIMARYSURFACE
)
34 Global
.dwGlobalFlags
|= DDRAWISURFGBL_ISGDISURFACE
;
36 Global
.lpDD
= &This
->owner
->DirectDrawGlobal
;
37 Global
.wHeight
= This
->owner
->Height
;
38 Global
.wWidth
= This
->owner
->Width
;
39 Global
.dwLinearSize
= Global
.wWidth
* This
->owner
->Bpp
/8;
41 // Surface More Struct
42 DDRAWI_DDRAWSURFACE_MORE More
;
43 memset(&More
, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE
));
44 More
.dwSize
= sizeof(DDRAWI_DDRAWSURFACE_MORE
);
46 // Surface Local Struct
47 DDRAWI_DDRAWSURFACE_LCL Local
;
48 memset(&Local
, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL
));
49 Local
.lpGbl
= &Global
;
50 Local
.lpSurfMore
= &More
;
51 Local
.ddsCaps
= *(DDSCAPS
*)&pDDSD
->ddsCaps
;
53 if(pDDSD
->ddsCaps
.dwCaps
== DDSCAPS_PRIMARYSURFACE
)
54 Local
.dwFlags
|= DDRAWISURF_FRONTBUFFER
;
56 DDRAWI_DDRAWSURFACE_LCL
* pLocal
= &Local
; // for stupid double pointer below
58 // The Parameter Struct
59 DDHAL_CREATESURFACEDATA CreateData
;
60 memset(&CreateData
, 0, sizeof(DDHAL_CREATESURFACEDATA
));
61 CreateData
.lpDD
= &This
->owner
->DirectDrawGlobal
;
62 CreateData
.lpDDSurfaceDesc
= (DDSURFACEDESC
*)pDDSD
;
63 CreateData
.dwSCnt
= 1;
64 CreateData
.lplpSList
= &pLocal
;
66 if(This
->owner
->DriverCallbacks
.DdMain
.CreateSurface (&CreateData
) != DDHAL_DRIVER_HANDLED
)
67 return DDERR_INVALIDPARAMS
;
69 if(CreateData
.ddRVal
!= DD_OK
)
70 return CreateData
.ddRVal
;
72 OutputDebugString(L
"This does not get hit.");
77 HRESULT WINAPI
Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface
, LPRECT rdst
,
78 LPDIRECTDRAWSURFACE7 src
, LPRECT rsrc
, DWORD dwFlags
, LPDDBLTFX lpbltfx
)
83 HRESULT WINAPI
Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface
, LPRECT prect
,
84 LPDDSURFACEDESC2 pDDSD
, DWORD flags
, HANDLE event
)
89 HRESULT WINAPI
Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface
, LPRECT pRect
)
95 ULONG WINAPI
Main_DDrawSurface_AddRef(LPDIRECTDRAWSURFACE7 iface
)
97 IDirectDrawSurfaceImpl
* This
= (IDirectDrawSurfaceImpl
*)iface
;
98 return InterlockedIncrement(&This
->ref
);
101 ULONG WINAPI
Main_DDrawSurface_Release(LPDIRECTDRAWSURFACE7 iface
)
103 IDirectDrawImpl
* This
= (IDirectDrawImpl
*)iface
;
104 ULONG ref
= InterlockedDecrement(&This
->ref
);
107 HeapFree(GetProcessHeap(), 0, This
);
115 Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface
, REFIID riid
,
118 return DDERR_UNSUPPORTED
;
122 Main_DDrawSurface_AddAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
123 LPDIRECTDRAWSURFACE7 pAttach
)
125 return DDERR_UNSUPPORTED
;
128 /* MSDN: "not currently implemented." */
130 Main_DDrawSurface_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE7 iface
,
133 return DDERR_UNSUPPORTED
;
137 Main_DDrawSurface_BltFast(LPDIRECTDRAWSURFACE7 iface
, DWORD dstx
,
138 DWORD dsty
, LPDIRECTDRAWSURFACE7 src
,
139 LPRECT rsrc
, DWORD trans
)
141 return DDERR_UNSUPPORTED
;
145 Main_DDrawSurface_Restore(LPDIRECTDRAWSURFACE7 iface
)
147 return DDERR_UNSUPPORTED
;
150 /* MSDN: "not currently implemented." */
152 Main_DDrawSurface_BltBatch(LPDIRECTDRAWSURFACE7 iface
,
153 LPDDBLTBATCH pBatch
, DWORD dwCount
,
156 return DDERR_UNSUPPORTED
;
160 Main_DDrawSurface_ChangeUniquenessValue(LPDIRECTDRAWSURFACE7 iface
)
162 return DDERR_UNSUPPORTED
;
166 Main_DDrawSurface_DeleteAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
168 LPDIRECTDRAWSURFACE7 pAttach
)
170 return DDERR_UNSUPPORTED
;
174 Main_DDrawSurface_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE7 iface
,
176 LPDDENUMSURFACESCALLBACK7 cb
)
178 return DDERR_UNSUPPORTED
;
182 Main_DDrawSurface_EnumOverlayZOrders(LPDIRECTDRAWSURFACE7 iface
,
183 DWORD dwFlags
, LPVOID context
,
184 LPDDENUMSURFACESCALLBACK7 cb
)
186 return DDERR_UNSUPPORTED
;
190 Main_DDrawSurface_Flip(LPDIRECTDRAWSURFACE7 iface
,
191 LPDIRECTDRAWSURFACE7 override
, DWORD dwFlags
)
193 return DDERR_UNSUPPORTED
;
197 Main_DDrawSurface_FreePrivateData(LPDIRECTDRAWSURFACE7 iface
, REFGUID tag
)
199 return DDERR_UNSUPPORTED
;
203 Main_DDrawSurface_GetAttachedSurface(LPDIRECTDRAWSURFACE7 iface
,
205 LPDIRECTDRAWSURFACE7
* ppSurface
)
207 return DDERR_UNSUPPORTED
;
211 Main_DDrawSurface_GetBltStatus(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
213 return DDERR_UNSUPPORTED
;
217 Main_DDrawSurface_GetCaps(LPDIRECTDRAWSURFACE7 iface
, LPDDSCAPS2 pCaps
)
219 return DDERR_UNSUPPORTED
;
223 Main_DDrawSurface_GetClipper(LPDIRECTDRAWSURFACE7 iface
,
224 LPDIRECTDRAWCLIPPER
* ppClipper
)
226 return DDERR_UNSUPPORTED
;
230 Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
,
233 return DDERR_UNSUPPORTED
;
237 Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface
, HDC
*phDC
)
239 return DDERR_UNSUPPORTED
;
243 Main_DDrawSurface_GetDDInterface(LPDIRECTDRAWSURFACE7 iface
, LPVOID
* pDD
)
245 return DDERR_UNSUPPORTED
;
248 Main_DDrawSurface_GetFlipStatus(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
250 return DDERR_UNSUPPORTED
;
254 Main_DDrawSurface_GetLOD(LPDIRECTDRAWSURFACE7 iface
, LPDWORD pdwMaxLOD
)
256 return DDERR_UNSUPPORTED
;
260 Main_DDrawSurface_GetOverlayPosition(LPDIRECTDRAWSURFACE7 iface
,
261 LPLONG pX
, LPLONG pY
)
263 return DDERR_UNSUPPORTED
;
266 Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface
,
267 LPDIRECTDRAWPALETTE
* ppPalette
)
269 return DDERR_UNSUPPORTED
;
273 Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface
,
274 LPDDPIXELFORMAT pDDPixelFormat
)
276 return DDERR_UNSUPPORTED
;
280 Main_DDrawSurface_GetPriority(LPDIRECTDRAWSURFACE7 iface
,
283 return DDERR_UNSUPPORTED
;
287 Main_DDrawSurface_GetPrivateData(LPDIRECTDRAWSURFACE7 iface
,
288 REFGUID tag
, LPVOID pBuffer
,
289 LPDWORD pcbBufferSize
)
291 return DDERR_UNSUPPORTED
;
295 Main_DDrawSurface_GetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface
,
296 LPDDSURFACEDESC2 pDDSD
)
298 return DDERR_UNSUPPORTED
;
302 Main_DDrawSurface_GetUniquenessValue(LPDIRECTDRAWSURFACE7 iface
,
305 return DDERR_UNSUPPORTED
;
309 Main_DDrawSurface_IsLost(LPDIRECTDRAWSURFACE7 iface
)
311 return DDERR_UNSUPPORTED
;
315 Main_DDrawSurface_PageLock(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
317 return DDERR_UNSUPPORTED
;
321 Main_DDrawSurface_PageUnlock(LPDIRECTDRAWSURFACE7 iface
, DWORD dwFlags
)
323 return DDERR_UNSUPPORTED
;
327 Main_DDrawSurface_ReleaseDC(LPDIRECTDRAWSURFACE7 iface
, HDC hDC
)
329 return DDERR_UNSUPPORTED
;
333 Main_DDrawSurface_SetClipper (LPDIRECTDRAWSURFACE7 iface
,
334 LPDIRECTDRAWCLIPPER pDDClipper
)
336 return DDERR_UNSUPPORTED
;
340 Main_DDrawSurface_SetColorKey (LPDIRECTDRAWSURFACE7 iface
,
341 DWORD dwFlags
, LPDDCOLORKEY pCKey
)
343 return DDERR_UNSUPPORTED
;
347 Main_DDrawSurface_SetLOD (LPDIRECTDRAWSURFACE7 iface
, DWORD dwMaxLOD
)
349 return DDERR_UNSUPPORTED
;
353 Main_DDrawSurface_SetOverlayPosition (LPDIRECTDRAWSURFACE7 iface
,
356 return DDERR_UNSUPPORTED
;
360 Main_DDrawSurface_SetPalette (LPDIRECTDRAWSURFACE7 iface
,
361 LPDIRECTDRAWPALETTE pPalette
)
363 return DDERR_UNSUPPORTED
;
367 Main_DDrawSurface_SetPriority (LPDIRECTDRAWSURFACE7 iface
,
370 return DDERR_UNSUPPORTED
;
373 /* Be careful when locking this: it is risky to call the object's AddRef
374 * or Release holding a lock. */
376 Main_DDrawSurface_SetPrivateData (LPDIRECTDRAWSURFACE7 iface
,
377 REFGUID tag
, LPVOID pData
,
378 DWORD cbSize
, DWORD dwFlags
)
380 return DDERR_UNSUPPORTED
;
384 Main_DDrawSurface_UpdateOverlay (LPDIRECTDRAWSURFACE7 iface
,
386 LPDIRECTDRAWSURFACE7 pDstSurface
,
387 LPRECT pDstRect
, DWORD dwFlags
,
390 return DDERR_UNSUPPORTED
;
393 /* MSDN: "not currently implemented." */
395 Main_DDrawSurface_UpdateOverlayDisplay (LPDIRECTDRAWSURFACE7 iface
,
398 return DDERR_UNSUPPORTED
;
401 HRESULT WINAPI
Main_DDrawSurface_UpdateOverlayZOrder (LPDIRECTDRAWSURFACE7 iface
,
402 DWORD dwFlags
, LPDIRECTDRAWSURFACE7 pDDSRef
)
404 return DDERR_NOTAOVERLAYSURFACE
;
407 IDirectDrawSurface7Vtbl DDrawSurface_VTable
=
409 Main_DDrawSurface_QueryInterface
,
410 Main_DDrawSurface_AddRef
,
411 Main_DDrawSurface_Release
,
412 Main_DDrawSurface_AddAttachedSurface
,
413 Main_DDrawSurface_AddOverlayDirtyRect
,
414 Main_DDrawSurface_Blt
,
415 Main_DDrawSurface_BltBatch
,
416 Main_DDrawSurface_BltFast
,
417 Main_DDrawSurface_DeleteAttachedSurface
,
418 Main_DDrawSurface_EnumAttachedSurfaces
,
419 Main_DDrawSurface_EnumOverlayZOrders
,
420 Main_DDrawSurface_Flip
,
421 Main_DDrawSurface_GetAttachedSurface
,
422 Main_DDrawSurface_GetBltStatus
,
423 Main_DDrawSurface_GetCaps
,
424 Main_DDrawSurface_GetClipper
,
425 Main_DDrawSurface_GetColorKey
,
426 Main_DDrawSurface_GetDC
,
427 Main_DDrawSurface_GetFlipStatus
,
428 Main_DDrawSurface_GetOverlayPosition
,
429 Main_DDrawSurface_GetPalette
,
430 Main_DDrawSurface_GetPixelFormat
,
431 Main_DDrawSurface_GetSurfaceDesc
,
432 Main_DDrawSurface_Initialize
,
433 Main_DDrawSurface_IsLost
,
434 Main_DDrawSurface_Lock
,
435 Main_DDrawSurface_ReleaseDC
,
436 Main_DDrawSurface_Restore
,
437 Main_DDrawSurface_SetClipper
,
438 Main_DDrawSurface_SetColorKey
,
439 Main_DDrawSurface_SetOverlayPosition
,
440 Main_DDrawSurface_SetPalette
,
441 Main_DDrawSurface_Unlock
,
442 Main_DDrawSurface_UpdateOverlay
,
443 Main_DDrawSurface_UpdateOverlayDisplay
,
444 Main_DDrawSurface_UpdateOverlayZOrder