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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 #include "wine/port.h"
28 #define NONAMELESSUNION
34 #include "wine/exception.h"
39 #include "ddraw_private.h"
40 #include "wine/debug.h"
42 WINE_DEFAULT_DEBUG_CHANNEL(ddraw_thunk
);
43 WINE_DECLARE_DEBUG_CHANNEL(ddraw
);
45 static inline IDirectDrawImpl
*ddraw_from_ddraw1(IDirectDraw
*iface
)
47 return (IDirectDrawImpl
*)((char*)iface
- FIELD_OFFSET(IDirectDrawImpl
, IDirectDraw_vtbl
));
50 static inline IDirectDrawImpl
*ddraw_from_ddraw2(IDirectDraw2
*iface
)
52 return (IDirectDrawImpl
*)((char*)iface
- FIELD_OFFSET(IDirectDrawImpl
, IDirectDraw2_vtbl
));
55 static inline IDirectDrawImpl
*ddraw_from_ddraw3(IDirectDraw3
*iface
)
57 return (IDirectDrawImpl
*)((char*)iface
- FIELD_OFFSET(IDirectDrawImpl
, IDirectDraw3_vtbl
));
60 static inline IDirectDrawImpl
*ddraw_from_ddraw4(IDirectDraw4
*iface
)
62 return (IDirectDrawImpl
*)((char*)iface
- FIELD_OFFSET(IDirectDrawImpl
, IDirectDraw4_vtbl
));
66 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This
, REFIID iid
, LPVOID
*ppObj
)
68 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
75 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This
, REFIID iid
, LPVOID
*ppObj
)
77 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
84 IDirectDraw3Impl_QueryInterface(LPDIRECTDRAW3 This
, REFIID iid
, LPVOID
*ppObj
)
86 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
93 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This
, REFIID iid
, LPVOID
*ppObj
)
95 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl
,
102 IDirectDrawImpl_AddRef(LPDIRECTDRAW iface
)
104 IDirectDrawImpl
*This
= ddraw_from_ddraw1(iface
);
105 ULONG ref
= InterlockedIncrement(&This
->ref1
);
107 TRACE("(%p) : incrementing IDirectDraw refcount from %u.\n", This
, ref
-1);
109 if(ref
== 1) InterlockedIncrement(&This
->numIfaces
);
115 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface
)
117 IDirectDrawImpl
*This
= ddraw_from_ddraw2(iface
);
118 ULONG ref
= InterlockedIncrement(&This
->ref2
);
120 TRACE("(%p) : incrementing IDirectDraw2 refcount from %u.\n", This
, ref
-1);
122 if(ref
== 1) InterlockedIncrement(&This
->numIfaces
);
128 IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface
)
130 IDirectDrawImpl
*This
= ddraw_from_ddraw3(iface
);
131 ULONG ref
= InterlockedIncrement(&This
->ref3
);
133 TRACE("(%p) : incrementing IDirectDraw3 refcount from %u.\n", This
, ref
-1);
135 if(ref
== 1) InterlockedIncrement(&This
->numIfaces
);
141 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 iface
)
143 IDirectDrawImpl
*This
= ddraw_from_ddraw4(iface
);
144 ULONG ref
= InterlockedIncrement(&This
->ref4
);
146 TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This
, ref
-1);
148 if(ref
== 1) InterlockedIncrement(&This
->numIfaces
);
154 IDirectDrawImpl_Release(LPDIRECTDRAW iface
)
156 IDirectDrawImpl
*This
= ddraw_from_ddraw1(iface
);
157 ULONG ref
= InterlockedDecrement(&This
->ref1
);
159 TRACE_(ddraw
)("(%p)->() decrementing IDirectDraw refcount from %u.\n", This
, ref
+1);
163 ULONG ifacecount
= InterlockedDecrement(&This
->numIfaces
);
164 if(ifacecount
== 0) IDirectDrawImpl_Destroy(This
);
171 IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface
)
173 IDirectDrawImpl
*This
= ddraw_from_ddraw2(iface
);
174 ULONG ref
= InterlockedDecrement(&This
->ref2
);
176 TRACE_(ddraw
)("(%p)->() decrementing IDirectDraw2 refcount from %u.\n", This
, ref
+1);
180 ULONG ifacecount
= InterlockedDecrement(&This
->numIfaces
);
181 if(ifacecount
== 0) IDirectDrawImpl_Destroy(This
);
188 IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface
)
190 IDirectDrawImpl
*This
= ddraw_from_ddraw3(iface
);
191 ULONG ref
= InterlockedDecrement(&This
->ref3
);
193 TRACE_(ddraw
)("(%p)->() decrementing IDirectDraw3 refcount from %u.\n", This
, ref
+1);
197 ULONG ifacecount
= InterlockedDecrement(&This
->numIfaces
);
198 if(ifacecount
== 0) IDirectDrawImpl_Destroy(This
);
205 IDirectDraw4Impl_Release(LPDIRECTDRAW4 iface
)
207 IDirectDrawImpl
*This
= ddraw_from_ddraw4(iface
);
208 ULONG ref
= InterlockedDecrement(&This
->ref4
);
210 TRACE_(ddraw
)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This
, ref
+1);
214 ULONG ifacecount
= InterlockedDecrement(&This
->numIfaces
);
215 if(ifacecount
== 0) IDirectDrawImpl_Destroy(This
);
221 static HRESULT WINAPI
222 IDirectDrawImpl_Compact(LPDIRECTDRAW This
)
224 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
225 IDirectDraw
, IDirectDraw7
,
229 static HRESULT WINAPI
230 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This
)
232 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
233 IDirectDraw2
, IDirectDraw7
,
237 static HRESULT WINAPI
238 IDirectDraw3Impl_Compact(LPDIRECTDRAW3 This
)
240 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
241 IDirectDraw3
, IDirectDraw7
,
245 static HRESULT WINAPI
246 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This
)
248 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl
,
249 IDirectDraw4
, IDirectDraw7
,
253 static HRESULT WINAPI
254 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This
, DWORD dwFlags
,
255 LPDIRECTDRAWCLIPPER
*ppClipper
,
258 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
262 dwFlags
, ppClipper
, pUnkOuter
);
265 static HRESULT WINAPI
266 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This
, DWORD dwFlags
,
267 LPDIRECTDRAWCLIPPER
*ppClipper
,
270 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
274 dwFlags
, ppClipper
, pUnkOuter
);
277 static HRESULT WINAPI
278 IDirectDraw3Impl_CreateClipper(LPDIRECTDRAW3 This
, DWORD dwFlags
,
279 LPDIRECTDRAWCLIPPER
*ppClipper
,
282 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
286 dwFlags
, ppClipper
, pUnkOuter
);
289 static HRESULT WINAPI
290 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This
, DWORD dwFlags
,
291 LPDIRECTDRAWCLIPPER
*ppClipper
,
294 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl
,
298 dwFlags
, ppClipper
, pUnkOuter
);
301 static HRESULT WINAPI
302 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This
, DWORD dwFlags
,
303 LPPALETTEENTRY pEntries
,
304 LPDIRECTDRAWPALETTE
*ppPalette
,
308 hr
= IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
312 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
313 if(SUCCEEDED(hr
) && *ppPalette
)
315 IDirectDrawPaletteImpl
*impl
= ICOM_OBJECT(IDirectDrawPaletteImpl
, IDirectDrawPalette
, *ppPalette
);
316 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
320 impl
->ifaceToRelease
= NULL
;
326 static HRESULT WINAPI
327 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This
, DWORD dwFlags
,
328 LPPALETTEENTRY pEntries
,
329 LPDIRECTDRAWPALETTE
*ppPalette
,
333 hr
= IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
337 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
338 if(SUCCEEDED(hr
) && *ppPalette
)
340 IDirectDrawPaletteImpl
*impl
= ICOM_OBJECT(IDirectDrawPaletteImpl
, IDirectDrawPalette
, *ppPalette
);
341 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
345 impl
->ifaceToRelease
= NULL
;
350 static HRESULT WINAPI
351 IDirectDraw3Impl_CreatePalette(LPDIRECTDRAW3 This
, DWORD dwFlags
,
352 LPPALETTEENTRY pEntries
,
353 LPDIRECTDRAWPALETTE
*ppPalette
,
357 hr
= IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
361 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
362 if(SUCCEEDED(hr
) && *ppPalette
)
364 IDirectDrawPaletteImpl
*impl
= ICOM_OBJECT(IDirectDrawPaletteImpl
, IDirectDrawPalette
, *ppPalette
);
365 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
369 IDirectDraw4_AddRef(This
);
370 impl
->ifaceToRelease
= (IUnknown
*) This
;
375 static HRESULT WINAPI
376 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This
, DWORD dwFlags
,
377 LPPALETTEENTRY pEntries
,
378 LPDIRECTDRAWPALETTE
*ppPalette
,
382 hr
= IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl
,
386 dwFlags
, pEntries
, ppPalette
, pUnkOuter
);
387 if(SUCCEEDED(hr
) && *ppPalette
)
389 IDirectDrawPaletteImpl
*impl
= ICOM_OBJECT(IDirectDrawPaletteImpl
, IDirectDrawPalette
, *ppPalette
);
390 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
394 IDirectDraw4_AddRef(This
);
395 impl
->ifaceToRelease
= (IUnknown
*) This
;
400 /* Must set all attached surfaces (e.g. mipmaps) versions as well */
401 static void set_surf_version(IDirectDrawSurfaceImpl
*surf
, int version
)
404 TRACE("%p->version(%d) = %d\n", surf
, surf
->version
, version
);
405 surf
->version
= version
;
406 for(i
= 0; i
< MAX_COMPLEX_ATTACHED
; i
++)
408 if(!surf
->complex_array
[i
]) break;
409 set_surf_version(surf
->complex_array
[i
], version
);
411 while( (surf
= surf
->next_attached
) )
413 set_surf_version(surf
, version
);
417 static HRESULT WINAPI
418 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This
, LPDDSURFACEDESC pSDesc
,
419 LPDIRECTDRAWSURFACE
*ppSurface
,
422 LPDIRECTDRAWSURFACE7 pSurface7
;
423 IDirectDrawSurfaceImpl
*impl
;
426 /* Remove front buffer flag, this causes failure in v7, and its added to normal
429 pSDesc
->ddsCaps
.dwCaps
&= ~DDSCAPS_FRONTBUFFER
;
430 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
431 * since the data layout is the same */
432 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
436 (LPDDSURFACEDESC2
)pSDesc
, &pSurface7
, pUnkOuter
);
438 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
439 * IDirectDrawSurface vtable layout at the beginning */
440 *ppSurface
= (LPDIRECTDRAWSURFACE
) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
441 IDirectDrawSurface7
, IDirectDrawSurface3
,
444 impl
= ICOM_OBJECT(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
, pSurface7
);
445 if(SUCCEEDED(hr
) && impl
)
447 set_surf_version(impl
, 1);
448 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
452 impl
->ifaceToRelease
= NULL
;
458 static HRESULT WINAPI
459 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This
, LPDDSURFACEDESC pSDesc
,
460 LPDIRECTDRAWSURFACE
*ppSurface
,
463 LPDIRECTDRAWSURFACE7 pSurface7
;
464 IDirectDrawSurfaceImpl
*impl
;
467 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
471 (LPDDSURFACEDESC2
)pSDesc
, &pSurface7
, pUnkOuter
);
473 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
474 * IDirectDrawSurface vtable layout at the beginning */
475 *ppSurface
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
476 IDirectDrawSurface7
, IDirectDrawSurface3
,
479 impl
= ICOM_OBJECT(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
, pSurface7
);
480 if(SUCCEEDED(hr
) && impl
)
482 set_surf_version(impl
, 2);
483 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
487 impl
->ifaceToRelease
= NULL
;
493 static HRESULT WINAPI
494 IDirectDraw3Impl_CreateSurface(LPDIRECTDRAW3 This
, LPDDSURFACEDESC pSDesc
,
495 LPDIRECTDRAWSURFACE
*ppSurface
,
498 LPDIRECTDRAWSURFACE7 pSurface7
;
499 IDirectDrawSurfaceImpl
*impl
;
502 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
506 (LPDDSURFACEDESC2
)pSDesc
, &pSurface7
, pUnkOuter
);
508 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
509 * IDirectDrawSurface vtable layout at the beginning */
510 *ppSurface
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
511 IDirectDrawSurface7
, IDirectDrawSurface3
,
514 impl
= ICOM_OBJECT(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
, pSurface7
);
515 if(SUCCEEDED(hr
) && impl
)
517 set_surf_version(impl
, 3);
518 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
522 IDirectDraw3_AddRef(This
);
523 impl
->ifaceToRelease
= (IUnknown
*) This
;
529 static HRESULT WINAPI
530 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This
, LPDDSURFACEDESC2 pSDesc
,
531 LPDIRECTDRAWSURFACE4
*ppSurface
,
535 IDirectDrawSurfaceImpl
*impl
;
537 hr
= IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
542 (LPDIRECTDRAWSURFACE7
*)ppSurface
,
544 impl
= ICOM_OBJECT(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
, *ppSurface
);
545 if(SUCCEEDED(hr
) && impl
)
547 set_surf_version(impl
, 4);
548 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl
,
552 IDirectDraw4_AddRef(This
);
553 impl
->ifaceToRelease
= (IUnknown
*) This
;
558 static HRESULT WINAPI
559 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This
, LPDIRECTDRAWSURFACE pSrc
,
560 LPDIRECTDRAWSURFACE
*ppDst
)
562 LPDIRECTDRAWSURFACE7 pDst7
;
565 hr
= IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
568 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
574 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
575 * IDirectDrawSurface vtable layout at the beginning */
576 *ppDst
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
577 IDirectDrawSurface3
, pDst7
);
582 static HRESULT WINAPI
583 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This
, LPDIRECTDRAWSURFACE pSrc
,
584 LPDIRECTDRAWSURFACE
*ppDst
)
586 LPDIRECTDRAWSURFACE7 pDst7
;
589 hr
= IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
592 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
598 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
599 * IDirectDrawSurface vtable layout at the beginning */
600 *ppDst
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
601 IDirectDrawSurface3
, pDst7
);
606 static HRESULT WINAPI
607 IDirectDraw3Impl_DuplicateSurface(LPDIRECTDRAW3 This
, LPDIRECTDRAWSURFACE pSrc
,
608 LPDIRECTDRAWSURFACE
*ppDst
)
610 LPDIRECTDRAWSURFACE7 pDst7
;
613 hr
= IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
616 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
622 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
623 * IDirectDrawSurface vtable layout at the beginning */
624 *ppDst
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
625 IDirectDrawSurface3
, pDst7
);
630 static HRESULT WINAPI
631 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This
,
632 LPDIRECTDRAWSURFACE4 pSrc
,
633 LPDIRECTDRAWSURFACE4
*ppDst
)
635 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
639 (LPDIRECTDRAWSURFACE7
)pSrc
,
640 (LPDIRECTDRAWSURFACE7
*)ppDst
);
643 struct displaymodescallback_context
645 LPDDENUMMODESCALLBACK func
;
649 static HRESULT CALLBACK
650 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2
, LPVOID context
)
653 struct displaymodescallback_context
*cbcontext
= context
;
655 memcpy(&DDSD
,pDDSD2
,sizeof(DDSD
));
656 DDSD
.dwSize
= sizeof(DDSD
);
658 return cbcontext
->func(&DDSD
, cbcontext
->context
);
661 static HRESULT WINAPI
662 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This
, DWORD dwFlags
,
663 LPDDSURFACEDESC pDDSD
, LPVOID context
,
664 LPDDENUMMODESCALLBACK cb
)
666 struct displaymodescallback_context cbcontext
;
669 cbcontext
.context
= context
;
671 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
675 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
, &cbcontext
,
676 EnumDisplayModesCallbackThunk
);
679 static HRESULT WINAPI
680 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This
, DWORD dwFlags
,
681 LPDDSURFACEDESC pDDSD
, LPVOID context
,
682 LPDDENUMMODESCALLBACK cb
)
684 struct displaymodescallback_context cbcontext
;
687 cbcontext
.context
= context
;
689 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
693 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
, &cbcontext
,
694 EnumDisplayModesCallbackThunk
);
697 static HRESULT WINAPI
698 IDirectDraw3Impl_EnumDisplayModes(LPDIRECTDRAW3 This
, DWORD dwFlags
,
699 LPDDSURFACEDESC pDDSD
, LPVOID context
,
700 LPDDENUMMODESCALLBACK cb
)
702 struct displaymodescallback_context cbcontext
;
705 cbcontext
.context
= context
;
707 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
711 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
, &cbcontext
,
712 EnumDisplayModesCallbackThunk
);
715 static HRESULT WINAPI
716 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This
, DWORD dwFlags
,
717 LPDDSURFACEDESC2 pDDSD
, LPVOID context
,
718 LPDDENUMMODESCALLBACK2 cb
)
720 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl
,
724 dwFlags
, pDDSD
, context
, cb
);
727 struct surfacescallback_context
729 LPDDENUMSURFACESCALLBACK func
;
733 static HRESULT CALLBACK
734 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf
, LPDDSURFACEDESC2 pDDSD
,
737 struct surfacescallback_context
*cbcontext
= context
;
739 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
740 * IDirectDrawSurface vtable layout at the beginning */
741 return cbcontext
->func((LPDIRECTDRAWSURFACE
)
742 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
,
744 IDirectDrawSurface3
, pSurf
),
745 (LPDDSURFACEDESC
)pDDSD
, cbcontext
->context
);
748 static HRESULT WINAPI
749 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This
, DWORD dwFlags
,
750 LPDDSURFACEDESC pDDSD
, LPVOID context
,
751 LPDDENUMSURFACESCALLBACK cb
)
753 struct surfacescallback_context cbcontext
;
756 cbcontext
.context
= context
;
758 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
761 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
,
762 &cbcontext
, EnumSurfacesCallbackThunk
);
765 static HRESULT WINAPI
766 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This
, DWORD dwFlags
,
767 LPDDSURFACEDESC pDDSD
, LPVOID context
,
768 LPDDENUMSURFACESCALLBACK cb
)
770 struct surfacescallback_context cbcontext
;
773 cbcontext
.context
= context
;
775 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
778 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
,
779 &cbcontext
, EnumSurfacesCallbackThunk
);
782 static HRESULT WINAPI
783 IDirectDraw3Impl_EnumSurfaces(LPDIRECTDRAW3 This
, DWORD dwFlags
,
784 LPDDSURFACEDESC pDDSD
, LPVOID context
,
785 LPDDENUMSURFACESCALLBACK cb
)
787 struct surfacescallback_context cbcontext
;
790 cbcontext
.context
= context
;
792 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
795 dwFlags
, (LPDDSURFACEDESC2
)pDDSD
,
796 &cbcontext
, EnumSurfacesCallbackThunk
);
799 static HRESULT WINAPI
800 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This
, DWORD dwFlags
,
801 LPDDSURFACEDESC2 pDDSD
, LPVOID context
,
802 LPDDENUMSURFACESCALLBACK2 cb
)
804 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
807 dwFlags
, pDDSD
, context
,
808 (LPDDENUMSURFACESCALLBACK7
)cb
);
811 static HRESULT WINAPI
812 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This
)
814 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
820 static HRESULT WINAPI
821 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This
)
823 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
829 static HRESULT WINAPI
830 IDirectDraw3Impl_FlipToGDISurface(LPDIRECTDRAW3 This
)
832 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
838 static HRESULT WINAPI
839 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This
)
841 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
847 static HRESULT WINAPI
848 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
850 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
851 IDirectDraw
, IDirectDraw7
,
852 This
), pDDC1
, pDDC2
);
855 static HRESULT WINAPI
856 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
858 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
859 IDirectDraw2
, IDirectDraw7
,
860 This
), pDDC1
, pDDC2
);
863 static HRESULT WINAPI
864 IDirectDraw3Impl_GetCaps(LPDIRECTDRAW3 This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
866 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
867 IDirectDraw3
, IDirectDraw7
,
868 This
), pDDC1
, pDDC2
);
871 static HRESULT WINAPI
872 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This
, LPDDCAPS pDDC1
, LPDDCAPS pDDC2
)
874 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl
,
875 IDirectDraw4
, IDirectDraw7
,
876 This
), pDDC1
, pDDC2
);
879 static HRESULT WINAPI
880 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This
, LPDDSURFACEDESC pDDSD
)
882 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
885 (LPDDSURFACEDESC2
)pDDSD
);
888 static HRESULT WINAPI
889 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This
, LPDDSURFACEDESC pDDSD
)
891 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
894 (LPDDSURFACEDESC2
)pDDSD
);
897 static HRESULT WINAPI
898 IDirectDraw3Impl_GetDisplayMode(LPDIRECTDRAW3 This
, LPDDSURFACEDESC pDDSD
)
900 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
903 (LPDDSURFACEDESC2
)pDDSD
);
906 static HRESULT WINAPI
907 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This
, LPDDSURFACEDESC2 pDDSD
)
909 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
915 static HRESULT WINAPI
916 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This
, LPDWORD lpNumCodes
,
919 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
923 lpNumCodes
, lpCodes
);
926 static HRESULT WINAPI
927 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This
, LPDWORD lpNumCodes
,
930 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
934 lpNumCodes
, lpCodes
);
937 static HRESULT WINAPI
938 IDirectDraw3Impl_GetFourCCCodes(LPDIRECTDRAW3 This
, LPDWORD lpNumCodes
,
941 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
945 lpNumCodes
, lpCodes
);
948 static HRESULT WINAPI
949 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This
, LPDWORD lpNumCodes
,
952 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl
,
956 lpNumCodes
, lpCodes
);
959 static HRESULT WINAPI
960 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This
, LPDIRECTDRAWSURFACE
*ppSurf
)
962 LPDIRECTDRAWSURFACE7 pSurf7
;
965 hr
= IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
970 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
971 * IDirectDrawSurface vtable layout at the beginning */
972 *ppSurf
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
973 IDirectDrawSurface3
, pSurf7
);
978 static HRESULT WINAPI
979 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This
, LPDIRECTDRAWSURFACE
*ppSurf
)
981 LPDIRECTDRAWSURFACE7 pSurf7
;
984 hr
= IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
989 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
990 * IDirectDrawSurface vtable layout at the beginning */
991 *ppSurf
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
992 IDirectDrawSurface3
, pSurf7
);
997 static HRESULT WINAPI
998 IDirectDraw3Impl_GetGDISurface(LPDIRECTDRAW3 This
, LPDIRECTDRAWSURFACE
*ppSurf
)
1000 LPDIRECTDRAWSURFACE7 pSurf7
;
1003 hr
= IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
1008 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
1009 * IDirectDrawSurface vtable layout at the beginning */
1010 *ppSurf
= (LPDIRECTDRAWSURFACE
)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl
, IDirectDrawSurface7
,
1011 IDirectDrawSurface3
, pSurf7
);
1016 static HRESULT WINAPI
1017 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This
,
1018 LPDIRECTDRAWSURFACE4
*ppSurf
)
1020 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl
,
1024 (LPDIRECTDRAWSURFACE7
*)ppSurf
);
1027 static HRESULT WINAPI
1028 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This
, LPDWORD pdwFreq
)
1030 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
1037 static HRESULT WINAPI
1038 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This
, LPDWORD pdwFreq
)
1040 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
1047 static HRESULT WINAPI
1048 IDirectDraw3Impl_GetMonitorFrequency(LPDIRECTDRAW3 This
, LPDWORD pdwFreq
)
1050 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
1057 static HRESULT WINAPI
1058 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This
, LPDWORD pdwFreq
)
1060 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl
,
1067 static HRESULT WINAPI
1068 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This
, LPDWORD pdwLine
)
1070 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
1076 static HRESULT WINAPI
1077 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This
, LPDWORD pdwLine
)
1079 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
1085 static HRESULT WINAPI
1086 IDirectDraw3Impl_GetScanLine(LPDIRECTDRAW3 This
, LPDWORD pdwLine
)
1088 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
1094 static HRESULT WINAPI
1095 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This
, LPDWORD pdwLine
)
1097 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl
,
1103 static HRESULT WINAPI
1104 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This
, LPBOOL lpbIsInVB
)
1106 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
1113 static HRESULT WINAPI
1114 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This
, LPBOOL lpbIsInVB
)
1116 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
1123 static HRESULT WINAPI
1124 IDirectDraw3Impl_GetVerticalBlankStatus(LPDIRECTDRAW3 This
, LPBOOL lpbIsInVB
)
1126 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
1133 static HRESULT WINAPI
1134 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This
, LPBOOL lpbIsInVB
)
1136 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl
,
1143 static HRESULT WINAPI
1144 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface
, LPGUID pGUID
)
1146 IDirectDrawImpl
*This
= ddraw_from_ddraw1(iface
);
1149 ret_value
= IDirectDraw7_Initialize((IDirectDraw7
*)This
, pGUID
);
1154 static HRESULT WINAPI
1155 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface
, LPGUID pGUID
)
1157 IDirectDrawImpl
*This
= ddraw_from_ddraw2(iface
);
1160 ret_value
= IDirectDraw7_Initialize((IDirectDraw7
*)This
, pGUID
);
1165 static HRESULT WINAPI
1166 IDirectDraw3Impl_Initialize(LPDIRECTDRAW3 iface
, LPGUID pGUID
)
1168 IDirectDrawImpl
*This
= ddraw_from_ddraw3(iface
);
1171 ret_value
= IDirectDraw7_Initialize((IDirectDraw7
*)This
, pGUID
);
1176 static HRESULT WINAPI
1177 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface
, LPGUID pGUID
)
1179 IDirectDrawImpl
*This
= ddraw_from_ddraw4(iface
);
1182 ret_value
= IDirectDraw7_Initialize((IDirectDraw7
*)This
, pGUID
);
1188 static HRESULT WINAPI
1189 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This
)
1191 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1197 static HRESULT WINAPI
1198 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This
)
1200 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1206 static HRESULT WINAPI
1207 IDirectDraw3Impl_RestoreDisplayMode(LPDIRECTDRAW3 This
)
1209 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1215 static HRESULT WINAPI
1216 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This
)
1218 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1224 static HRESULT WINAPI
1225 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This
, HWND hWnd
,
1228 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
1235 static HRESULT WINAPI
1236 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This
, HWND hWnd
,
1239 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
1246 static HRESULT WINAPI
1247 IDirectDraw3Impl_SetCooperativeLevel(LPDIRECTDRAW3 This
, HWND hWnd
,
1250 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
1257 static HRESULT WINAPI
1258 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This
, HWND hWnd
,
1261 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
1268 static HRESULT WINAPI
1269 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This
, DWORD a
, DWORD b
, DWORD c
)
1271 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1278 static HRESULT WINAPI
1279 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This
, DWORD a
, DWORD b
, DWORD c
,
1282 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1289 static HRESULT WINAPI
1290 IDirectDraw3Impl_SetDisplayMode(LPDIRECTDRAW3 This
, DWORD a
, DWORD b
, DWORD c
,
1293 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1300 static HRESULT WINAPI
1301 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This
, DWORD a
, DWORD b
, DWORD c
,
1304 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl
,
1311 static HRESULT WINAPI
1312 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This
, DWORD dwFlags
,
1315 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
1322 static HRESULT WINAPI
1323 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This
, DWORD dwFlags
,
1326 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
1333 static HRESULT WINAPI
1334 IDirectDraw3Impl_WaitForVerticalBlank(LPDIRECTDRAW3 This
, DWORD dwFlags
,
1337 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
1344 static HRESULT WINAPI
1345 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This
, DWORD dwFlags
,
1348 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl
,
1355 static HRESULT WINAPI
1356 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This
, LPDDSCAPS pCaps
,
1357 LPDWORD pdwTotal
, LPDWORD pdwFree
)
1360 DDRAW_Convert_DDSCAPS_1_To_2(pCaps
, &Caps2
);
1362 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl
,
1366 &Caps2
, pdwTotal
, pdwFree
);
1369 static HRESULT WINAPI
1370 IDirectDraw3Impl_GetAvailableVidMem(LPDIRECTDRAW3 This
, LPDDSCAPS pCaps
,
1371 LPDWORD pdwTotal
, LPDWORD pdwFree
)
1374 DDRAW_Convert_DDSCAPS_1_To_2(pCaps
, &Caps2
);
1376 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl
,
1380 &Caps2
, pdwTotal
, pdwFree
);
1383 static HRESULT WINAPI
1384 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This
, LPDDSCAPS2 pCaps
,
1385 LPDWORD pdwTotal
, LPDWORD pdwFree
)
1387 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl
,
1391 pCaps
, pdwTotal
, pdwFree
);
1394 static HRESULT WINAPI
1395 IDirectDraw3Impl_GetSurfaceFromDC(LPDIRECTDRAW3 This
, HDC hDC
,
1396 LPDIRECTDRAWSURFACE
*pSurf
)
1398 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl
,
1402 hDC
, (LPDIRECTDRAWSURFACE7
*)pSurf
);
1405 static HRESULT WINAPI
1406 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This
, HDC hDC
,
1407 LPDIRECTDRAWSURFACE4
*pSurf
)
1409 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl
,
1413 hDC
, (LPDIRECTDRAWSURFACE7
*)pSurf
);
1416 static HRESULT WINAPI
1417 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This
)
1419 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl
,
1425 static HRESULT WINAPI
1426 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This
)
1428 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl
,
1434 static HRESULT WINAPI
1435 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This
,
1436 LPDDDEVICEIDENTIFIER pDDDI
, DWORD dwFlags
)
1438 DDDEVICEIDENTIFIER2 DDDI2
;
1441 hr
= IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl
,
1447 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2
, pDDDI
);
1452 const IDirectDrawVtbl IDirectDraw1_Vtbl
=
1454 IDirectDrawImpl_QueryInterface
,
1455 IDirectDrawImpl_AddRef
,
1456 IDirectDrawImpl_Release
,
1457 IDirectDrawImpl_Compact
,
1458 IDirectDrawImpl_CreateClipper
,
1459 IDirectDrawImpl_CreatePalette
,
1460 IDirectDrawImpl_CreateSurface
,
1461 IDirectDrawImpl_DuplicateSurface
,
1462 IDirectDrawImpl_EnumDisplayModes
,
1463 IDirectDrawImpl_EnumSurfaces
,
1464 IDirectDrawImpl_FlipToGDISurface
,
1465 IDirectDrawImpl_GetCaps
,
1466 IDirectDrawImpl_GetDisplayMode
,
1467 IDirectDrawImpl_GetFourCCCodes
,
1468 IDirectDrawImpl_GetGDISurface
,
1469 IDirectDrawImpl_GetMonitorFrequency
,
1470 IDirectDrawImpl_GetScanLine
,
1471 IDirectDrawImpl_GetVerticalBlankStatus
,
1472 IDirectDrawImpl_Initialize
,
1473 IDirectDrawImpl_RestoreDisplayMode
,
1474 IDirectDrawImpl_SetCooperativeLevel
,
1475 IDirectDrawImpl_SetDisplayMode
,
1476 IDirectDrawImpl_WaitForVerticalBlank
,
1479 const IDirectDraw2Vtbl IDirectDraw2_Vtbl
=
1481 IDirectDraw2Impl_QueryInterface
,
1482 IDirectDraw2Impl_AddRef
,
1483 IDirectDraw2Impl_Release
,
1484 IDirectDraw2Impl_Compact
,
1485 IDirectDraw2Impl_CreateClipper
,
1486 IDirectDraw2Impl_CreatePalette
,
1487 IDirectDraw2Impl_CreateSurface
,
1488 IDirectDraw2Impl_DuplicateSurface
,
1489 IDirectDraw2Impl_EnumDisplayModes
,
1490 IDirectDraw2Impl_EnumSurfaces
,
1491 IDirectDraw2Impl_FlipToGDISurface
,
1492 IDirectDraw2Impl_GetCaps
,
1493 IDirectDraw2Impl_GetDisplayMode
,
1494 IDirectDraw2Impl_GetFourCCCodes
,
1495 IDirectDraw2Impl_GetGDISurface
,
1496 IDirectDraw2Impl_GetMonitorFrequency
,
1497 IDirectDraw2Impl_GetScanLine
,
1498 IDirectDraw2Impl_GetVerticalBlankStatus
,
1499 IDirectDraw2Impl_Initialize
,
1500 IDirectDraw2Impl_RestoreDisplayMode
,
1501 IDirectDraw2Impl_SetCooperativeLevel
,
1502 IDirectDraw2Impl_SetDisplayMode
,
1503 IDirectDraw2Impl_WaitForVerticalBlank
,
1504 IDirectDraw2Impl_GetAvailableVidMem
1507 const IDirectDraw3Vtbl IDirectDraw3_Vtbl
=
1509 IDirectDraw3Impl_QueryInterface
,
1510 IDirectDraw3Impl_AddRef
,
1511 IDirectDraw3Impl_Release
,
1512 IDirectDraw3Impl_Compact
,
1513 IDirectDraw3Impl_CreateClipper
,
1514 IDirectDraw3Impl_CreatePalette
,
1515 IDirectDraw3Impl_CreateSurface
,
1516 IDirectDraw3Impl_DuplicateSurface
,
1517 IDirectDraw3Impl_EnumDisplayModes
,
1518 IDirectDraw3Impl_EnumSurfaces
,
1519 IDirectDraw3Impl_FlipToGDISurface
,
1520 IDirectDraw3Impl_GetCaps
,
1521 IDirectDraw3Impl_GetDisplayMode
,
1522 IDirectDraw3Impl_GetFourCCCodes
,
1523 IDirectDraw3Impl_GetGDISurface
,
1524 IDirectDraw3Impl_GetMonitorFrequency
,
1525 IDirectDraw3Impl_GetScanLine
,
1526 IDirectDraw3Impl_GetVerticalBlankStatus
,
1527 IDirectDraw3Impl_Initialize
,
1528 IDirectDraw3Impl_RestoreDisplayMode
,
1529 IDirectDraw3Impl_SetCooperativeLevel
,
1530 IDirectDraw3Impl_SetDisplayMode
,
1531 IDirectDraw3Impl_WaitForVerticalBlank
,
1532 IDirectDraw3Impl_GetAvailableVidMem
,
1533 IDirectDraw3Impl_GetSurfaceFromDC
,
1536 const IDirectDraw4Vtbl IDirectDraw4_Vtbl
=
1538 IDirectDraw4Impl_QueryInterface
,
1539 IDirectDraw4Impl_AddRef
,
1540 IDirectDraw4Impl_Release
,
1541 IDirectDraw4Impl_Compact
,
1542 IDirectDraw4Impl_CreateClipper
,
1543 IDirectDraw4Impl_CreatePalette
,
1544 IDirectDraw4Impl_CreateSurface
,
1545 IDirectDraw4Impl_DuplicateSurface
,
1546 IDirectDraw4Impl_EnumDisplayModes
,
1547 IDirectDraw4Impl_EnumSurfaces
,
1548 IDirectDraw4Impl_FlipToGDISurface
,
1549 IDirectDraw4Impl_GetCaps
,
1550 IDirectDraw4Impl_GetDisplayMode
,
1551 IDirectDraw4Impl_GetFourCCCodes
,
1552 IDirectDraw4Impl_GetGDISurface
,
1553 IDirectDraw4Impl_GetMonitorFrequency
,
1554 IDirectDraw4Impl_GetScanLine
,
1555 IDirectDraw4Impl_GetVerticalBlankStatus
,
1556 IDirectDraw4Impl_Initialize
,
1557 IDirectDraw4Impl_RestoreDisplayMode
,
1558 IDirectDraw4Impl_SetCooperativeLevel
,
1559 IDirectDraw4Impl_SetDisplayMode
,
1560 IDirectDraw4Impl_WaitForVerticalBlank
,
1561 IDirectDraw4Impl_GetAvailableVidMem
,
1562 IDirectDraw4Impl_GetSurfaceFromDC
,
1563 IDirectDraw4Impl_RestoreAllSurfaces
,
1564 IDirectDraw4Impl_TestCooperativeLevel
,
1565 IDirectDraw4Impl_GetDeviceIdentifier