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
35 #include "wine/exception.h"
41 #include "ddraw_private.h"
42 #include "wine/debug.h"
44 WINE_DEFAULT_DEBUG_CHANNEL(ddraw_thunk);
45 WINE_DECLARE_DEBUG_CHANNEL(ddraw);
48 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
50 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
57 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
59 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
66 IDirectDraw3Impl_QueryInterface(LPDIRECTDRAW3 This, REFIID iid, LPVOID *ppObj)
68 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
75 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
77 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
84 IDirectDrawImpl_AddRef(LPDIRECTDRAW iface)
86 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
87 ULONG ref = InterlockedIncrement(&This->ref1);
89 TRACE("(%p) : incrementing IDirectDraw refcount from %u.\n", This, ref -1);
91 if(ref == 1) InterlockedIncrement(&This->numIfaces);
97 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface)
99 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
100 ULONG ref = InterlockedIncrement(&This->ref2);
102 TRACE("(%p) : incrementing IDirectDraw2 refcount from %u.\n", This, ref -1);
104 if(ref == 1) InterlockedIncrement(&This->numIfaces);
110 IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface)
112 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
113 ULONG ref = InterlockedIncrement(&This->ref3);
115 TRACE("(%p) : incrementing IDirectDraw3 refcount from %u.\n", This, ref -1);
117 if(ref == 1) InterlockedIncrement(&This->numIfaces);
123 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 iface)
125 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
126 ULONG ref = InterlockedIncrement(&This->ref4);
128 TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This, ref -1);
130 if(ref == 1) InterlockedIncrement(&This->numIfaces);
136 IDirectDrawImpl_Release(LPDIRECTDRAW iface)
138 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
139 ULONG ref = InterlockedDecrement(&This->ref1);
141 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw refcount from %u.\n", This, ref +1);
145 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
146 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
153 IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface)
155 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
156 ULONG ref = InterlockedDecrement(&This->ref2);
158 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw2 refcount from %u.\n", This, ref +1);
162 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
163 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
170 IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface)
172 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
173 ULONG ref = InterlockedDecrement(&This->ref3);
175 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw3 refcount from %u.\n", This, ref +1);
179 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
180 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
187 IDirectDraw4Impl_Release(LPDIRECTDRAW4 iface)
189 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
190 ULONG ref = InterlockedDecrement(&This->ref4);
192 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This, ref +1);
196 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
197 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
203 static HRESULT WINAPI
204 IDirectDrawImpl_Compact(LPDIRECTDRAW This)
206 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
207 IDirectDraw, IDirectDraw7,
211 static HRESULT WINAPI
212 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
214 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
215 IDirectDraw2, IDirectDraw7,
219 static HRESULT WINAPI
220 IDirectDraw3Impl_Compact(LPDIRECTDRAW3 This)
222 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
223 IDirectDraw3, IDirectDraw7,
227 static HRESULT WINAPI
228 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
230 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
231 IDirectDraw4, IDirectDraw7,
235 static HRESULT WINAPI
236 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
237 LPDIRECTDRAWCLIPPER *ppClipper,
240 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
244 dwFlags, ppClipper, pUnkOuter);
247 static HRESULT WINAPI
248 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
249 LPDIRECTDRAWCLIPPER *ppClipper,
252 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
256 dwFlags, ppClipper, pUnkOuter);
259 static HRESULT WINAPI
260 IDirectDraw3Impl_CreateClipper(LPDIRECTDRAW3 This, DWORD dwFlags,
261 LPDIRECTDRAWCLIPPER *ppClipper,
264 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
268 dwFlags, ppClipper, pUnkOuter);
271 static HRESULT WINAPI
272 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
273 LPDIRECTDRAWCLIPPER *ppClipper,
276 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
280 dwFlags, ppClipper, pUnkOuter);
283 static HRESULT WINAPI
284 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
285 LPPALETTEENTRY pEntries,
286 LPDIRECTDRAWPALETTE *ppPalette,
290 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
294 dwFlags, pEntries, ppPalette, pUnkOuter);
295 if(SUCCEEDED(hr) && *ppPalette)
297 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
298 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
302 impl->ifaceToRelease = NULL;
308 static HRESULT WINAPI
309 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
310 LPPALETTEENTRY pEntries,
311 LPDIRECTDRAWPALETTE *ppPalette,
315 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
319 dwFlags, pEntries, ppPalette, pUnkOuter);
320 if(SUCCEEDED(hr) && *ppPalette)
322 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
323 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
327 impl->ifaceToRelease = NULL;
332 static HRESULT WINAPI
333 IDirectDraw3Impl_CreatePalette(LPDIRECTDRAW3 This, DWORD dwFlags,
334 LPPALETTEENTRY pEntries,
335 LPDIRECTDRAWPALETTE *ppPalette,
339 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
343 dwFlags, pEntries, ppPalette, pUnkOuter);
344 if(SUCCEEDED(hr) && *ppPalette)
346 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
347 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
351 IDirectDraw4_AddRef(This);
352 impl->ifaceToRelease = (IUnknown *) This;
357 static HRESULT WINAPI
358 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
359 LPPALETTEENTRY pEntries,
360 LPDIRECTDRAWPALETTE *ppPalette,
364 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
368 dwFlags, pEntries, ppPalette, pUnkOuter);
369 if(SUCCEEDED(hr) && *ppPalette)
371 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
372 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
376 IDirectDraw4_AddRef(This);
377 impl->ifaceToRelease = (IUnknown *) This;
382 static HRESULT WINAPI
383 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
384 LPDIRECTDRAWSURFACE *ppSurface,
387 LPDIRECTDRAWSURFACE7 pSurface7;
388 IDirectDrawSurfaceImpl *impl;
391 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
392 * since the data layout is the same */
393 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
397 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
399 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
400 * IDirectDrawSurface vtable layout at the beginning */
401 *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
402 IDirectDrawSurface7, IDirectDrawSurface3,
405 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
406 if(SUCCEEDED(hr) && impl)
409 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
413 impl->ifaceToRelease = NULL;
419 static HRESULT WINAPI
420 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
421 LPDIRECTDRAWSURFACE *ppSurface,
424 LPDIRECTDRAWSURFACE7 pSurface7;
425 IDirectDrawSurfaceImpl *impl;
428 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
432 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
434 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
435 * IDirectDrawSurface vtable layout at the beginning */
436 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
437 IDirectDrawSurface7, IDirectDrawSurface3,
440 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
441 if(SUCCEEDED(hr) && impl)
444 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
448 impl->ifaceToRelease = NULL;
454 static HRESULT WINAPI
455 IDirectDraw3Impl_CreateSurface(LPDIRECTDRAW3 This, LPDDSURFACEDESC pSDesc,
456 LPDIRECTDRAWSURFACE *ppSurface,
459 LPDIRECTDRAWSURFACE7 pSurface7;
460 IDirectDrawSurfaceImpl *impl;
463 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
467 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
469 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
470 * IDirectDrawSurface vtable layout at the beginning */
471 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
472 IDirectDrawSurface7, IDirectDrawSurface3,
475 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
476 if(SUCCEEDED(hr) && impl)
479 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
483 IDirectDraw3_AddRef(This);
484 impl->ifaceToRelease = (IUnknown *) This;
490 static HRESULT WINAPI
491 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
492 LPDIRECTDRAWSURFACE4 *ppSurface,
496 IDirectDrawSurfaceImpl *impl;
498 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
503 (LPDIRECTDRAWSURFACE7 *)ppSurface,
505 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurface);
506 if(SUCCEEDED(hr) && impl)
509 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
513 IDirectDraw4_AddRef(This);
514 impl->ifaceToRelease = (IUnknown *) This;
519 static HRESULT WINAPI
520 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
521 LPDIRECTDRAWSURFACE *ppDst)
523 LPDIRECTDRAWSURFACE7 pDst7;
526 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
529 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
535 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
536 * IDirectDrawSurface vtable layout at the beginning */
537 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
538 IDirectDrawSurface3, pDst7);
543 static HRESULT WINAPI
544 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
545 LPDIRECTDRAWSURFACE *ppDst)
547 LPDIRECTDRAWSURFACE7 pDst7;
550 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
553 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
559 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
560 * IDirectDrawSurface vtable layout at the beginning */
561 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
562 IDirectDrawSurface3, pDst7);
567 static HRESULT WINAPI
568 IDirectDraw3Impl_DuplicateSurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE pSrc,
569 LPDIRECTDRAWSURFACE *ppDst)
571 LPDIRECTDRAWSURFACE7 pDst7;
574 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
577 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
583 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
584 * IDirectDrawSurface vtable layout at the beginning */
585 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
586 IDirectDrawSurface3, pDst7);
591 static HRESULT WINAPI
592 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
593 LPDIRECTDRAWSURFACE4 pSrc,
594 LPDIRECTDRAWSURFACE4 *ppDst)
596 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
600 (LPDIRECTDRAWSURFACE7)pSrc,
601 (LPDIRECTDRAWSURFACE7 *)ppDst);
604 struct displaymodescallback_context
606 LPDDENUMMODESCALLBACK func;
610 static HRESULT CALLBACK
611 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
614 struct displaymodescallback_context *cbcontext = context;
616 memcpy(&DDSD,pDDSD2,sizeof(DDSD));
617 DDSD.dwSize = sizeof(DDSD);
619 return cbcontext->func(&DDSD, cbcontext->context);
622 static HRESULT WINAPI
623 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
624 LPDDSURFACEDESC pDDSD, LPVOID context,
625 LPDDENUMMODESCALLBACK cb)
627 struct displaymodescallback_context cbcontext;
630 cbcontext.context = context;
632 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
636 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
637 EnumDisplayModesCallbackThunk);
640 static HRESULT WINAPI
641 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,
642 LPDDSURFACEDESC pDDSD, LPVOID context,
643 LPDDENUMMODESCALLBACK cb)
645 struct displaymodescallback_context cbcontext;
648 cbcontext.context = context;
650 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
654 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
655 EnumDisplayModesCallbackThunk);
658 static HRESULT WINAPI
659 IDirectDraw3Impl_EnumDisplayModes(LPDIRECTDRAW3 This, DWORD dwFlags,
660 LPDDSURFACEDESC pDDSD, LPVOID context,
661 LPDDENUMMODESCALLBACK cb)
663 struct displaymodescallback_context cbcontext;
666 cbcontext.context = context;
668 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
672 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
673 EnumDisplayModesCallbackThunk);
676 static HRESULT WINAPI
677 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,
678 LPDDSURFACEDESC2 pDDSD, LPVOID context,
679 LPDDENUMMODESCALLBACK2 cb)
681 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
685 dwFlags, pDDSD, context, cb);
688 struct surfacescallback_context
690 LPDDENUMSURFACESCALLBACK func;
694 static HRESULT CALLBACK
695 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,
698 struct surfacescallback_context *cbcontext = context;
700 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
701 * IDirectDrawSurface vtable layout at the beginning */
702 return cbcontext->func((LPDIRECTDRAWSURFACE)
703 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
705 IDirectDrawSurface3, pSurf),
706 (LPDDSURFACEDESC)pDDSD, cbcontext->context);
709 static HRESULT WINAPI
710 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,
711 LPDDSURFACEDESC pDDSD, LPVOID context,
712 LPDDENUMSURFACESCALLBACK cb)
714 struct surfacescallback_context cbcontext;
717 cbcontext.context = context;
719 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
722 dwFlags, (LPDDSURFACEDESC2)pDDSD,
723 &cbcontext, EnumSurfacesCallbackThunk);
726 static HRESULT WINAPI
727 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,
728 LPDDSURFACEDESC pDDSD, LPVOID context,
729 LPDDENUMSURFACESCALLBACK cb)
731 struct surfacescallback_context cbcontext;
734 cbcontext.context = context;
736 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
739 dwFlags, (LPDDSURFACEDESC2)pDDSD,
740 &cbcontext, EnumSurfacesCallbackThunk);
743 static HRESULT WINAPI
744 IDirectDraw3Impl_EnumSurfaces(LPDIRECTDRAW3 This, DWORD dwFlags,
745 LPDDSURFACEDESC pDDSD, LPVOID context,
746 LPDDENUMSURFACESCALLBACK cb)
748 struct surfacescallback_context cbcontext;
751 cbcontext.context = context;
753 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
756 dwFlags, (LPDDSURFACEDESC2)pDDSD,
757 &cbcontext, EnumSurfacesCallbackThunk);
760 static HRESULT WINAPI
761 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,
762 LPDDSURFACEDESC2 pDDSD, LPVOID context,
763 LPDDENUMSURFACESCALLBACK2 cb)
765 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
768 dwFlags, pDDSD, context,
769 (LPDDENUMSURFACESCALLBACK7)cb);
772 static HRESULT WINAPI
773 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This)
775 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
781 static HRESULT WINAPI
782 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This)
784 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
790 static HRESULT WINAPI
791 IDirectDraw3Impl_FlipToGDISurface(LPDIRECTDRAW3 This)
793 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
799 static HRESULT WINAPI
800 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This)
802 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
808 static HRESULT WINAPI
809 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
811 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
812 IDirectDraw, IDirectDraw7,
813 This), pDDC1, pDDC2);
816 static HRESULT WINAPI
817 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
819 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
820 IDirectDraw2, IDirectDraw7,
821 This), pDDC1, pDDC2);
824 static HRESULT WINAPI
825 IDirectDraw3Impl_GetCaps(LPDIRECTDRAW3 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
827 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
828 IDirectDraw3, IDirectDraw7,
829 This), pDDC1, pDDC2);
832 static HRESULT WINAPI
833 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
835 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
836 IDirectDraw4, IDirectDraw7,
837 This), pDDC1, pDDC2);
840 static HRESULT WINAPI
841 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD)
843 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
846 (LPDDSURFACEDESC2)pDDSD);
849 static HRESULT WINAPI
850 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD)
852 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
855 (LPDDSURFACEDESC2)pDDSD);
858 static HRESULT WINAPI
859 IDirectDraw3Impl_GetDisplayMode(LPDIRECTDRAW3 This, LPDDSURFACEDESC pDDSD)
861 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
864 (LPDDSURFACEDESC2)pDDSD);
867 static HRESULT WINAPI
868 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD)
870 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
876 static HRESULT WINAPI
877 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes,
880 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
884 lpNumCodes, lpCodes);
887 static HRESULT WINAPI
888 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes,
891 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
895 lpNumCodes, lpCodes);
898 static HRESULT WINAPI
899 IDirectDraw3Impl_GetFourCCCodes(LPDIRECTDRAW3 This, LPDWORD lpNumCodes,
902 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
906 lpNumCodes, lpCodes);
909 static HRESULT WINAPI
910 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes,
913 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
917 lpNumCodes, lpCodes);
920 static HRESULT WINAPI
921 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf)
923 LPDIRECTDRAWSURFACE7 pSurf7;
926 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
931 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
932 * IDirectDrawSurface vtable layout at the beginning */
933 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
934 IDirectDrawSurface3, pSurf7);
939 static HRESULT WINAPI
940 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf)
942 LPDIRECTDRAWSURFACE7 pSurf7;
945 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
950 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
951 * IDirectDrawSurface vtable layout at the beginning */
952 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
953 IDirectDrawSurface3, pSurf7);
958 static HRESULT WINAPI
959 IDirectDraw3Impl_GetGDISurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE *ppSurf)
961 LPDIRECTDRAWSURFACE7 pSurf7;
964 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
969 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
970 * IDirectDrawSurface vtable layout at the beginning */
971 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
972 IDirectDrawSurface3, pSurf7);
977 static HRESULT WINAPI
978 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This,
979 LPDIRECTDRAWSURFACE4 *ppSurf)
981 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
985 (LPDIRECTDRAWSURFACE7 *)ppSurf);
988 static HRESULT WINAPI
989 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq)
991 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
998 static HRESULT WINAPI
999 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq)
1001 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1008 static HRESULT WINAPI
1009 IDirectDraw3Impl_GetMonitorFrequency(LPDIRECTDRAW3 This, LPDWORD pdwFreq)
1011 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1018 static HRESULT WINAPI
1019 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq)
1021 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1028 static HRESULT WINAPI
1029 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine)
1031 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1037 static HRESULT WINAPI
1038 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine)
1040 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1046 static HRESULT WINAPI
1047 IDirectDraw3Impl_GetScanLine(LPDIRECTDRAW3 This, LPDWORD pdwLine)
1049 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1055 static HRESULT WINAPI
1056 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine)
1058 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1064 static HRESULT WINAPI
1065 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB)
1067 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1074 static HRESULT WINAPI
1075 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB)
1077 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1084 static HRESULT WINAPI
1085 IDirectDraw3Impl_GetVerticalBlankStatus(LPDIRECTDRAW3 This, LPBOOL lpbIsInVB)
1087 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1094 static HRESULT WINAPI
1095 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB)
1097 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1104 static HRESULT WINAPI
1105 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID)
1107 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
1110 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1115 static HRESULT WINAPI
1116 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID)
1118 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
1121 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1126 static HRESULT WINAPI
1127 IDirectDraw3Impl_Initialize(LPDIRECTDRAW3 iface, LPGUID pGUID)
1129 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
1132 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1137 static HRESULT WINAPI
1138 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID)
1140 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
1143 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1149 static HRESULT WINAPI
1150 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This)
1152 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1158 static HRESULT WINAPI
1159 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This)
1161 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1167 static HRESULT WINAPI
1168 IDirectDraw3Impl_RestoreDisplayMode(LPDIRECTDRAW3 This)
1170 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1176 static HRESULT WINAPI
1177 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This)
1179 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1185 static HRESULT WINAPI
1186 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd,
1189 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1196 static HRESULT WINAPI
1197 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd,
1200 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1207 static HRESULT WINAPI
1208 IDirectDraw3Impl_SetCooperativeLevel(LPDIRECTDRAW3 This, HWND hWnd,
1211 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1218 static HRESULT WINAPI
1219 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd,
1222 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1229 static HRESULT WINAPI
1230 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c)
1232 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1239 static HRESULT WINAPI
1240 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c,
1243 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1250 static HRESULT WINAPI
1251 IDirectDraw3Impl_SetDisplayMode(LPDIRECTDRAW3 This, DWORD a, DWORD b, DWORD c,
1254 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1261 static HRESULT WINAPI
1262 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c,
1265 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1272 static HRESULT WINAPI
1273 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags,
1276 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1283 static HRESULT WINAPI
1284 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags,
1287 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1294 static HRESULT WINAPI
1295 IDirectDraw3Impl_WaitForVerticalBlank(LPDIRECTDRAW3 This, DWORD dwFlags,
1298 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1305 static HRESULT WINAPI
1306 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags,
1309 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1316 static HRESULT WINAPI
1317 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps,
1318 LPDWORD pdwTotal, LPDWORD pdwFree)
1321 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1323 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1327 &Caps2, pdwTotal, pdwFree);
1330 static HRESULT WINAPI
1331 IDirectDraw3Impl_GetAvailableVidMem(LPDIRECTDRAW3 This, LPDDSCAPS pCaps,
1332 LPDWORD pdwTotal, LPDWORD pdwFree)
1335 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1337 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1341 &Caps2, pdwTotal, pdwFree);
1344 static HRESULT WINAPI
1345 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps,
1346 LPDWORD pdwTotal, LPDWORD pdwFree)
1348 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1352 pCaps, pdwTotal, pdwFree);
1355 static HRESULT WINAPI
1356 IDirectDraw3Impl_GetSurfaceFromDC(LPDIRECTDRAW3 This, HDC hDC,
1357 LPDIRECTDRAWSURFACE *pSurf)
1359 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
1363 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1366 static HRESULT WINAPI
1367 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC,
1368 LPDIRECTDRAWSURFACE4 *pSurf)
1370 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
1374 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1377 static HRESULT WINAPI
1378 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This)
1380 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
1386 static HRESULT WINAPI
1387 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This)
1389 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1395 static HRESULT WINAPI
1396 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This,
1397 LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags)
1399 DDDEVICEIDENTIFIER2 DDDI2;
1402 hr = IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl,
1408 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI);
1413 const IDirectDrawVtbl IDirectDraw1_Vtbl =
1415 IDirectDrawImpl_QueryInterface,
1416 IDirectDrawImpl_AddRef,
1417 IDirectDrawImpl_Release,
1418 IDirectDrawImpl_Compact,
1419 IDirectDrawImpl_CreateClipper,
1420 IDirectDrawImpl_CreatePalette,
1421 IDirectDrawImpl_CreateSurface,
1422 IDirectDrawImpl_DuplicateSurface,
1423 IDirectDrawImpl_EnumDisplayModes,
1424 IDirectDrawImpl_EnumSurfaces,
1425 IDirectDrawImpl_FlipToGDISurface,
1426 IDirectDrawImpl_GetCaps,
1427 IDirectDrawImpl_GetDisplayMode,
1428 IDirectDrawImpl_GetFourCCCodes,
1429 IDirectDrawImpl_GetGDISurface,
1430 IDirectDrawImpl_GetMonitorFrequency,
1431 IDirectDrawImpl_GetScanLine,
1432 IDirectDrawImpl_GetVerticalBlankStatus,
1433 IDirectDrawImpl_Initialize,
1434 IDirectDrawImpl_RestoreDisplayMode,
1435 IDirectDrawImpl_SetCooperativeLevel,
1436 IDirectDrawImpl_SetDisplayMode,
1437 IDirectDrawImpl_WaitForVerticalBlank,
1440 const IDirectDraw2Vtbl IDirectDraw2_Vtbl =
1442 IDirectDraw2Impl_QueryInterface,
1443 IDirectDraw2Impl_AddRef,
1444 IDirectDraw2Impl_Release,
1445 IDirectDraw2Impl_Compact,
1446 IDirectDraw2Impl_CreateClipper,
1447 IDirectDraw2Impl_CreatePalette,
1448 IDirectDraw2Impl_CreateSurface,
1449 IDirectDraw2Impl_DuplicateSurface,
1450 IDirectDraw2Impl_EnumDisplayModes,
1451 IDirectDraw2Impl_EnumSurfaces,
1452 IDirectDraw2Impl_FlipToGDISurface,
1453 IDirectDraw2Impl_GetCaps,
1454 IDirectDraw2Impl_GetDisplayMode,
1455 IDirectDraw2Impl_GetFourCCCodes,
1456 IDirectDraw2Impl_GetGDISurface,
1457 IDirectDraw2Impl_GetMonitorFrequency,
1458 IDirectDraw2Impl_GetScanLine,
1459 IDirectDraw2Impl_GetVerticalBlankStatus,
1460 IDirectDraw2Impl_Initialize,
1461 IDirectDraw2Impl_RestoreDisplayMode,
1462 IDirectDraw2Impl_SetCooperativeLevel,
1463 IDirectDraw2Impl_SetDisplayMode,
1464 IDirectDraw2Impl_WaitForVerticalBlank,
1465 IDirectDraw2Impl_GetAvailableVidMem
1468 const IDirectDraw3Vtbl IDirectDraw3_Vtbl =
1470 IDirectDraw3Impl_QueryInterface,
1471 IDirectDraw3Impl_AddRef,
1472 IDirectDraw3Impl_Release,
1473 IDirectDraw3Impl_Compact,
1474 IDirectDraw3Impl_CreateClipper,
1475 IDirectDraw3Impl_CreatePalette,
1476 IDirectDraw3Impl_CreateSurface,
1477 IDirectDraw3Impl_DuplicateSurface,
1478 IDirectDraw3Impl_EnumDisplayModes,
1479 IDirectDraw3Impl_EnumSurfaces,
1480 IDirectDraw3Impl_FlipToGDISurface,
1481 IDirectDraw3Impl_GetCaps,
1482 IDirectDraw3Impl_GetDisplayMode,
1483 IDirectDraw3Impl_GetFourCCCodes,
1484 IDirectDraw3Impl_GetGDISurface,
1485 IDirectDraw3Impl_GetMonitorFrequency,
1486 IDirectDraw3Impl_GetScanLine,
1487 IDirectDraw3Impl_GetVerticalBlankStatus,
1488 IDirectDraw3Impl_Initialize,
1489 IDirectDraw3Impl_RestoreDisplayMode,
1490 IDirectDraw3Impl_SetCooperativeLevel,
1491 IDirectDraw3Impl_SetDisplayMode,
1492 IDirectDraw3Impl_WaitForVerticalBlank,
1493 IDirectDraw3Impl_GetAvailableVidMem,
1494 IDirectDraw3Impl_GetSurfaceFromDC,
1497 const IDirectDraw4Vtbl IDirectDraw4_Vtbl =
1499 IDirectDraw4Impl_QueryInterface,
1500 IDirectDraw4Impl_AddRef,
1501 IDirectDraw4Impl_Release,
1502 IDirectDraw4Impl_Compact,
1503 IDirectDraw4Impl_CreateClipper,
1504 IDirectDraw4Impl_CreatePalette,
1505 IDirectDraw4Impl_CreateSurface,
1506 IDirectDraw4Impl_DuplicateSurface,
1507 IDirectDraw4Impl_EnumDisplayModes,
1508 IDirectDraw4Impl_EnumSurfaces,
1509 IDirectDraw4Impl_FlipToGDISurface,
1510 IDirectDraw4Impl_GetCaps,
1511 IDirectDraw4Impl_GetDisplayMode,
1512 IDirectDraw4Impl_GetFourCCCodes,
1513 IDirectDraw4Impl_GetGDISurface,
1514 IDirectDraw4Impl_GetMonitorFrequency,
1515 IDirectDraw4Impl_GetScanLine,
1516 IDirectDraw4Impl_GetVerticalBlankStatus,
1517 IDirectDraw4Impl_Initialize,
1518 IDirectDraw4Impl_RestoreDisplayMode,
1519 IDirectDraw4Impl_SetCooperativeLevel,
1520 IDirectDraw4Impl_SetDisplayMode,
1521 IDirectDraw4Impl_WaitForVerticalBlank,
1522 IDirectDraw4Impl_GetAvailableVidMem,
1523 IDirectDraw4Impl_GetSurfaceFromDC,
1524 IDirectDraw4Impl_RestoreAllSurfaces,
1525 IDirectDraw4Impl_TestCooperativeLevel,
1526 IDirectDraw4Impl_GetDeviceIdentifier