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);
46 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
48 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
55 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
57 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
64 IDirectDraw3Impl_QueryInterface(LPDIRECTDRAW3 This, REFIID iid, LPVOID *ppObj)
66 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
73 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
75 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
82 IDirectDrawImpl_AddRef(LPDIRECTDRAW iface)
84 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
85 ULONG ref = InterlockedIncrement(&This->ref1);
87 TRACE("(%p) : incrementing IDirectDraw refcount from %u.\n", This, ref -1);
89 if(ref == 1) InterlockedIncrement(&This->numIfaces);
95 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface)
97 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
98 ULONG ref = InterlockedIncrement(&This->ref2);
100 TRACE("(%p) : incrementing IDirectDraw2 refcount from %u.\n", This, ref -1);
102 if(ref == 1) InterlockedIncrement(&This->numIfaces);
108 IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface)
110 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
111 ULONG ref = InterlockedIncrement(&This->ref3);
113 TRACE("(%p) : incrementing IDirectDraw3 refcount from %u.\n", This, ref -1);
115 if(ref == 1) InterlockedIncrement(&This->numIfaces);
121 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 iface)
123 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
124 ULONG ref = InterlockedIncrement(&This->ref4);
126 TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This, ref -1);
128 if(ref == 1) InterlockedIncrement(&This->numIfaces);
134 IDirectDrawImpl_Release(LPDIRECTDRAW iface)
136 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
137 ULONG ref = InterlockedDecrement(&This->ref1);
139 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw refcount from %u.\n", This, ref +1);
143 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
144 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
151 IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface)
153 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
154 ULONG ref = InterlockedDecrement(&This->ref2);
156 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw2 refcount from %u.\n", This, ref +1);
160 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
161 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
168 IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface)
170 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
171 ULONG ref = InterlockedDecrement(&This->ref3);
173 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw3 refcount from %u.\n", This, ref +1);
177 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
178 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
185 IDirectDraw4Impl_Release(LPDIRECTDRAW4 iface)
187 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
188 ULONG ref = InterlockedDecrement(&This->ref4);
190 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This, ref +1);
194 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
195 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
201 static HRESULT WINAPI
202 IDirectDrawImpl_Compact(LPDIRECTDRAW This)
204 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
205 IDirectDraw, IDirectDraw7,
209 static HRESULT WINAPI
210 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
212 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
213 IDirectDraw2, IDirectDraw7,
217 static HRESULT WINAPI
218 IDirectDraw3Impl_Compact(LPDIRECTDRAW3 This)
220 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
221 IDirectDraw3, IDirectDraw7,
225 static HRESULT WINAPI
226 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
228 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
229 IDirectDraw4, IDirectDraw7,
233 static HRESULT WINAPI
234 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
235 LPDIRECTDRAWCLIPPER *ppClipper,
238 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
242 dwFlags, ppClipper, pUnkOuter);
245 static HRESULT WINAPI
246 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
247 LPDIRECTDRAWCLIPPER *ppClipper,
250 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
254 dwFlags, ppClipper, pUnkOuter);
257 static HRESULT WINAPI
258 IDirectDraw3Impl_CreateClipper(LPDIRECTDRAW3 This, DWORD dwFlags,
259 LPDIRECTDRAWCLIPPER *ppClipper,
262 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
266 dwFlags, ppClipper, pUnkOuter);
269 static HRESULT WINAPI
270 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
271 LPDIRECTDRAWCLIPPER *ppClipper,
274 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
278 dwFlags, ppClipper, pUnkOuter);
281 static HRESULT WINAPI
282 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
283 LPPALETTEENTRY pEntries,
284 LPDIRECTDRAWPALETTE *ppPalette,
288 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
292 dwFlags, pEntries, ppPalette, pUnkOuter);
293 if(SUCCEEDED(hr) && *ppPalette)
295 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
296 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
300 impl->ifaceToRelease = NULL;
306 static HRESULT WINAPI
307 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
308 LPPALETTEENTRY pEntries,
309 LPDIRECTDRAWPALETTE *ppPalette,
313 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
317 dwFlags, pEntries, ppPalette, pUnkOuter);
318 if(SUCCEEDED(hr) && *ppPalette)
320 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
321 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
325 impl->ifaceToRelease = NULL;
330 static HRESULT WINAPI
331 IDirectDraw3Impl_CreatePalette(LPDIRECTDRAW3 This, DWORD dwFlags,
332 LPPALETTEENTRY pEntries,
333 LPDIRECTDRAWPALETTE *ppPalette,
337 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
341 dwFlags, pEntries, ppPalette, pUnkOuter);
342 if(SUCCEEDED(hr) && *ppPalette)
344 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
345 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
349 IDirectDraw4_AddRef(This);
350 impl->ifaceToRelease = (IUnknown *) This;
355 static HRESULT WINAPI
356 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
357 LPPALETTEENTRY pEntries,
358 LPDIRECTDRAWPALETTE *ppPalette,
362 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
366 dwFlags, pEntries, ppPalette, pUnkOuter);
367 if(SUCCEEDED(hr) && *ppPalette)
369 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
370 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
374 IDirectDraw4_AddRef(This);
375 impl->ifaceToRelease = (IUnknown *) This;
380 static HRESULT WINAPI
381 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
382 LPDIRECTDRAWSURFACE *ppSurface,
385 LPDIRECTDRAWSURFACE7 pSurface7;
386 IDirectDrawSurfaceImpl *impl;
389 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
390 * since the data layout is the same */
391 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
395 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
397 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
398 * IDirectDrawSurface vtable layout at the beginning */
399 *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
400 IDirectDrawSurface7, IDirectDrawSurface3,
403 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
404 if(SUCCEEDED(hr) && impl)
407 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
411 impl->ifaceToRelease = NULL;
417 static HRESULT WINAPI
418 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
419 LPDIRECTDRAWSURFACE *ppSurface,
422 LPDIRECTDRAWSURFACE7 pSurface7;
423 IDirectDrawSurfaceImpl *impl;
426 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
430 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
432 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
433 * IDirectDrawSurface vtable layout at the beginning */
434 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
435 IDirectDrawSurface7, IDirectDrawSurface3,
438 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
439 if(SUCCEEDED(hr) && impl)
442 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
446 impl->ifaceToRelease = NULL;
452 static HRESULT WINAPI
453 IDirectDraw3Impl_CreateSurface(LPDIRECTDRAW3 This, LPDDSURFACEDESC pSDesc,
454 LPDIRECTDRAWSURFACE *ppSurface,
457 LPDIRECTDRAWSURFACE7 pSurface7;
458 IDirectDrawSurfaceImpl *impl;
461 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
465 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
467 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
468 * IDirectDrawSurface vtable layout at the beginning */
469 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
470 IDirectDrawSurface7, IDirectDrawSurface3,
473 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
474 if(SUCCEEDED(hr) && impl)
477 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
481 IDirectDraw3_AddRef(This);
482 impl->ifaceToRelease = (IUnknown *) This;
488 static HRESULT WINAPI
489 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
490 LPDIRECTDRAWSURFACE4 *ppSurface,
494 IDirectDrawSurfaceImpl *impl;
496 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
501 (LPDIRECTDRAWSURFACE7 *)ppSurface,
503 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurface);
504 if(SUCCEEDED(hr) && impl)
507 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
511 IDirectDraw4_AddRef(This);
512 impl->ifaceToRelease = (IUnknown *) This;
517 static HRESULT WINAPI
518 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
519 LPDIRECTDRAWSURFACE *ppDst)
521 LPDIRECTDRAWSURFACE7 pDst7;
524 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
527 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
533 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
534 * IDirectDrawSurface vtable layout at the beginning */
535 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
536 IDirectDrawSurface3, pDst7);
541 static HRESULT WINAPI
542 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
543 LPDIRECTDRAWSURFACE *ppDst)
545 LPDIRECTDRAWSURFACE7 pDst7;
548 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
551 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
557 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
558 * IDirectDrawSurface vtable layout at the beginning */
559 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
560 IDirectDrawSurface3, pDst7);
565 static HRESULT WINAPI
566 IDirectDraw3Impl_DuplicateSurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE pSrc,
567 LPDIRECTDRAWSURFACE *ppDst)
569 LPDIRECTDRAWSURFACE7 pDst7;
572 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
575 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
581 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
582 * IDirectDrawSurface vtable layout at the beginning */
583 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
584 IDirectDrawSurface3, pDst7);
589 static HRESULT WINAPI
590 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
591 LPDIRECTDRAWSURFACE4 pSrc,
592 LPDIRECTDRAWSURFACE4 *ppDst)
594 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
598 (LPDIRECTDRAWSURFACE7)pSrc,
599 (LPDIRECTDRAWSURFACE7 *)ppDst);
602 struct displaymodescallback_context
604 LPDDENUMMODESCALLBACK func;
608 static HRESULT CALLBACK
609 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
612 struct displaymodescallback_context *cbcontext = context;
614 memcpy(&DDSD,pDDSD2,sizeof(DDSD));
615 DDSD.dwSize = sizeof(DDSD);
617 return cbcontext->func(&DDSD, cbcontext->context);
620 static HRESULT WINAPI
621 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
622 LPDDSURFACEDESC pDDSD, LPVOID context,
623 LPDDENUMMODESCALLBACK cb)
625 struct displaymodescallback_context cbcontext;
628 cbcontext.context = context;
630 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
634 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
635 EnumDisplayModesCallbackThunk);
638 static HRESULT WINAPI
639 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,
640 LPDDSURFACEDESC pDDSD, LPVOID context,
641 LPDDENUMMODESCALLBACK cb)
643 struct displaymodescallback_context cbcontext;
646 cbcontext.context = context;
648 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
652 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
653 EnumDisplayModesCallbackThunk);
656 static HRESULT WINAPI
657 IDirectDraw3Impl_EnumDisplayModes(LPDIRECTDRAW3 This, DWORD dwFlags,
658 LPDDSURFACEDESC pDDSD, LPVOID context,
659 LPDDENUMMODESCALLBACK cb)
661 struct displaymodescallback_context cbcontext;
664 cbcontext.context = context;
666 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
670 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
671 EnumDisplayModesCallbackThunk);
674 static HRESULT WINAPI
675 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,
676 LPDDSURFACEDESC2 pDDSD, LPVOID context,
677 LPDDENUMMODESCALLBACK2 cb)
679 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
683 dwFlags, pDDSD, context, cb);
686 struct surfacescallback_context
688 LPDDENUMSURFACESCALLBACK func;
692 static HRESULT CALLBACK
693 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,
696 struct surfacescallback_context *cbcontext = context;
698 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
699 * IDirectDrawSurface vtable layout at the beginning */
700 return cbcontext->func((LPDIRECTDRAWSURFACE)
701 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
703 IDirectDrawSurface3, pSurf),
704 (LPDDSURFACEDESC)pDDSD, cbcontext->context);
707 static HRESULT WINAPI
708 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,
709 LPDDSURFACEDESC pDDSD, LPVOID context,
710 LPDDENUMSURFACESCALLBACK cb)
712 struct surfacescallback_context cbcontext;
715 cbcontext.context = context;
717 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
720 dwFlags, (LPDDSURFACEDESC2)pDDSD,
721 &cbcontext, EnumSurfacesCallbackThunk);
724 static HRESULT WINAPI
725 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,
726 LPDDSURFACEDESC pDDSD, LPVOID context,
727 LPDDENUMSURFACESCALLBACK cb)
729 struct surfacescallback_context cbcontext;
732 cbcontext.context = context;
734 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
737 dwFlags, (LPDDSURFACEDESC2)pDDSD,
738 &cbcontext, EnumSurfacesCallbackThunk);
741 static HRESULT WINAPI
742 IDirectDraw3Impl_EnumSurfaces(LPDIRECTDRAW3 This, DWORD dwFlags,
743 LPDDSURFACEDESC pDDSD, LPVOID context,
744 LPDDENUMSURFACESCALLBACK cb)
746 struct surfacescallback_context cbcontext;
749 cbcontext.context = context;
751 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
754 dwFlags, (LPDDSURFACEDESC2)pDDSD,
755 &cbcontext, EnumSurfacesCallbackThunk);
758 static HRESULT WINAPI
759 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,
760 LPDDSURFACEDESC2 pDDSD, LPVOID context,
761 LPDDENUMSURFACESCALLBACK2 cb)
763 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
766 dwFlags, pDDSD, context,
767 (LPDDENUMSURFACESCALLBACK7)cb);
770 static HRESULT WINAPI
771 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This)
773 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
779 static HRESULT WINAPI
780 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This)
782 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
788 static HRESULT WINAPI
789 IDirectDraw3Impl_FlipToGDISurface(LPDIRECTDRAW3 This)
791 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
797 static HRESULT WINAPI
798 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This)
800 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
806 static HRESULT WINAPI
807 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
809 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
810 IDirectDraw, IDirectDraw7,
811 This), pDDC1, pDDC2);
814 static HRESULT WINAPI
815 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
817 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
818 IDirectDraw2, IDirectDraw7,
819 This), pDDC1, pDDC2);
822 static HRESULT WINAPI
823 IDirectDraw3Impl_GetCaps(LPDIRECTDRAW3 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
825 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
826 IDirectDraw3, IDirectDraw7,
827 This), pDDC1, pDDC2);
830 static HRESULT WINAPI
831 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
833 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
834 IDirectDraw4, IDirectDraw7,
835 This), pDDC1, pDDC2);
838 static HRESULT WINAPI
839 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD)
841 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
844 (LPDDSURFACEDESC2)pDDSD);
847 static HRESULT WINAPI
848 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD)
850 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
853 (LPDDSURFACEDESC2)pDDSD);
856 static HRESULT WINAPI
857 IDirectDraw3Impl_GetDisplayMode(LPDIRECTDRAW3 This, LPDDSURFACEDESC pDDSD)
859 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
862 (LPDDSURFACEDESC2)pDDSD);
865 static HRESULT WINAPI
866 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD)
868 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
874 static HRESULT WINAPI
875 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes,
878 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
882 lpNumCodes, lpCodes);
885 static HRESULT WINAPI
886 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes,
889 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
893 lpNumCodes, lpCodes);
896 static HRESULT WINAPI
897 IDirectDraw3Impl_GetFourCCCodes(LPDIRECTDRAW3 This, LPDWORD lpNumCodes,
900 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
904 lpNumCodes, lpCodes);
907 static HRESULT WINAPI
908 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes,
911 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
915 lpNumCodes, lpCodes);
918 static HRESULT WINAPI
919 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf)
921 LPDIRECTDRAWSURFACE7 pSurf7;
924 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
929 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
930 * IDirectDrawSurface vtable layout at the beginning */
931 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
932 IDirectDrawSurface3, pSurf7);
937 static HRESULT WINAPI
938 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf)
940 LPDIRECTDRAWSURFACE7 pSurf7;
943 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
948 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
949 * IDirectDrawSurface vtable layout at the beginning */
950 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
951 IDirectDrawSurface3, pSurf7);
956 static HRESULT WINAPI
957 IDirectDraw3Impl_GetGDISurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE *ppSurf)
959 LPDIRECTDRAWSURFACE7 pSurf7;
962 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
967 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
968 * IDirectDrawSurface vtable layout at the beginning */
969 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
970 IDirectDrawSurface3, pSurf7);
975 static HRESULT WINAPI
976 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This,
977 LPDIRECTDRAWSURFACE4 *ppSurf)
979 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
983 (LPDIRECTDRAWSURFACE7 *)ppSurf);
986 static HRESULT WINAPI
987 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq)
989 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
996 static HRESULT WINAPI
997 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq)
999 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1006 static HRESULT WINAPI
1007 IDirectDraw3Impl_GetMonitorFrequency(LPDIRECTDRAW3 This, LPDWORD pdwFreq)
1009 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1016 static HRESULT WINAPI
1017 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq)
1019 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
1026 static HRESULT WINAPI
1027 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine)
1029 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1035 static HRESULT WINAPI
1036 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine)
1038 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1044 static HRESULT WINAPI
1045 IDirectDraw3Impl_GetScanLine(LPDIRECTDRAW3 This, LPDWORD pdwLine)
1047 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1053 static HRESULT WINAPI
1054 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine)
1056 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
1062 static HRESULT WINAPI
1063 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB)
1065 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1072 static HRESULT WINAPI
1073 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB)
1075 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1082 static HRESULT WINAPI
1083 IDirectDraw3Impl_GetVerticalBlankStatus(LPDIRECTDRAW3 This, LPBOOL lpbIsInVB)
1085 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1092 static HRESULT WINAPI
1093 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB)
1095 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
1102 static HRESULT WINAPI
1103 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID)
1105 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
1108 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1113 static HRESULT WINAPI
1114 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID)
1116 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
1119 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1124 static HRESULT WINAPI
1125 IDirectDraw3Impl_Initialize(LPDIRECTDRAW3 iface, LPGUID pGUID)
1127 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw3, iface);
1130 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1135 static HRESULT WINAPI
1136 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID)
1138 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
1141 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
1147 static HRESULT WINAPI
1148 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This)
1150 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1156 static HRESULT WINAPI
1157 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This)
1159 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1165 static HRESULT WINAPI
1166 IDirectDraw3Impl_RestoreDisplayMode(LPDIRECTDRAW3 This)
1168 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1174 static HRESULT WINAPI
1175 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This)
1177 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1183 static HRESULT WINAPI
1184 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd,
1187 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1194 static HRESULT WINAPI
1195 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd,
1198 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1205 static HRESULT WINAPI
1206 IDirectDraw3Impl_SetCooperativeLevel(LPDIRECTDRAW3 This, HWND hWnd,
1209 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1216 static HRESULT WINAPI
1217 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd,
1220 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1227 static HRESULT WINAPI
1228 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c)
1230 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1237 static HRESULT WINAPI
1238 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c,
1241 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1248 static HRESULT WINAPI
1249 IDirectDraw3Impl_SetDisplayMode(LPDIRECTDRAW3 This, DWORD a, DWORD b, DWORD c,
1252 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1259 static HRESULT WINAPI
1260 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c,
1263 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
1270 static HRESULT WINAPI
1271 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags,
1274 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1281 static HRESULT WINAPI
1282 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags,
1285 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1292 static HRESULT WINAPI
1293 IDirectDraw3Impl_WaitForVerticalBlank(LPDIRECTDRAW3 This, DWORD dwFlags,
1296 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1303 static HRESULT WINAPI
1304 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags,
1307 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
1314 static HRESULT WINAPI
1315 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps,
1316 LPDWORD pdwTotal, LPDWORD pdwFree)
1319 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1321 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1325 &Caps2, pdwTotal, pdwFree);
1328 static HRESULT WINAPI
1329 IDirectDraw3Impl_GetAvailableVidMem(LPDIRECTDRAW3 This, LPDDSCAPS pCaps,
1330 LPDWORD pdwTotal, LPDWORD pdwFree)
1333 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1335 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1339 &Caps2, pdwTotal, pdwFree);
1342 static HRESULT WINAPI
1343 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps,
1344 LPDWORD pdwTotal, LPDWORD pdwFree)
1346 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1350 pCaps, pdwTotal, pdwFree);
1353 static HRESULT WINAPI
1354 IDirectDraw3Impl_GetSurfaceFromDC(LPDIRECTDRAW3 This, HDC hDC,
1355 LPDIRECTDRAWSURFACE *pSurf)
1357 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
1361 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1364 static HRESULT WINAPI
1365 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC,
1366 LPDIRECTDRAWSURFACE4 *pSurf)
1368 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
1372 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1375 static HRESULT WINAPI
1376 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This)
1378 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
1384 static HRESULT WINAPI
1385 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This)
1387 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1393 static HRESULT WINAPI
1394 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This,
1395 LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags)
1397 DDDEVICEIDENTIFIER2 DDDI2;
1400 hr = IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl,
1406 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI);
1411 const IDirectDrawVtbl IDirectDraw1_Vtbl =
1413 IDirectDrawImpl_QueryInterface,
1414 IDirectDrawImpl_AddRef,
1415 IDirectDrawImpl_Release,
1416 IDirectDrawImpl_Compact,
1417 IDirectDrawImpl_CreateClipper,
1418 IDirectDrawImpl_CreatePalette,
1419 IDirectDrawImpl_CreateSurface,
1420 IDirectDrawImpl_DuplicateSurface,
1421 IDirectDrawImpl_EnumDisplayModes,
1422 IDirectDrawImpl_EnumSurfaces,
1423 IDirectDrawImpl_FlipToGDISurface,
1424 IDirectDrawImpl_GetCaps,
1425 IDirectDrawImpl_GetDisplayMode,
1426 IDirectDrawImpl_GetFourCCCodes,
1427 IDirectDrawImpl_GetGDISurface,
1428 IDirectDrawImpl_GetMonitorFrequency,
1429 IDirectDrawImpl_GetScanLine,
1430 IDirectDrawImpl_GetVerticalBlankStatus,
1431 IDirectDrawImpl_Initialize,
1432 IDirectDrawImpl_RestoreDisplayMode,
1433 IDirectDrawImpl_SetCooperativeLevel,
1434 IDirectDrawImpl_SetDisplayMode,
1435 IDirectDrawImpl_WaitForVerticalBlank,
1438 const IDirectDraw2Vtbl IDirectDraw2_Vtbl =
1440 IDirectDraw2Impl_QueryInterface,
1441 IDirectDraw2Impl_AddRef,
1442 IDirectDraw2Impl_Release,
1443 IDirectDraw2Impl_Compact,
1444 IDirectDraw2Impl_CreateClipper,
1445 IDirectDraw2Impl_CreatePalette,
1446 IDirectDraw2Impl_CreateSurface,
1447 IDirectDraw2Impl_DuplicateSurface,
1448 IDirectDraw2Impl_EnumDisplayModes,
1449 IDirectDraw2Impl_EnumSurfaces,
1450 IDirectDraw2Impl_FlipToGDISurface,
1451 IDirectDraw2Impl_GetCaps,
1452 IDirectDraw2Impl_GetDisplayMode,
1453 IDirectDraw2Impl_GetFourCCCodes,
1454 IDirectDraw2Impl_GetGDISurface,
1455 IDirectDraw2Impl_GetMonitorFrequency,
1456 IDirectDraw2Impl_GetScanLine,
1457 IDirectDraw2Impl_GetVerticalBlankStatus,
1458 IDirectDraw2Impl_Initialize,
1459 IDirectDraw2Impl_RestoreDisplayMode,
1460 IDirectDraw2Impl_SetCooperativeLevel,
1461 IDirectDraw2Impl_SetDisplayMode,
1462 IDirectDraw2Impl_WaitForVerticalBlank,
1463 IDirectDraw2Impl_GetAvailableVidMem
1466 const IDirectDraw3Vtbl IDirectDraw3_Vtbl =
1468 IDirectDraw3Impl_QueryInterface,
1469 IDirectDraw3Impl_AddRef,
1470 IDirectDraw3Impl_Release,
1471 IDirectDraw3Impl_Compact,
1472 IDirectDraw3Impl_CreateClipper,
1473 IDirectDraw3Impl_CreatePalette,
1474 IDirectDraw3Impl_CreateSurface,
1475 IDirectDraw3Impl_DuplicateSurface,
1476 IDirectDraw3Impl_EnumDisplayModes,
1477 IDirectDraw3Impl_EnumSurfaces,
1478 IDirectDraw3Impl_FlipToGDISurface,
1479 IDirectDraw3Impl_GetCaps,
1480 IDirectDraw3Impl_GetDisplayMode,
1481 IDirectDraw3Impl_GetFourCCCodes,
1482 IDirectDraw3Impl_GetGDISurface,
1483 IDirectDraw3Impl_GetMonitorFrequency,
1484 IDirectDraw3Impl_GetScanLine,
1485 IDirectDraw3Impl_GetVerticalBlankStatus,
1486 IDirectDraw3Impl_Initialize,
1487 IDirectDraw3Impl_RestoreDisplayMode,
1488 IDirectDraw3Impl_SetCooperativeLevel,
1489 IDirectDraw3Impl_SetDisplayMode,
1490 IDirectDraw3Impl_WaitForVerticalBlank,
1491 IDirectDraw3Impl_GetAvailableVidMem,
1492 IDirectDraw3Impl_GetSurfaceFromDC,
1495 const IDirectDraw4Vtbl IDirectDraw4_Vtbl =
1497 IDirectDraw4Impl_QueryInterface,
1498 IDirectDraw4Impl_AddRef,
1499 IDirectDraw4Impl_Release,
1500 IDirectDraw4Impl_Compact,
1501 IDirectDraw4Impl_CreateClipper,
1502 IDirectDraw4Impl_CreatePalette,
1503 IDirectDraw4Impl_CreateSurface,
1504 IDirectDraw4Impl_DuplicateSurface,
1505 IDirectDraw4Impl_EnumDisplayModes,
1506 IDirectDraw4Impl_EnumSurfaces,
1507 IDirectDraw4Impl_FlipToGDISurface,
1508 IDirectDraw4Impl_GetCaps,
1509 IDirectDraw4Impl_GetDisplayMode,
1510 IDirectDraw4Impl_GetFourCCCodes,
1511 IDirectDraw4Impl_GetGDISurface,
1512 IDirectDraw4Impl_GetMonitorFrequency,
1513 IDirectDraw4Impl_GetScanLine,
1514 IDirectDraw4Impl_GetVerticalBlankStatus,
1515 IDirectDraw4Impl_Initialize,
1516 IDirectDraw4Impl_RestoreDisplayMode,
1517 IDirectDraw4Impl_SetCooperativeLevel,
1518 IDirectDraw4Impl_SetDisplayMode,
1519 IDirectDraw4Impl_WaitForVerticalBlank,
1520 IDirectDraw4Impl_GetAvailableVidMem,
1521 IDirectDraw4Impl_GetSurfaceFromDC,
1522 IDirectDraw4Impl_RestoreAllSurfaces,
1523 IDirectDraw4Impl_TestCooperativeLevel,
1524 IDirectDraw4Impl_GetDeviceIdentifier