1 /* Direct Draw Thunks and old vtables
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * Taken form wine (wine/dlls/ddraw/ddraw_thunks.c rev 1.2)
21 * with some little changes
29 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This
, REFIID iid
, LPVOID
*ppObj
)
31 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
38 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This
, REFIID iid
, LPVOID
*ppObj
)
40 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
48 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This
, REFIID iid
, LPVOID
*ppObj
)
50 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
57 IDirectDrawImpl_AddRef(LPDIRECTDRAW This
)
59 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl
,
60 IDirectDraw
, IDirectDraw7
,
65 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 This
)
67 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl
,
68 IDirectDraw2
, IDirectDraw7
,
73 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 This
)
75 return IDirectDraw7_AddRef(COM_INTERFACE_CAST(IDirectDrawImpl
,
76 IDirectDraw4
, IDirectDraw7
,
81 IDirectDrawImpl_Release(LPDIRECTDRAW This
)
83 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
84 IDirectDraw
, IDirectDraw7
,
89 IDirectDraw2Impl_Release(LPDIRECTDRAW2 This
)
91 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
92 IDirectDraw2
, IDirectDraw7
,
97 IDirectDraw4Impl_Release(LPDIRECTDRAW4 This
)
99 return IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
100 IDirectDraw4
, IDirectDraw7
,
104 static HRESULT WINAPI
105 IDirectDrawImpl_Compact(LPDIRECTDRAW This
)
107 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
108 IDirectDraw
, IDirectDraw7
,
112 static HRESULT WINAPI
113 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This
)
115 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
116 IDirectDraw2
, IDirectDraw7
,
120 static HRESULT WINAPI
121 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This
)
123 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
124 IDirectDraw4
, IDirectDraw7
,
128 static HRESULT WINAPI
129 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This
, DWORD dwFlags
,
130 LPDIRECTDRAWCLIPPER
*ppClipper
,
133 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
137 dwFlags
, ppClipper
, pUnkOuter
);
140 static HRESULT WINAPI
141 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This
, DWORD dwFlags
,
142 LPDIRECTDRAWCLIPPER
*ppClipper
,
145 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
149 dwFlags
, ppClipper
, pUnkOuter
);
152 static HRESULT WINAPI
153 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This
, DWORD dwFlags
,
154 LPDIRECTDRAWCLIPPER
*ppClipper
,
157 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
161 dwFlags
, ppClipper
, pUnkOuter
);
164 static HRESULT WINAPI
165 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This
, DWORD dwFlags
,
166 LPPALETTEENTRY pEntries
,
167 LPDIRECTDRAWPALETTE
*ppPalette
,
170 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
174 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
177 static HRESULT WINAPI
178 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This
, DWORD dwFlags
,
179 LPPALETTEENTRY pEntries
,
180 LPDIRECTDRAWPALETTE
*ppPalette
,
183 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
187 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
190 static HRESULT WINAPI
191 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This
, DWORD dwFlags
,
192 LPPALETTEENTRY pEntries
,
193 LPDIRECTDRAWPALETTE
*ppPalette
,
196 return IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
200 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
203 static HRESULT WINAPI
204 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This
, LPDDSURFACEDESC pSDesc
,
205 LPDIRECTDRAWSURFACE
*ppSurface
,
208 LPDIRECTDRAWSURFACE7 pSurface7
;
211 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
212 * since the data layout is the same */
213 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
217 (LPDDSURFACEDESC2
)pSDesc
, &pSurface7
, pUnkOuter
);
219 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
220 * IDirectDrawSurface vtable layout at the beginning */
221 *ppSurface
= (LPDIRECTDRAWSURFACE
) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
222 IDirectDrawSurface7
, IDirectDrawSurface3
,
228 static HRESULT WINAPI
229 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This
, LPDDSURFACEDESC pSDesc
,
230 LPDIRECTDRAWSURFACE
*ppSurface
,
233 LPDIRECTDRAWSURFACE7 pSurface7
;
236 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
240 (LPDDSURFACEDESC2
)pSDesc
, &pSurface7
, pUnkOuter
);
242 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
243 * IDirectDrawSurface vtable layout at the beginning */
244 *ppSurface
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
245 IDirectDrawSurface7
, IDirectDrawSurface3
,
251 static HRESULT WINAPI
252 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This
, LPDDSURFACEDESC2 pSDesc
,
253 LPDIRECTDRAWSURFACE4
*ppSurface
,
256 return IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
261 (LPDIRECTDRAWSURFACE7
*)ppSurface
,
265 static HRESULT WINAPI
266 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This
, LPDIRECTDRAWSURFACE pSrc
,
267 LPDIRECTDRAWSURFACE
*ppDst
)
269 LPDIRECTDRAWSURFACE7 pDst7
;
272 hr
= IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
275 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
281 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
282 * IDirectDrawSurface vtable layout at the beginning */
283 *ppDst
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
284 IDirectDrawSurface3
, pDst7
);
289 static HRESULT WINAPI
290 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This
, LPDIRECTDRAWSURFACE pSrc
,
291 LPDIRECTDRAWSURFACE
*ppDst
)
293 LPDIRECTDRAWSURFACE7 pDst7
;
296 hr
= IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
299 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
305 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
306 * IDirectDrawSurface vtable layout at the beginning */
307 *ppDst
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
308 IDirectDrawSurface3
, pDst7
);
313 static HRESULT WINAPI
314 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This
,
315 LPDIRECTDRAWSURFACE4 pSrc
,
316 LPDIRECTDRAWSURFACE4
*ppDst
)
318 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
322 (LPDIRECTDRAWSURFACE7
)pSrc
,
323 (LPDIRECTDRAWSURFACE7
*)ppDst
);
326 struct displaymodescallback_context
328 LPDDENUMMODESCALLBACK func
;
332 static HRESULT CALLBACK
333 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2
, LPVOID context
)
336 struct displaymodescallback_context
*cbcontext
= context
;
338 memcpy(&DDSD
,pDDSD2
,sizeof(DDSD
));
339 DDSD
.dwSize
= sizeof(DDSD
);
341 return cbcontext
->func(&DDSD
, cbcontext
->context
);
344 static HRESULT WINAPI
345 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This
, DWORD dwFlags
,
346 LPDDSURFACEDESC pDDSD
, LPVOID context
,
347 LPDDENUMMODESCALLBACK cb
)
349 struct displaymodescallback_context cbcontext
;
352 cbcontext
.context
= context
;
354 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
358 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
, &cbcontext
,
359 EnumDisplayModesCallbackThunk
);
362 static HRESULT WINAPI
363 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This
, DWORD dwFlags
,
364 LPDDSURFACEDESC pDDSD
, LPVOID context
,
365 LPDDENUMMODESCALLBACK cb
)
367 struct displaymodescallback_context cbcontext
;
370 cbcontext
.context
= context
;
372 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
376 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
, &cbcontext
,
377 EnumDisplayModesCallbackThunk
);
380 static HRESULT WINAPI
381 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This
, DWORD dwFlags
,
382 LPDDSURFACEDESC2 pDDSD
, LPVOID context
,
383 LPDDENUMMODESCALLBACK2 cb
)
385 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
389 dwFlags
, pDDSD
, context
, cb
);
392 struct surfacescallback_context
394 LPDDENUMSURFACESCALLBACK func
;
398 static HRESULT CALLBACK
399 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf
, LPDDSURFACEDESC2 pDDSD
,
402 struct surfacescallback_context
*cbcontext
= context
;
404 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
405 * IDirectDrawSurface vtable layout at the beginning */
406 return cbcontext
->func((LPDIRECTDRAWSURFACE
)
407 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
409 IDirectDrawSurface3
, pSurf
),
410 (LPDDSURFACEDESC
)pDDSD
, cbcontext
->context
);
413 static HRESULT WINAPI
414 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This
, DWORD dwFlags
,
415 LPDDSURFACEDESC pDDSD
, LPVOID context
,
416 LPDDENUMSURFACESCALLBACK cb
)
418 struct surfacescallback_context cbcontext
;
421 cbcontext
.context
= context
;
423 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
426 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
,
427 &cbcontext
, EnumSurfacesCallbackThunk
);
430 static HRESULT WINAPI
431 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This
, DWORD dwFlags
,
432 LPDDSURFACEDESC pDDSD
, LPVOID context
,
433 LPDDENUMSURFACESCALLBACK cb
)
435 struct surfacescallback_context cbcontext
;
438 cbcontext
.context
= context
;
440 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
443 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
,
444 &cbcontext
, EnumSurfacesCallbackThunk
);
447 static HRESULT WINAPI
448 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This
, DWORD dwFlags
,
449 LPDDSURFACEDESC2 pDDSD
, LPVOID context
,
450 LPDDENUMSURFACESCALLBACK2 cb
)
452 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
455 dwFlags
, pDDSD
, context
,
456 (LPDDENUMSURFACESCALLBACK7
)cb
);
459 static HRESULT WINAPI
460 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This
)
462 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
468 static HRESULT WINAPI
469 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This
)
471 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
477 static HRESULT WINAPI
478 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This
)
480 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
486 static HRESULT WINAPI
487 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
489 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
490 IDirectDraw
, IDirectDraw7
,
491 This
), pDDC1
, pDDC2
);
494 static HRESULT WINAPI
495 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
497 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
498 IDirectDraw2
, IDirectDraw7
,
499 This
), pDDC1
, pDDC2
);
502 static HRESULT WINAPI
503 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
505 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
506 IDirectDraw4
, IDirectDraw7
,
507 This
), pDDC1
, pDDC2
);
510 static HRESULT WINAPI
511 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This
, LPDDSURFACEDESC pDDSD
)
513 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
516 (LPDDSURFACEDESC2
)pDDSD
);
519 static HRESULT WINAPI
520 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This
, LPDDSURFACEDESC pDDSD
)
522 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
525 (LPDDSURFACEDESC2
)pDDSD
);
528 static HRESULT WINAPI
529 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This
, LPDDSURFACEDESC2 pDDSD
)
531 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
537 static HRESULT WINAPI
538 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This
, LPDWORD lpNumCodes
,
541 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
545 lpNumCodes
, lpCodes
);
548 static HRESULT WINAPI
549 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This
, LPDWORD lpNumCodes
,
552 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
556 lpNumCodes
, lpCodes
);
559 static HRESULT WINAPI
560 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This
, LPDWORD lpNumCodes
,
563 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
567 lpNumCodes
, lpCodes
);
570 static HRESULT WINAPI
571 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This
, LPDIRECTDRAWSURFACE
*ppSurf
)
573 LPDIRECTDRAWSURFACE7 pSurf7
;
576 hr
= IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
581 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
582 * IDirectDrawSurface vtable layout at the beginning */
583 *ppSurf
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
584 IDirectDrawSurface3
, pSurf7
);
589 static HRESULT WINAPI
590 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This
, LPDIRECTDRAWSURFACE
*ppSurf
)
592 LPDIRECTDRAWSURFACE7 pSurf7
;
595 hr
= IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
600 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
601 * IDirectDrawSurface vtable layout at the beginning */
602 *ppSurf
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
603 IDirectDrawSurface3
, pSurf7
);
608 static HRESULT WINAPI
609 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This
,
610 LPDIRECTDRAWSURFACE4
*ppSurf
)
612 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
616 (LPDIRECTDRAWSURFACE7
*)ppSurf
);
619 static HRESULT WINAPI
620 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This
, LPDWORD pdwFreq
)
622 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
629 static HRESULT WINAPI
630 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This
, LPDWORD pdwFreq
)
632 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
639 static HRESULT WINAPI
640 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This
, LPDWORD pdwFreq
)
642 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
649 static HRESULT WINAPI
650 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This
, LPDWORD pdwLine
)
652 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
658 static HRESULT WINAPI
659 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This
, LPDWORD pdwLine
)
661 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
667 static HRESULT WINAPI
668 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This
, LPDWORD pdwLine
)
670 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
676 static HRESULT WINAPI
677 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This
, LPBOOL lpbIsInVB
)
679 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
686 static HRESULT WINAPI
687 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This
, LPBOOL lpbIsInVB
)
689 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
696 static HRESULT WINAPI
697 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This
, LPBOOL lpbIsInVB
)
699 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
706 static HRESULT WINAPI
707 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface
, LPGUID pGUID
)
709 ICOM_THIS_FROM(IDirectDrawImpl
, IDirectDraw
, iface
);
712 ret_value
= IDirectDraw7_Initialize(ICOM_INTERFACE(This
, IDirectDraw7
), pGUID
);
714 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
715 //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
720 static HRESULT WINAPI
721 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface
, LPGUID pGUID
)
723 ICOM_THIS_FROM(IDirectDrawImpl
, IDirectDraw2
, iface
);
726 ret_value
= IDirectDraw7_Initialize(ICOM_INTERFACE(This
, IDirectDraw7
), pGUID
);
728 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
729 //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
734 static HRESULT WINAPI
735 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface
, LPGUID pGUID
)
737 ICOM_THIS_FROM(IDirectDrawImpl
, IDirectDraw4
, iface
);
740 ret_value
= IDirectDraw7_Initialize(ICOM_INTERFACE(This
, IDirectDraw7
), pGUID
);
742 /* Overwrite the falsely set 'DIRECTDRAW7' flag */
743 //This->local.dwLocalFlags &= ~DDRAWILCL_DIRECTDRAW7;
749 static HRESULT WINAPI
750 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This
)
752 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
758 static HRESULT WINAPI
759 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This
)
761 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
767 static HRESULT WINAPI
768 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This
)
770 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
776 static HRESULT WINAPI
777 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This
, HWND hWnd
,
780 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
787 static HRESULT WINAPI
788 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This
, HWND hWnd
,
791 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
798 static HRESULT WINAPI
799 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This
, HWND hWnd
,
802 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
809 static HRESULT WINAPI
810 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This
, DWORD a
, DWORD b
, DWORD c
)
812 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
819 static HRESULT WINAPI
820 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This
, DWORD a
, DWORD b
, DWORD c
,
823 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
830 static HRESULT WINAPI
831 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This
, DWORD a
, DWORD b
, DWORD c
,
834 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
841 static HRESULT WINAPI
842 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This
, DWORD dwFlags
,
845 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
852 static HRESULT WINAPI
853 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This
, DWORD dwFlags
,
856 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
863 static HRESULT WINAPI
864 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This
, DWORD dwFlags
,
867 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
874 void DDRAW_Convert_DDSCAPS_1_To_2(const DDSCAPS
* pIn
, DDSCAPS2
* pOut
)
876 /* 2 adds three additional caps fields to the end. Both versions
877 * are unversioned. */
878 pOut
->dwCaps
= pIn
->dwCaps
;
884 static HRESULT WINAPI
885 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This
, LPDDSCAPS pCaps
,
886 LPDWORD pdwTotal
, LPDWORD pdwFree
)
889 DDRAW_Convert_DDSCAPS_1_To_2(pCaps
, &Caps2
);
891 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl
,
895 &Caps2
, pdwTotal
, pdwFree
);
898 static HRESULT WINAPI
899 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This
, LPDDSCAPS2 pCaps
,
900 LPDWORD pdwTotal
, LPDWORD pdwFree
)
902 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl
,
906 pCaps
, pdwTotal
, pdwFree
);
909 static HRESULT WINAPI
910 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This
, HDC hDC
,
911 LPDIRECTDRAWSURFACE4
*pSurf
)
913 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl
,
917 hDC
, (LPDIRECTDRAWSURFACE7
*)pSurf
);
920 static HRESULT WINAPI
921 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This
)
923 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
929 static HRESULT WINAPI
930 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This
)
932 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
938 void DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(const DDDEVICEIDENTIFIER2
* pIn
,
939 DDDEVICEIDENTIFIER
* pOut
)
941 /* 2 adds a dwWHQLLevel field to the end. Both structures are
943 memcpy(pOut
, pIn
, sizeof(*pOut
));
946 static HRESULT WINAPI
947 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This
,
948 LPDDDEVICEIDENTIFIER pDDDI
, DWORD dwFlags
)
950 DDDEVICEIDENTIFIER2 DDDI2
;
953 hr
= IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl
,
959 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2
, pDDDI
);
964 IDirectDrawVtbl DDRAW_IDirectDraw_VTable
=
966 IDirectDrawImpl_QueryInterface
,
967 IDirectDrawImpl_AddRef
,
968 IDirectDrawImpl_Release
,
969 IDirectDrawImpl_Compact
,
970 IDirectDrawImpl_CreateClipper
,
971 IDirectDrawImpl_CreatePalette
,
972 IDirectDrawImpl_CreateSurface
,
973 IDirectDrawImpl_DuplicateSurface
,
974 IDirectDrawImpl_EnumDisplayModes
,
975 IDirectDrawImpl_EnumSurfaces
,
976 IDirectDrawImpl_FlipToGDISurface
,
977 IDirectDrawImpl_GetCaps
,
978 IDirectDrawImpl_GetDisplayMode
,
979 IDirectDrawImpl_GetFourCCCodes
,
980 IDirectDrawImpl_GetGDISurface
,
981 IDirectDrawImpl_GetMonitorFrequency
,
982 IDirectDrawImpl_GetScanLine
,
983 IDirectDrawImpl_GetVerticalBlankStatus
,
984 IDirectDrawImpl_Initialize
,
985 IDirectDrawImpl_RestoreDisplayMode
,
986 IDirectDrawImpl_SetCooperativeLevel
,
987 IDirectDrawImpl_SetDisplayMode
,
988 IDirectDrawImpl_WaitForVerticalBlank
,
991 IDirectDraw2Vtbl DDRAW_IDirectDraw2_VTable
=
993 IDirectDraw2Impl_QueryInterface
,
994 IDirectDraw2Impl_AddRef
,
995 IDirectDraw2Impl_Release
,
996 IDirectDraw2Impl_Compact
,
997 IDirectDraw2Impl_CreateClipper
,
998 IDirectDraw2Impl_CreatePalette
,
999 IDirectDraw2Impl_CreateSurface
,
1000 IDirectDraw2Impl_DuplicateSurface
,
1001 IDirectDraw2Impl_EnumDisplayModes
,
1002 IDirectDraw2Impl_EnumSurfaces
,
1003 IDirectDraw2Impl_FlipToGDISurface
,
1004 IDirectDraw2Impl_GetCaps
,
1005 IDirectDraw2Impl_GetDisplayMode
,
1006 IDirectDraw2Impl_GetFourCCCodes
,
1007 IDirectDraw2Impl_GetGDISurface
,
1008 IDirectDraw2Impl_GetMonitorFrequency
,
1009 IDirectDraw2Impl_GetScanLine
,
1010 IDirectDraw2Impl_GetVerticalBlankStatus
,
1011 IDirectDraw2Impl_Initialize
,
1012 IDirectDraw2Impl_RestoreDisplayMode
,
1013 IDirectDraw2Impl_SetCooperativeLevel
,
1014 IDirectDraw2Impl_SetDisplayMode
,
1015 IDirectDraw2Impl_WaitForVerticalBlank
,
1016 IDirectDraw2Impl_GetAvailableVidMem
1019 IDirectDraw4Vtbl DDRAW_IDirectDraw4_VTable
=
1021 IDirectDraw4Impl_QueryInterface
,
1022 IDirectDraw4Impl_AddRef
,
1023 IDirectDraw4Impl_Release
,
1024 IDirectDraw4Impl_Compact
,
1025 IDirectDraw4Impl_CreateClipper
,
1026 IDirectDraw4Impl_CreatePalette
,
1027 IDirectDraw4Impl_CreateSurface
,
1028 IDirectDraw4Impl_DuplicateSurface
,
1029 IDirectDraw4Impl_EnumDisplayModes
,
1030 IDirectDraw4Impl_EnumSurfaces
,
1031 IDirectDraw4Impl_FlipToGDISurface
,
1032 IDirectDraw4Impl_GetCaps
,
1033 IDirectDraw4Impl_GetDisplayMode
,
1034 IDirectDraw4Impl_GetFourCCCodes
,
1035 IDirectDraw4Impl_GetGDISurface
,
1036 IDirectDraw4Impl_GetMonitorFrequency
,
1037 IDirectDraw4Impl_GetScanLine
,
1038 IDirectDraw4Impl_GetVerticalBlankStatus
,
1039 IDirectDraw4Impl_Initialize
,
1040 IDirectDraw4Impl_RestoreDisplayMode
,
1041 IDirectDraw4Impl_SetCooperativeLevel
,
1042 IDirectDraw4Impl_SetDisplayMode
,
1043 IDirectDraw4Impl_WaitForVerticalBlank
,
1044 IDirectDraw4Impl_GetAvailableVidMem
,
1045 IDirectDraw4Impl_GetSurfaceFromDC
,
1046 IDirectDraw4Impl_RestoreAllSurfaces
,
1047 IDirectDraw4Impl_TestCooperativeLevel
,
1048 IDirectDraw4Impl_GetDeviceIdentifier