1 /* IDirectDrawSurface3 -> IDirectDrawSurface7 thunks
2 * Copyright 2000 TransGaming Technologies Inc.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include "wine/port.h"
21 #include "wine/debug.h"
30 #include "ddraw_private.h"
31 #include "ddcomimpl.h"
33 #define CONVERT(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
34 IDirectDrawSurface3, \
35 IDirectDrawSurface7, \
38 #define CONVERT_REV(pdds) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, \
39 IDirectDrawSurface7, \
40 IDirectDrawSurface3, \
43 WINE_DEFAULT_DEBUG_CHANNEL(ddraw_thunk
);
46 IDirectDrawSurface3Impl_QueryInterface(LPDIRECTDRAWSURFACE3 This
, REFIID iid
,
49 return IDirectDrawSurface7_QueryInterface(CONVERT(This
), iid
, ppObj
);
53 IDirectDrawSurface3Impl_AddRef(LPDIRECTDRAWSURFACE3 This
)
55 return IDirectDrawSurface7_AddRef(CONVERT(This
));
59 IDirectDrawSurface3Impl_Release(LPDIRECTDRAWSURFACE3 iface
)
61 ICOM_THIS_FROM( IDirectDrawSurfaceImpl
, IDirectDrawSurface3
, iface
);
62 TRACE("(%p)\n", This
);
63 return IDirectDrawSurface7_Release(CONVERT(iface
));
67 IDirectDrawSurface3Impl_AddAttachedSurface(LPDIRECTDRAWSURFACE3 iface
,
68 LPDIRECTDRAWSURFACE3 pAttach
)
70 ICOM_THIS_FROM(IDirectDrawSurfaceImpl
, IDirectDrawSurface3
, iface
);
71 IDirectDrawSurfaceImpl
*Surf
= ICOM_OBJECT(IDirectDrawSurfaceImpl
, IDirectDrawSurface3
, pAttach
);
72 TRACE("(%p)->(%p)\n", This
, Surf
);
75 * -> offscreen plain surfaces can be attached to other offscreen plain surfaces
76 * -> offscreen plain surfaces can be attached to primaries
77 * -> primaries can be attached to offscreen plain surfaces
78 * -> z buffers can be attached to primaries
81 if(This
->surface_desc
.ddsCaps
.dwCaps
& (DDSCAPS_PRIMARYSURFACE
| DDSCAPS_OFFSCREENPLAIN
) &&
82 Surf
->surface_desc
.ddsCaps
.dwCaps
& (DDSCAPS_PRIMARYSURFACE
| DDSCAPS_OFFSCREENPLAIN
))
84 /* Sizes have to match */
85 if(Surf
->surface_desc
.dwWidth
!= This
->surface_desc
.dwWidth
||
86 Surf
->surface_desc
.dwHeight
!= This
->surface_desc
.dwHeight
)
88 WARN("Surface sizes do not match\n");
89 return DDERR_CANNOTATTACHSURFACE
;
93 else if(This
->surface_desc
.ddsCaps
.dwCaps
& (DDSCAPS_PRIMARYSURFACE
) &&
94 Surf
->surface_desc
.ddsCaps
.dwCaps
& (DDSCAPS_ZBUFFER
))
100 WARN("Invalid attachment combination\n");
101 return DDERR_CANNOTATTACHSURFACE
;
104 return IDirectDrawSurfaceImpl_AddAttachedSurface(This
,
108 static HRESULT WINAPI
109 IDirectDrawSurface3Impl_AddOverlayDirtyRect(LPDIRECTDRAWSURFACE3 This
,
112 return IDirectDrawSurface7_AddOverlayDirtyRect(CONVERT(This
), pRect
);
115 static HRESULT WINAPI
116 IDirectDrawSurface3Impl_Blt(LPDIRECTDRAWSURFACE3 This
, LPRECT prcDst
,
117 LPDIRECTDRAWSURFACE3 pSrcSurf
, LPRECT prcSrc
,
118 DWORD dwFlags
, LPDDBLTFX pFX
)
120 return IDirectDrawSurface7_Blt(CONVERT(This
), prcDst
, CONVERT(pSrcSurf
),
121 prcSrc
, dwFlags
, pFX
);
124 static HRESULT WINAPI
125 IDirectDrawSurface3Impl_BltBatch(LPDIRECTDRAWSURFACE3 This
,
126 LPDDBLTBATCH pBatch
, DWORD dwCount
,
129 return IDirectDrawSurface7_BltBatch(CONVERT(This
), pBatch
, dwCount
,
133 static HRESULT WINAPI
134 IDirectDrawSurface3Impl_BltFast(LPDIRECTDRAWSURFACE3 This
, DWORD x
, DWORD y
,
135 LPDIRECTDRAWSURFACE3 pSrcSurf
, LPRECT prcSrc
,
138 return IDirectDrawSurface7_BltFast(CONVERT(This
), x
, y
, CONVERT(pSrcSurf
),
142 static HRESULT WINAPI
143 IDirectDrawSurface3Impl_DeleteAttachedSurface(LPDIRECTDRAWSURFACE3 This
,
145 LPDIRECTDRAWSURFACE3 pAttached
)
147 return IDirectDrawSurface7_DeleteAttachedSurface(CONVERT(This
), dwFlags
,
153 LPDDENUMSURFACESCALLBACK callback
;
157 static HRESULT CALLBACK
158 EnumCallback(LPDIRECTDRAWSURFACE7 iface
, LPDDSURFACEDESC2 pDDSD
,
161 const struct callback_info
* info
= context
;
164 /* This is an outgoing conversion so we have to do it. */
166 memset(&ddsd
, 0, sizeof(ddsd
));
167 ddsd
.dwSize
= sizeof(ddsd
);
168 DDRAW_Convert_DDSURFACEDESC_2_To_1(pDDSD
, &ddsd
);
171 /* the LPDDSURFACEDESC2 -> LPDDSURFACEDESC coercion is safe, since
172 * the data format is compatible with older enum procs */
173 return info
->callback((LPDIRECTDRAWSURFACE
)CONVERT_REV(iface
), (LPDDSURFACEDESC
)pDDSD
,
177 static HRESULT WINAPI
178 IDirectDrawSurface3Impl_EnumAttachedSurfaces(LPDIRECTDRAWSURFACE3 This
,
180 LPDDENUMSURFACESCALLBACK callback
)
182 struct callback_info info
;
184 info
.callback
= callback
;
185 info
.context
= context
;
187 return IDirectDrawSurface7_EnumAttachedSurfaces(CONVERT(This
), &info
,
191 static HRESULT WINAPI
192 IDirectDrawSurface3Impl_EnumOverlayZOrders(LPDIRECTDRAWSURFACE3 This
,
193 DWORD dwFlags
, LPVOID context
,
194 LPDDENUMSURFACESCALLBACK callback
)
196 struct callback_info info
;
198 info
.callback
= callback
;
199 info
.context
= context
;
201 return IDirectDrawSurface7_EnumOverlayZOrders(CONVERT(This
), dwFlags
,
202 &info
, EnumCallback
);
205 static HRESULT WINAPI
206 IDirectDrawSurface3Impl_Flip(LPDIRECTDRAWSURFACE3 This
,
207 LPDIRECTDRAWSURFACE3 pOverride
, DWORD dwFlags
)
209 return IDirectDrawSurface7_Flip(CONVERT(This
), CONVERT(pOverride
),
213 static HRESULT WINAPI
214 IDirectDrawSurface3Impl_GetAttachedSurface(LPDIRECTDRAWSURFACE3 This
,
216 LPDIRECTDRAWSURFACE3
* ppAttached
)
219 LPDIRECTDRAWSURFACE7 pAttached7
;
222 caps
.dwCaps
= pCaps
->dwCaps
;
227 hr
= IDirectDrawSurface7_GetAttachedSurface(CONVERT(This
), &caps
,
229 if (FAILED(hr
)) return hr
;
231 *ppAttached
= CONVERT_REV(pAttached7
);
235 static HRESULT WINAPI
236 IDirectDrawSurface3Impl_GetBltStatus(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
)
238 return IDirectDrawSurface7_GetBltStatus(CONVERT(This
), dwFlags
);
241 static HRESULT WINAPI
242 IDirectDrawSurface3Impl_GetCaps(LPDIRECTDRAWSURFACE3 This
, LPDDSCAPS pCaps
)
247 hr
= IDirectDrawSurface7_GetCaps(CONVERT(This
), &caps
);
248 if (FAILED(hr
)) return hr
;
250 pCaps
->dwCaps
= caps
.dwCaps
;
254 static HRESULT WINAPI
255 IDirectDrawSurface3Impl_GetClipper(LPDIRECTDRAWSURFACE3 This
,
256 LPDIRECTDRAWCLIPPER
* ppClipper
)
258 return IDirectDrawSurface7_GetClipper(CONVERT(This
), ppClipper
);
261 static HRESULT WINAPI
262 IDirectDrawSurface3Impl_GetColorKey(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
,
265 return IDirectDrawSurface7_GetColorKey(CONVERT(This
), dwFlags
, pCKey
);
268 static HRESULT WINAPI
269 IDirectDrawSurface3Impl_GetDC(LPDIRECTDRAWSURFACE3 This
, HDC
* phDC
)
271 return IDirectDrawSurface7_GetDC(CONVERT(This
), phDC
);
274 static HRESULT WINAPI
275 IDirectDrawSurface3Impl_GetFlipStatus(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
)
277 return IDirectDrawSurface7_GetFlipStatus(CONVERT(This
), dwFlags
);
280 static HRESULT WINAPI
281 IDirectDrawSurface3Impl_GetOverlayPosition(LPDIRECTDRAWSURFACE3 This
, LPLONG pX
,
284 return IDirectDrawSurface7_GetOverlayPosition(CONVERT(This
), pX
, pY
);
287 static HRESULT WINAPI
288 IDirectDrawSurface3Impl_GetPalette(LPDIRECTDRAWSURFACE3 This
,
289 LPDIRECTDRAWPALETTE
* ppPalette
)
291 return IDirectDrawSurface7_GetPalette(CONVERT(This
), ppPalette
);
294 static HRESULT WINAPI
295 IDirectDrawSurface3Impl_GetPixelFormat(LPDIRECTDRAWSURFACE3 This
,
296 LPDDPIXELFORMAT pPixelFormat
)
298 return IDirectDrawSurface7_GetPixelFormat(CONVERT(This
), pPixelFormat
);
301 static HRESULT WINAPI
302 IDirectDrawSurface3Impl_GetSurfaceDesc(LPDIRECTDRAWSURFACE3 This
,
303 LPDDSURFACEDESC pDDSD
)
305 return IDirectDrawSurface7_GetSurfaceDesc(CONVERT(This
),
306 (LPDDSURFACEDESC2
)pDDSD
);
309 static HRESULT WINAPI
310 IDirectDrawSurface3Impl_Initialize(LPDIRECTDRAWSURFACE3 This
, LPDIRECTDRAW pDD
,
311 LPDDSURFACEDESC pDDSD
)
313 return IDirectDrawSurface7_Initialize(CONVERT(This
), pDD
,
314 (LPDDSURFACEDESC2
)pDDSD
);
317 static HRESULT WINAPI
318 IDirectDrawSurface3Impl_IsLost(LPDIRECTDRAWSURFACE3 This
)
320 return IDirectDrawSurface7_IsLost(CONVERT(This
));
323 static HRESULT WINAPI
324 IDirectDrawSurface3Impl_Lock(LPDIRECTDRAWSURFACE3 This
, LPRECT pRect
,
325 LPDDSURFACEDESC pDDSD
, DWORD dwFlags
, HANDLE h
)
327 return IDirectDrawSurface7_Lock(CONVERT(This
), pRect
,
328 (LPDDSURFACEDESC2
)pDDSD
, dwFlags
, h
);
331 static HRESULT WINAPI
332 IDirectDrawSurface3Impl_ReleaseDC(LPDIRECTDRAWSURFACE3 This
, HDC hDC
)
334 return IDirectDrawSurface7_ReleaseDC(CONVERT(This
), hDC
);
337 static HRESULT WINAPI
338 IDirectDrawSurface3Impl_Restore(LPDIRECTDRAWSURFACE3 This
)
340 return IDirectDrawSurface7_Restore(CONVERT(This
));
343 static HRESULT WINAPI
344 IDirectDrawSurface3Impl_SetClipper(LPDIRECTDRAWSURFACE3 This
,
345 LPDIRECTDRAWCLIPPER pClipper
)
347 return IDirectDrawSurface7_SetClipper(CONVERT(This
), pClipper
);
350 static HRESULT WINAPI
351 IDirectDrawSurface3Impl_SetColorKey(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
,
354 return IDirectDrawSurface7_SetColorKey(CONVERT(This
), dwFlags
, pCKey
);
357 static HRESULT WINAPI
358 IDirectDrawSurface3Impl_SetOverlayPosition(LPDIRECTDRAWSURFACE3 This
, LONG x
,
361 return IDirectDrawSurface7_SetOverlayPosition(CONVERT(This
), x
, y
);
364 static HRESULT WINAPI
365 IDirectDrawSurface3Impl_SetPalette(LPDIRECTDRAWSURFACE3 This
,
366 LPDIRECTDRAWPALETTE pPalette
)
368 return IDirectDrawSurface7_SetPalette(CONVERT(This
), pPalette
);
371 static HRESULT WINAPI
372 IDirectDrawSurface3Impl_Unlock(LPDIRECTDRAWSURFACE3 This
, LPVOID data
)
374 /* data might not be the LPRECT of later versions, so drop it. */
375 return IDirectDrawSurface7_Unlock(CONVERT(This
), NULL
);
378 static HRESULT WINAPI
379 IDirectDrawSurface3Impl_UpdateOverlay(LPDIRECTDRAWSURFACE3 This
, LPRECT prcSrc
,
380 LPDIRECTDRAWSURFACE3 pDstSurf
,
381 LPRECT prcDst
, DWORD dwFlags
,
384 return IDirectDrawSurface7_UpdateOverlay(CONVERT(This
), prcSrc
,
385 CONVERT(pDstSurf
), prcDst
,
389 static HRESULT WINAPI
390 IDirectDrawSurface3Impl_UpdateOverlayDisplay(LPDIRECTDRAWSURFACE3 This
,
393 return IDirectDrawSurface7_UpdateOverlayDisplay(CONVERT(This
), dwFlags
);
396 static HRESULT WINAPI
397 IDirectDrawSurface3Impl_UpdateOverlayZOrder(LPDIRECTDRAWSURFACE3 This
,
399 LPDIRECTDRAWSURFACE3 pSurfReference
)
401 return IDirectDrawSurface7_UpdateOverlayZOrder(CONVERT(This
), dwFlags
,
402 CONVERT(pSurfReference
));
405 static HRESULT WINAPI
406 IDirectDrawSurface3Impl_GetDDInterface(LPDIRECTDRAWSURFACE3 This
, LPVOID
* ppDD
)
408 return IDirectDrawSurface7_GetDDInterface(CONVERT(This
), ppDD
);
411 static HRESULT WINAPI
412 IDirectDrawSurface3Impl_PageLock(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
)
414 return IDirectDrawSurface7_PageLock(CONVERT(This
), dwFlags
);
417 static HRESULT WINAPI
418 IDirectDrawSurface3Impl_PageUnlock(LPDIRECTDRAWSURFACE3 This
, DWORD dwFlags
)
420 return IDirectDrawSurface7_PageUnlock(CONVERT(This
), dwFlags
);
423 static HRESULT WINAPI
424 IDirectDrawSurface3Impl_SetSurfaceDesc(LPDIRECTDRAWSURFACE3 This
,
425 LPDDSURFACEDESC pDDSD
, DWORD dwFlags
)
427 return IDirectDrawSurface7_SetSurfaceDesc(CONVERT(This
),
428 (LPDDSURFACEDESC2
)pDDSD
,
432 const IDirectDrawSurface3Vtbl IDirectDrawSurface3_Vtbl
=
434 IDirectDrawSurface3Impl_QueryInterface
,
435 IDirectDrawSurface3Impl_AddRef
,
436 IDirectDrawSurface3Impl_Release
,
437 IDirectDrawSurface3Impl_AddAttachedSurface
,
438 IDirectDrawSurface3Impl_AddOverlayDirtyRect
,
439 IDirectDrawSurface3Impl_Blt
,
440 IDirectDrawSurface3Impl_BltBatch
,
441 IDirectDrawSurface3Impl_BltFast
,
442 IDirectDrawSurface3Impl_DeleteAttachedSurface
,
443 IDirectDrawSurface3Impl_EnumAttachedSurfaces
,
444 IDirectDrawSurface3Impl_EnumOverlayZOrders
,
445 IDirectDrawSurface3Impl_Flip
,
446 IDirectDrawSurface3Impl_GetAttachedSurface
,
447 IDirectDrawSurface3Impl_GetBltStatus
,
448 IDirectDrawSurface3Impl_GetCaps
,
449 IDirectDrawSurface3Impl_GetClipper
,
450 IDirectDrawSurface3Impl_GetColorKey
,
451 IDirectDrawSurface3Impl_GetDC
,
452 IDirectDrawSurface3Impl_GetFlipStatus
,
453 IDirectDrawSurface3Impl_GetOverlayPosition
,
454 IDirectDrawSurface3Impl_GetPalette
,
455 IDirectDrawSurface3Impl_GetPixelFormat
,
456 IDirectDrawSurface3Impl_GetSurfaceDesc
,
457 IDirectDrawSurface3Impl_Initialize
,
458 IDirectDrawSurface3Impl_IsLost
,
459 IDirectDrawSurface3Impl_Lock
,
460 IDirectDrawSurface3Impl_ReleaseDC
,
461 IDirectDrawSurface3Impl_Restore
,
462 IDirectDrawSurface3Impl_SetClipper
,
463 IDirectDrawSurface3Impl_SetColorKey
,
464 IDirectDrawSurface3Impl_SetOverlayPosition
,
465 IDirectDrawSurface3Impl_SetPalette
,
466 IDirectDrawSurface3Impl_Unlock
,
467 IDirectDrawSurface3Impl_UpdateOverlay
,
468 IDirectDrawSurface3Impl_UpdateOverlayDisplay
,
469 IDirectDrawSurface3Impl_UpdateOverlayZOrder
,
470 IDirectDrawSurface3Impl_GetDDInterface
,
471 IDirectDrawSurface3Impl_PageLock
,
472 IDirectDrawSurface3Impl_PageUnlock
,
473 IDirectDrawSurface3Impl_SetSurfaceDesc