comctl32: Also generate an alpha channel when replacing an image or icon in an imagelist.
[wine/multimedia.git] / dlls / ddraw / ddraw_thunks.c
blob28991d1aeedf98cfd8567d3dfd75a30a494ad29c
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
19 #include "config.h"
20 #include "wine/port.h"
22 #include <assert.h>
23 #include <stdarg.h>
24 #include <string.h>
25 #include <stdlib.h>
27 #define COBJMACROS
28 #define NONAMELESSUNION
30 #include "windef.h"
31 #include "winbase.h"
32 #include "winerror.h"
33 #include "wingdi.h"
34 #include "wine/exception.h"
36 #include "ddraw.h"
37 #include "d3d.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 HRESULT WINAPI
46 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
48 return IDirectDraw7_QueryInterface((IDirectDraw7 *)ddraw_from_ddraw1(This), iid, ppObj);
51 static HRESULT WINAPI
52 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
54 return IDirectDraw7_QueryInterface((IDirectDraw7 *)ddraw_from_ddraw2(This), iid, ppObj);
57 static HRESULT WINAPI
58 IDirectDraw3Impl_QueryInterface(LPDIRECTDRAW3 This, REFIID iid, LPVOID *ppObj)
60 return IDirectDraw7_QueryInterface((IDirectDraw7 *)ddraw_from_ddraw3(This), iid, ppObj);
63 static HRESULT WINAPI
64 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
66 return IDirectDraw7_QueryInterface((IDirectDraw7 *)ddraw_from_ddraw4(This), iid, ppObj);
69 static ULONG WINAPI
70 IDirectDrawImpl_AddRef(LPDIRECTDRAW iface)
72 IDirectDrawImpl *This = ddraw_from_ddraw1(iface);
73 ULONG ref = InterlockedIncrement(&This->ref1);
75 TRACE("(%p) : incrementing IDirectDraw refcount from %u.\n", This, ref -1);
77 if(ref == 1) InterlockedIncrement(&This->numIfaces);
79 return ref;
82 static ULONG WINAPI
83 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface)
85 IDirectDrawImpl *This = ddraw_from_ddraw2(iface);
86 ULONG ref = InterlockedIncrement(&This->ref2);
88 TRACE("(%p) : incrementing IDirectDraw2 refcount from %u.\n", This, ref -1);
90 if(ref == 1) InterlockedIncrement(&This->numIfaces);
92 return ref;
95 static ULONG WINAPI
96 IDirectDraw3Impl_AddRef(LPDIRECTDRAW3 iface)
98 IDirectDrawImpl *This = ddraw_from_ddraw3(iface);
99 ULONG ref = InterlockedIncrement(&This->ref3);
101 TRACE("(%p) : incrementing IDirectDraw3 refcount from %u.\n", This, ref -1);
103 if(ref == 1) InterlockedIncrement(&This->numIfaces);
105 return ref;
108 static ULONG WINAPI
109 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 iface)
111 IDirectDrawImpl *This = ddraw_from_ddraw4(iface);
112 ULONG ref = InterlockedIncrement(&This->ref4);
114 TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This, ref -1);
116 if(ref == 1) InterlockedIncrement(&This->numIfaces);
118 return ref;
121 static ULONG WINAPI
122 IDirectDrawImpl_Release(LPDIRECTDRAW iface)
124 IDirectDrawImpl *This = ddraw_from_ddraw1(iface);
125 ULONG ref = InterlockedDecrement(&This->ref1);
127 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw refcount from %u.\n", This, ref +1);
129 if(ref == 0)
131 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
132 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
135 return ref;
138 static ULONG WINAPI
139 IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface)
141 IDirectDrawImpl *This = ddraw_from_ddraw2(iface);
142 ULONG ref = InterlockedDecrement(&This->ref2);
144 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw2 refcount from %u.\n", This, ref +1);
146 if(ref == 0)
148 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
149 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
152 return ref;
155 static ULONG WINAPI
156 IDirectDraw3Impl_Release(LPDIRECTDRAW3 iface)
158 IDirectDrawImpl *This = ddraw_from_ddraw3(iface);
159 ULONG ref = InterlockedDecrement(&This->ref3);
161 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw3 refcount from %u.\n", This, ref +1);
163 if(ref == 0)
165 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
166 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
169 return ref;
172 static ULONG WINAPI
173 IDirectDraw4Impl_Release(LPDIRECTDRAW4 iface)
175 IDirectDrawImpl *This = ddraw_from_ddraw4(iface);
176 ULONG ref = InterlockedDecrement(&This->ref4);
178 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This, ref +1);
180 if(ref == 0)
182 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
183 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
186 return ref;
189 static HRESULT WINAPI
190 IDirectDrawImpl_Compact(LPDIRECTDRAW This)
192 return IDirectDraw7_Compact((IDirectDraw7 *)ddraw_from_ddraw1(This));
195 static HRESULT WINAPI
196 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
198 return IDirectDraw7_Compact((IDirectDraw7 *)ddraw_from_ddraw2(This));
201 static HRESULT WINAPI
202 IDirectDraw3Impl_Compact(LPDIRECTDRAW3 This)
204 return IDirectDraw7_Compact((IDirectDraw7 *)ddraw_from_ddraw3(This));
207 static HRESULT WINAPI
208 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
210 return IDirectDraw7_Compact((IDirectDraw7 *)ddraw_from_ddraw4(This));
213 static HRESULT WINAPI
214 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
215 LPDIRECTDRAWCLIPPER *ppClipper,
216 IUnknown *pUnkOuter)
218 return IDirectDraw7_CreateClipper((IDirectDraw7 *)ddraw_from_ddraw1(This), dwFlags, ppClipper, pUnkOuter);
221 static HRESULT WINAPI
222 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
223 LPDIRECTDRAWCLIPPER *ppClipper,
224 IUnknown *pUnkOuter)
226 return IDirectDraw7_CreateClipper((IDirectDraw7 *)ddraw_from_ddraw2(This), dwFlags, ppClipper, pUnkOuter);
229 static HRESULT WINAPI
230 IDirectDraw3Impl_CreateClipper(LPDIRECTDRAW3 This, DWORD dwFlags,
231 LPDIRECTDRAWCLIPPER *ppClipper,
232 IUnknown *pUnkOuter)
234 return IDirectDraw7_CreateClipper((IDirectDraw7 *)ddraw_from_ddraw3(This), dwFlags, ppClipper, pUnkOuter);
237 static HRESULT WINAPI
238 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
239 LPDIRECTDRAWCLIPPER *ppClipper,
240 IUnknown *pUnkOuter)
242 return IDirectDraw7_CreateClipper((IDirectDraw7 *)ddraw_from_ddraw4(This), dwFlags, ppClipper, pUnkOuter);
245 static HRESULT WINAPI
246 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
247 LPPALETTEENTRY pEntries,
248 LPDIRECTDRAWPALETTE *ppPalette,
249 IUnknown *pUnkOuter)
251 HRESULT hr;
252 hr = IDirectDraw7_CreatePalette((IDirectDraw7 *)ddraw_from_ddraw1(This), dwFlags, pEntries, ppPalette, pUnkOuter);
253 if(SUCCEEDED(hr) && *ppPalette)
255 IDirectDrawPaletteImpl *impl = (IDirectDrawPaletteImpl *)*ppPalette;
256 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw1(This));
257 impl->ifaceToRelease = NULL;
260 return hr;
263 static HRESULT WINAPI
264 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
265 LPPALETTEENTRY pEntries,
266 LPDIRECTDRAWPALETTE *ppPalette,
267 IUnknown *pUnkOuter)
269 HRESULT hr;
270 hr = IDirectDraw7_CreatePalette((IDirectDraw7 *)ddraw_from_ddraw2(This), dwFlags, pEntries, ppPalette, pUnkOuter);
271 if(SUCCEEDED(hr) && *ppPalette)
273 IDirectDrawPaletteImpl *impl = (IDirectDrawPaletteImpl *)*ppPalette;
274 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw2(This));
275 impl->ifaceToRelease = NULL;
277 return hr;
280 static HRESULT WINAPI
281 IDirectDraw3Impl_CreatePalette(LPDIRECTDRAW3 This, DWORD dwFlags,
282 LPPALETTEENTRY pEntries,
283 LPDIRECTDRAWPALETTE *ppPalette,
284 IUnknown *pUnkOuter)
286 HRESULT hr;
287 hr = IDirectDraw7_CreatePalette((IDirectDraw7 *)ddraw_from_ddraw3(This), dwFlags, pEntries, ppPalette, pUnkOuter);
288 if(SUCCEEDED(hr) && *ppPalette)
290 IDirectDrawPaletteImpl *impl = (IDirectDrawPaletteImpl *)*ppPalette;
291 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw3(This));
292 IDirectDraw4_AddRef(This);
293 impl->ifaceToRelease = (IUnknown *) This;
295 return hr;
298 static HRESULT WINAPI
299 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
300 LPPALETTEENTRY pEntries,
301 LPDIRECTDRAWPALETTE *ppPalette,
302 IUnknown *pUnkOuter)
304 HRESULT hr;
305 hr = IDirectDraw7_CreatePalette((IDirectDraw7 *)ddraw_from_ddraw4(This), dwFlags, pEntries, ppPalette, pUnkOuter);
306 if(SUCCEEDED(hr) && *ppPalette)
308 IDirectDrawPaletteImpl *impl = (IDirectDrawPaletteImpl *)*ppPalette;
309 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw4(This));
310 IDirectDraw4_AddRef(This);
311 impl->ifaceToRelease = (IUnknown *) This;
313 return hr;
316 /* Must set all attached surfaces (e.g. mipmaps) versions as well */
317 static void set_surf_version(IDirectDrawSurfaceImpl *surf, int version)
319 int i;
320 TRACE("%p->version(%d) = %d\n", surf, surf->version, version);
321 surf->version = version;
322 for(i = 0; i < MAX_COMPLEX_ATTACHED; i++)
324 if(!surf->complex_array[i]) break;
325 set_surf_version(surf->complex_array[i], version);
327 while( (surf = surf->next_attached) )
329 set_surf_version(surf, version);
333 static HRESULT WINAPI
334 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
335 LPDIRECTDRAWSURFACE *ppSurface,
336 IUnknown *pUnkOuter)
338 LPDIRECTDRAWSURFACE7 pSurface7;
339 IDirectDrawSurfaceImpl *impl;
340 HRESULT hr;
342 /* Remove front buffer flag, this causes failure in v7, and its added to normal
343 * primaries anyway
345 pSDesc->ddsCaps.dwCaps &= ~DDSCAPS_FRONTBUFFER;
346 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
347 * since the data layout is the same */
348 hr = IDirectDraw7_CreateSurface((IDirectDraw7 *)ddraw_from_ddraw1(This),
349 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
350 if (FAILED(hr))
352 *ppSurface = NULL;
353 return hr;
356 impl = (IDirectDrawSurfaceImpl *)pSurface7;
357 *ppSurface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_vtbl;
358 set_surf_version(impl, 1);
359 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw1(This));
360 impl->ifaceToRelease = NULL;
362 return hr;
365 static HRESULT WINAPI
366 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
367 LPDIRECTDRAWSURFACE *ppSurface,
368 IUnknown *pUnkOuter)
370 LPDIRECTDRAWSURFACE7 pSurface7;
371 IDirectDrawSurfaceImpl *impl;
372 HRESULT hr;
374 hr = IDirectDraw7_CreateSurface((IDirectDraw7 *)ddraw_from_ddraw2(This),
375 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
376 if (FAILED(hr))
378 *ppSurface = NULL;
379 return hr;
382 impl = (IDirectDrawSurfaceImpl *)pSurface7;
383 *ppSurface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_vtbl;
384 set_surf_version(impl, 2);
385 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw2(This));
386 impl->ifaceToRelease = NULL;
388 return hr;
391 static HRESULT WINAPI
392 IDirectDraw3Impl_CreateSurface(LPDIRECTDRAW3 This, LPDDSURFACEDESC pSDesc,
393 LPDIRECTDRAWSURFACE *ppSurface,
394 IUnknown *pUnkOuter)
396 LPDIRECTDRAWSURFACE7 pSurface7;
397 IDirectDrawSurfaceImpl *impl;
398 HRESULT hr;
400 hr = IDirectDraw7_CreateSurface((IDirectDraw7 *)ddraw_from_ddraw3(This),
401 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
402 if (FAILED(hr))
404 *ppSurface = NULL;
405 return hr;
408 impl = (IDirectDrawSurfaceImpl *)pSurface7;
409 *ppSurface = (IDirectDrawSurface *)&impl->IDirectDrawSurface3_vtbl;
410 set_surf_version(impl, 3);
411 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw3(This));
412 IDirectDraw3_AddRef(This);
413 impl->ifaceToRelease = (IUnknown *) This;
415 return hr;
418 static HRESULT WINAPI
419 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
420 LPDIRECTDRAWSURFACE4 *ppSurface,
421 IUnknown *pUnkOuter)
423 HRESULT hr;
424 IDirectDrawSurfaceImpl *impl;
426 hr = IDirectDraw7_CreateSurface((IDirectDraw7 *)ddraw_from_ddraw4(This),
427 pSDesc, (LPDIRECTDRAWSURFACE7 *)ppSurface, pUnkOuter);
428 impl = (IDirectDrawSurfaceImpl *)*ppSurface;
429 if(SUCCEEDED(hr) && impl)
431 set_surf_version(impl, 4);
432 IDirectDraw7_Release((IDirectDraw7 *)ddraw_from_ddraw4(This));
433 IDirectDraw4_AddRef(This);
434 impl->ifaceToRelease = (IUnknown *) This;
436 return hr;
439 static HRESULT WINAPI
440 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
441 LPDIRECTDRAWSURFACE *ppDst)
443 LPDIRECTDRAWSURFACE7 pDst7;
444 HRESULT hr;
446 hr = IDirectDraw7_DuplicateSurface((IDirectDraw7 *)ddraw_from_ddraw1(This),
447 pSrc ? (IDirectDrawSurface7 *)surface_from_surface3((IDirectDrawSurface3 *)pSrc) : NULL, &pDst7);
449 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
450 * IDirectDrawSurface vtable layout at the beginning */
451 *ppDst = pDst7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pDst7)->IDirectDrawSurface3_vtbl : NULL;
453 return hr;
456 static HRESULT WINAPI
457 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
458 LPDIRECTDRAWSURFACE *ppDst)
460 LPDIRECTDRAWSURFACE7 pDst7;
461 HRESULT hr;
463 hr = IDirectDraw7_DuplicateSurface((IDirectDraw7 *)ddraw_from_ddraw2(This),
464 pSrc ? (IDirectDrawSurface7 *)surface_from_surface3((IDirectDrawSurface3 *)pSrc) : NULL, &pDst7);
466 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
467 * IDirectDrawSurface vtable layout at the beginning */
468 *ppDst = pDst7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pDst7)->IDirectDrawSurface3_vtbl : NULL;
470 return hr;
473 static HRESULT WINAPI
474 IDirectDraw3Impl_DuplicateSurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE pSrc,
475 LPDIRECTDRAWSURFACE *ppDst)
477 LPDIRECTDRAWSURFACE7 pDst7;
478 HRESULT hr;
480 hr = IDirectDraw7_DuplicateSurface((IDirectDraw7 *)ddraw_from_ddraw3(This),
481 pSrc ? (IDirectDrawSurface7 *)surface_from_surface3((IDirectDrawSurface3 *)pSrc) : NULL, &pDst7);
483 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
484 * IDirectDrawSurface vtable layout at the beginning */
485 *ppDst = pDst7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pDst7)->IDirectDrawSurface3_vtbl : NULL;
487 return hr;
490 static HRESULT WINAPI
491 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
492 LPDIRECTDRAWSURFACE4 pSrc,
493 LPDIRECTDRAWSURFACE4 *ppDst)
495 return IDirectDraw7_DuplicateSurface((IDirectDraw7 *)ddraw_from_ddraw4(This),
496 (LPDIRECTDRAWSURFACE7)pSrc, (LPDIRECTDRAWSURFACE7 *)ppDst);
499 struct displaymodescallback_context
501 LPDDENUMMODESCALLBACK func;
502 LPVOID context;
505 static HRESULT CALLBACK
506 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
508 DDSURFACEDESC DDSD;
509 struct displaymodescallback_context *cbcontext = context;
511 memcpy(&DDSD,pDDSD2,sizeof(DDSD));
512 DDSD.dwSize = sizeof(DDSD);
514 return cbcontext->func(&DDSD, cbcontext->context);
517 static HRESULT WINAPI
518 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
519 LPDDSURFACEDESC pDDSD, LPVOID context,
520 LPDDENUMMODESCALLBACK cb)
522 struct displaymodescallback_context cbcontext;
524 cbcontext.func = cb;
525 cbcontext.context = context;
527 return IDirectDraw7_EnumDisplayModes((IDirectDraw7 *)ddraw_from_ddraw1(This),
528 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumDisplayModesCallbackThunk);
531 static HRESULT WINAPI
532 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,
533 LPDDSURFACEDESC pDDSD, LPVOID context,
534 LPDDENUMMODESCALLBACK cb)
536 struct displaymodescallback_context cbcontext;
538 cbcontext.func = cb;
539 cbcontext.context = context;
541 return IDirectDraw7_EnumDisplayModes((IDirectDraw7 *)ddraw_from_ddraw2(This),
542 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumDisplayModesCallbackThunk);
545 static HRESULT WINAPI
546 IDirectDraw3Impl_EnumDisplayModes(LPDIRECTDRAW3 This, DWORD dwFlags,
547 LPDDSURFACEDESC pDDSD, LPVOID context,
548 LPDDENUMMODESCALLBACK cb)
550 struct displaymodescallback_context cbcontext;
552 cbcontext.func = cb;
553 cbcontext.context = context;
555 return IDirectDraw7_EnumDisplayModes((IDirectDraw7 *)ddraw_from_ddraw3(This),
556 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumDisplayModesCallbackThunk);
559 static HRESULT WINAPI
560 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,
561 LPDDSURFACEDESC2 pDDSD, LPVOID context,
562 LPDDENUMMODESCALLBACK2 cb)
564 return IDirectDraw7_EnumDisplayModes((IDirectDraw7 *)ddraw_from_ddraw4(This), dwFlags, pDDSD, context, cb);
567 struct surfacescallback_context
569 LPDDENUMSURFACESCALLBACK func;
570 LPVOID context;
573 static HRESULT CALLBACK
574 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,
575 LPVOID context)
577 struct surfacescallback_context *cbcontext = context;
579 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
580 * IDirectDrawSurface vtable layout at the beginning */
581 return cbcontext->func(
582 pSurf ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pSurf)->IDirectDrawSurface3_vtbl : NULL,
583 (LPDDSURFACEDESC)pDDSD, cbcontext->context);
586 static HRESULT WINAPI
587 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,
588 LPDDSURFACEDESC pDDSD, LPVOID context,
589 LPDDENUMSURFACESCALLBACK cb)
591 struct surfacescallback_context cbcontext;
593 cbcontext.func = cb;
594 cbcontext.context = context;
596 return IDirectDraw7_EnumSurfaces((IDirectDraw7 *)ddraw_from_ddraw1(This),
597 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumSurfacesCallbackThunk);
600 static HRESULT WINAPI
601 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,
602 LPDDSURFACEDESC pDDSD, LPVOID context,
603 LPDDENUMSURFACESCALLBACK cb)
605 struct surfacescallback_context cbcontext;
607 cbcontext.func = cb;
608 cbcontext.context = context;
610 return IDirectDraw7_EnumSurfaces((IDirectDraw7 *)ddraw_from_ddraw2(This),
611 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumSurfacesCallbackThunk);
614 static HRESULT WINAPI
615 IDirectDraw3Impl_EnumSurfaces(LPDIRECTDRAW3 This, DWORD dwFlags,
616 LPDDSURFACEDESC pDDSD, LPVOID context,
617 LPDDENUMSURFACESCALLBACK cb)
619 struct surfacescallback_context cbcontext;
621 cbcontext.func = cb;
622 cbcontext.context = context;
624 return IDirectDraw7_EnumSurfaces((IDirectDraw7 *)ddraw_from_ddraw3(This),
625 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext, EnumSurfacesCallbackThunk);
628 static HRESULT WINAPI
629 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,
630 LPDDSURFACEDESC2 pDDSD, LPVOID context,
631 LPDDENUMSURFACESCALLBACK2 cb)
633 return IDirectDraw7_EnumSurfaces((IDirectDraw7 *)ddraw_from_ddraw4(This),
634 dwFlags, pDDSD, context, (LPDDENUMSURFACESCALLBACK7)cb);
637 static HRESULT WINAPI
638 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This)
640 return IDirectDraw7_FlipToGDISurface((IDirectDraw7 *)ddraw_from_ddraw1(This));
643 static HRESULT WINAPI
644 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This)
646 return IDirectDraw7_FlipToGDISurface((IDirectDraw7 *)ddraw_from_ddraw2(This));
649 static HRESULT WINAPI
650 IDirectDraw3Impl_FlipToGDISurface(LPDIRECTDRAW3 This)
652 return IDirectDraw7_FlipToGDISurface((IDirectDraw7 *)ddraw_from_ddraw3(This));
655 static HRESULT WINAPI
656 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This)
658 return IDirectDraw7_FlipToGDISurface((IDirectDraw7 *)ddraw_from_ddraw4(This));
661 static HRESULT WINAPI
662 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
664 return IDirectDraw7_GetCaps((IDirectDraw7 *)ddraw_from_ddraw1(This), pDDC1, pDDC2);
667 static HRESULT WINAPI
668 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
670 return IDirectDraw7_GetCaps((IDirectDraw7 *)ddraw_from_ddraw2(This), pDDC1, pDDC2);
673 static HRESULT WINAPI
674 IDirectDraw3Impl_GetCaps(LPDIRECTDRAW3 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
676 return IDirectDraw7_GetCaps((IDirectDraw7 *)ddraw_from_ddraw3(This), pDDC1, pDDC2);
679 static HRESULT WINAPI
680 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
682 return IDirectDraw7_GetCaps((IDirectDraw7 *)ddraw_from_ddraw4(This), pDDC1, pDDC2);
685 static HRESULT WINAPI
686 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD)
688 return IDirectDraw7_GetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw1(This), (LPDDSURFACEDESC2)pDDSD);
691 static HRESULT WINAPI
692 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD)
694 return IDirectDraw7_GetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw2(This), (LPDDSURFACEDESC2)pDDSD);
697 static HRESULT WINAPI
698 IDirectDraw3Impl_GetDisplayMode(LPDIRECTDRAW3 This, LPDDSURFACEDESC pDDSD)
700 return IDirectDraw7_GetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw3(This), (LPDDSURFACEDESC2)pDDSD);
703 static HRESULT WINAPI
704 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD)
706 return IDirectDraw7_GetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw4(This), (LPDDSURFACEDESC2)pDDSD);
709 static HRESULT WINAPI
710 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes,
711 LPDWORD lpCodes)
713 return IDirectDraw7_GetFourCCCodes((IDirectDraw7 *)ddraw_from_ddraw1(This), lpNumCodes, lpCodes);
716 static HRESULT WINAPI
717 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes,
718 LPDWORD lpCodes)
720 return IDirectDraw7_GetFourCCCodes((IDirectDraw7 *)ddraw_from_ddraw2(This), lpNumCodes, lpCodes);
723 static HRESULT WINAPI
724 IDirectDraw3Impl_GetFourCCCodes(LPDIRECTDRAW3 This, LPDWORD lpNumCodes,
725 LPDWORD lpCodes)
727 return IDirectDraw7_GetFourCCCodes((IDirectDraw7 *)ddraw_from_ddraw3(This), lpNumCodes, lpCodes);
730 static HRESULT WINAPI
731 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes,
732 LPDWORD lpCodes)
734 return IDirectDraw7_GetFourCCCodes((IDirectDraw7 *)ddraw_from_ddraw4(This), lpNumCodes, lpCodes);
737 static HRESULT WINAPI
738 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf)
740 LPDIRECTDRAWSURFACE7 pSurf7;
741 HRESULT hr;
743 hr = IDirectDraw7_GetGDISurface((IDirectDraw7 *)ddraw_from_ddraw1(This), &pSurf7);
745 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
746 * IDirectDrawSurface vtable layout at the beginning */
747 *ppSurf = pSurf7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pSurf7)->IDirectDrawSurface3_vtbl : NULL;
749 return hr;
752 static HRESULT WINAPI
753 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf)
755 LPDIRECTDRAWSURFACE7 pSurf7;
756 HRESULT hr;
758 hr = IDirectDraw7_GetGDISurface((IDirectDraw7 *)ddraw_from_ddraw2(This), &pSurf7);
760 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
761 * IDirectDrawSurface vtable layout at the beginning */
762 *ppSurf = pSurf7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pSurf7)->IDirectDrawSurface3_vtbl : NULL;
764 return hr;
767 static HRESULT WINAPI
768 IDirectDraw3Impl_GetGDISurface(LPDIRECTDRAW3 This, LPDIRECTDRAWSURFACE *ppSurf)
770 LPDIRECTDRAWSURFACE7 pSurf7;
771 HRESULT hr;
773 hr = IDirectDraw7_GetGDISurface((IDirectDraw7 *)ddraw_from_ddraw3(This), &pSurf7);
775 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
776 * IDirectDrawSurface vtable layout at the beginning */
777 *ppSurf = pSurf7 ? (IDirectDrawSurface *)&((IDirectDrawSurfaceImpl *)pSurf7)->IDirectDrawSurface3_vtbl : NULL;
779 return hr;
782 static HRESULT WINAPI
783 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This,
784 LPDIRECTDRAWSURFACE4 *ppSurf)
786 return IDirectDraw7_GetGDISurface((IDirectDraw7 *)ddraw_from_ddraw4(This), (LPDIRECTDRAWSURFACE7 *)ppSurf);
789 static HRESULT WINAPI
790 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq)
792 return IDirectDraw7_GetMonitorFrequency((IDirectDraw7 *)ddraw_from_ddraw1(This), pdwFreq);
795 static HRESULT WINAPI
796 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq)
798 return IDirectDraw7_GetMonitorFrequency((IDirectDraw7 *)ddraw_from_ddraw2(This), pdwFreq);
801 static HRESULT WINAPI
802 IDirectDraw3Impl_GetMonitorFrequency(LPDIRECTDRAW3 This, LPDWORD pdwFreq)
804 return IDirectDraw7_GetMonitorFrequency((IDirectDraw7 *)ddraw_from_ddraw3(This), pdwFreq);
807 static HRESULT WINAPI
808 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq)
810 return IDirectDraw7_GetMonitorFrequency((IDirectDraw7 *)ddraw_from_ddraw4(This), pdwFreq);
813 static HRESULT WINAPI
814 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine)
816 return IDirectDraw7_GetScanLine((IDirectDraw7 *)ddraw_from_ddraw1(This), pdwLine);
819 static HRESULT WINAPI
820 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine)
822 return IDirectDraw7_GetScanLine((IDirectDraw7 *)ddraw_from_ddraw2(This), pdwLine);
825 static HRESULT WINAPI
826 IDirectDraw3Impl_GetScanLine(LPDIRECTDRAW3 This, LPDWORD pdwLine)
828 return IDirectDraw7_GetScanLine((IDirectDraw7 *)ddraw_from_ddraw3(This), pdwLine);
831 static HRESULT WINAPI
832 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine)
834 return IDirectDraw7_GetScanLine((IDirectDraw7 *)ddraw_from_ddraw4(This), pdwLine);
837 static HRESULT WINAPI
838 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB)
840 return IDirectDraw7_GetVerticalBlankStatus((IDirectDraw7 *)ddraw_from_ddraw1(This), lpbIsInVB);
843 static HRESULT WINAPI
844 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB)
846 return IDirectDraw7_GetVerticalBlankStatus((IDirectDraw7 *)ddraw_from_ddraw2(This), lpbIsInVB);
849 static HRESULT WINAPI
850 IDirectDraw3Impl_GetVerticalBlankStatus(LPDIRECTDRAW3 This, LPBOOL lpbIsInVB)
852 return IDirectDraw7_GetVerticalBlankStatus((IDirectDraw7 *)ddraw_from_ddraw3(This), lpbIsInVB);
855 static HRESULT WINAPI
856 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB)
858 return IDirectDraw7_GetVerticalBlankStatus((IDirectDraw7 *)ddraw_from_ddraw4(This), lpbIsInVB);
861 static HRESULT WINAPI
862 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID)
864 IDirectDrawImpl *This = ddraw_from_ddraw1(iface);
865 HRESULT ret_value;
867 ret_value = IDirectDraw7_Initialize((IDirectDraw7 *)This, pGUID);
869 return ret_value;
872 static HRESULT WINAPI
873 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID)
875 IDirectDrawImpl *This = ddraw_from_ddraw2(iface);
876 HRESULT ret_value;
878 ret_value = IDirectDraw7_Initialize((IDirectDraw7 *)This, pGUID);
880 return ret_value;
883 static HRESULT WINAPI
884 IDirectDraw3Impl_Initialize(LPDIRECTDRAW3 iface, LPGUID pGUID)
886 IDirectDrawImpl *This = ddraw_from_ddraw3(iface);
887 HRESULT ret_value;
889 ret_value = IDirectDraw7_Initialize((IDirectDraw7 *)This, pGUID);
891 return ret_value;
894 static HRESULT WINAPI
895 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID)
897 IDirectDrawImpl *This = ddraw_from_ddraw4(iface);
898 HRESULT ret_value;
900 ret_value = IDirectDraw7_Initialize((IDirectDraw7 *)This, pGUID);
902 return ret_value;
906 static HRESULT WINAPI
907 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This)
909 return IDirectDraw7_RestoreDisplayMode((IDirectDraw7 *)ddraw_from_ddraw1(This));
912 static HRESULT WINAPI
913 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This)
915 return IDirectDraw7_RestoreDisplayMode((IDirectDraw7 *)ddraw_from_ddraw2(This));
918 static HRESULT WINAPI
919 IDirectDraw3Impl_RestoreDisplayMode(LPDIRECTDRAW3 This)
921 return IDirectDraw7_RestoreDisplayMode((IDirectDraw7 *)ddraw_from_ddraw3(This));
924 static HRESULT WINAPI
925 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This)
927 return IDirectDraw7_RestoreDisplayMode((IDirectDraw7 *)ddraw_from_ddraw4(This));
930 static HRESULT WINAPI
931 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd,
932 DWORD dwFlags)
934 return IDirectDraw7_SetCooperativeLevel((IDirectDraw7 *)ddraw_from_ddraw1(This), hWnd, dwFlags);
937 static HRESULT WINAPI
938 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd,
939 DWORD dwFlags)
941 return IDirectDraw7_SetCooperativeLevel((IDirectDraw7 *)ddraw_from_ddraw2(This), hWnd, dwFlags);
944 static HRESULT WINAPI
945 IDirectDraw3Impl_SetCooperativeLevel(LPDIRECTDRAW3 This, HWND hWnd,
946 DWORD dwFlags)
948 return IDirectDraw7_SetCooperativeLevel((IDirectDraw7 *)ddraw_from_ddraw3(This), hWnd, dwFlags);
951 static HRESULT WINAPI
952 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd,
953 DWORD dwFlags)
955 return IDirectDraw7_SetCooperativeLevel((IDirectDraw7 *)ddraw_from_ddraw4(This), hWnd, dwFlags);
958 static HRESULT WINAPI
959 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c)
961 return IDirectDraw7_SetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw1(This), a, b, c, 0, 0);
964 static HRESULT WINAPI
965 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c,
966 DWORD d, DWORD e)
968 return IDirectDraw7_SetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw2(This), a, b, c, d, e);
971 static HRESULT WINAPI
972 IDirectDraw3Impl_SetDisplayMode(LPDIRECTDRAW3 This, DWORD a, DWORD b, DWORD c,
973 DWORD d, DWORD e)
975 return IDirectDraw7_SetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw3(This), a, b, c, d, e);
978 static HRESULT WINAPI
979 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c,
980 DWORD d, DWORD e)
982 return IDirectDraw7_SetDisplayMode((IDirectDraw7 *)ddraw_from_ddraw4(This), a, b, c, d, e);
985 static HRESULT WINAPI
986 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags,
987 HANDLE hEvent)
989 return IDirectDraw7_WaitForVerticalBlank((IDirectDraw7 *)ddraw_from_ddraw1(This), dwFlags, hEvent);
992 static HRESULT WINAPI
993 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags,
994 HANDLE hEvent)
996 return IDirectDraw7_WaitForVerticalBlank((IDirectDraw7 *)ddraw_from_ddraw2(This), dwFlags, hEvent);
999 static HRESULT WINAPI
1000 IDirectDraw3Impl_WaitForVerticalBlank(LPDIRECTDRAW3 This, DWORD dwFlags,
1001 HANDLE hEvent)
1003 return IDirectDraw7_WaitForVerticalBlank((IDirectDraw7 *)ddraw_from_ddraw3(This), dwFlags, hEvent);
1006 static HRESULT WINAPI
1007 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags,
1008 HANDLE hEvent)
1010 return IDirectDraw7_WaitForVerticalBlank((IDirectDraw7 *)ddraw_from_ddraw4(This), dwFlags, hEvent);
1013 static HRESULT WINAPI
1014 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps,
1015 LPDWORD pdwTotal, LPDWORD pdwFree)
1017 DDSCAPS2 Caps2;
1018 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1020 return IDirectDraw7_GetAvailableVidMem((IDirectDraw7 *)ddraw_from_ddraw2(This), &Caps2, pdwTotal, pdwFree);
1023 static HRESULT WINAPI
1024 IDirectDraw3Impl_GetAvailableVidMem(LPDIRECTDRAW3 This, LPDDSCAPS pCaps,
1025 LPDWORD pdwTotal, LPDWORD pdwFree)
1027 DDSCAPS2 Caps2;
1028 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1030 return IDirectDraw7_GetAvailableVidMem((IDirectDraw7 *)ddraw_from_ddraw3(This), &Caps2, pdwTotal, pdwFree);
1033 static HRESULT WINAPI
1034 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps,
1035 LPDWORD pdwTotal, LPDWORD pdwFree)
1037 return IDirectDraw7_GetAvailableVidMem((IDirectDraw7 *)ddraw_from_ddraw4(This), pCaps, pdwTotal, pdwFree);
1040 static HRESULT WINAPI
1041 IDirectDraw3Impl_GetSurfaceFromDC(LPDIRECTDRAW3 This, HDC hDC,
1042 LPDIRECTDRAWSURFACE *pSurf)
1044 return IDirectDraw7_GetSurfaceFromDC((IDirectDraw7 *)ddraw_from_ddraw3(This), hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1047 static HRESULT WINAPI
1048 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC,
1049 LPDIRECTDRAWSURFACE4 *pSurf)
1051 IDirectDrawSurface7 *surf7;
1052 HRESULT hr;
1054 if (!pSurf) return E_INVALIDARG;
1056 hr = IDirectDraw7_GetSurfaceFromDC((IDirectDraw7 *)ddraw_from_ddraw4(This), hDC, &surf7);
1057 *pSurf = surf7 ? (IDirectDrawSurface4 *)&((IDirectDrawSurfaceImpl *)surf7)->IDirectDrawSurface3_vtbl : NULL;
1059 return hr;
1062 static HRESULT WINAPI
1063 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This)
1065 return IDirectDraw7_RestoreAllSurfaces((IDirectDraw7 *)ddraw_from_ddraw4(This));
1068 static HRESULT WINAPI
1069 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This)
1071 return IDirectDraw7_TestCooperativeLevel((IDirectDraw7 *)ddraw_from_ddraw4(This));
1074 static HRESULT WINAPI
1075 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This,
1076 LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags)
1078 DDDEVICEIDENTIFIER2 DDDI2;
1079 HRESULT hr;
1081 hr = IDirectDraw7_GetDeviceIdentifier((IDirectDraw7 *)ddraw_from_ddraw4(This), &DDDI2, dwFlags);
1083 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI);
1085 return hr;
1088 const IDirectDrawVtbl IDirectDraw1_Vtbl =
1090 IDirectDrawImpl_QueryInterface,
1091 IDirectDrawImpl_AddRef,
1092 IDirectDrawImpl_Release,
1093 IDirectDrawImpl_Compact,
1094 IDirectDrawImpl_CreateClipper,
1095 IDirectDrawImpl_CreatePalette,
1096 IDirectDrawImpl_CreateSurface,
1097 IDirectDrawImpl_DuplicateSurface,
1098 IDirectDrawImpl_EnumDisplayModes,
1099 IDirectDrawImpl_EnumSurfaces,
1100 IDirectDrawImpl_FlipToGDISurface,
1101 IDirectDrawImpl_GetCaps,
1102 IDirectDrawImpl_GetDisplayMode,
1103 IDirectDrawImpl_GetFourCCCodes,
1104 IDirectDrawImpl_GetGDISurface,
1105 IDirectDrawImpl_GetMonitorFrequency,
1106 IDirectDrawImpl_GetScanLine,
1107 IDirectDrawImpl_GetVerticalBlankStatus,
1108 IDirectDrawImpl_Initialize,
1109 IDirectDrawImpl_RestoreDisplayMode,
1110 IDirectDrawImpl_SetCooperativeLevel,
1111 IDirectDrawImpl_SetDisplayMode,
1112 IDirectDrawImpl_WaitForVerticalBlank,
1115 const IDirectDraw2Vtbl IDirectDraw2_Vtbl =
1117 IDirectDraw2Impl_QueryInterface,
1118 IDirectDraw2Impl_AddRef,
1119 IDirectDraw2Impl_Release,
1120 IDirectDraw2Impl_Compact,
1121 IDirectDraw2Impl_CreateClipper,
1122 IDirectDraw2Impl_CreatePalette,
1123 IDirectDraw2Impl_CreateSurface,
1124 IDirectDraw2Impl_DuplicateSurface,
1125 IDirectDraw2Impl_EnumDisplayModes,
1126 IDirectDraw2Impl_EnumSurfaces,
1127 IDirectDraw2Impl_FlipToGDISurface,
1128 IDirectDraw2Impl_GetCaps,
1129 IDirectDraw2Impl_GetDisplayMode,
1130 IDirectDraw2Impl_GetFourCCCodes,
1131 IDirectDraw2Impl_GetGDISurface,
1132 IDirectDraw2Impl_GetMonitorFrequency,
1133 IDirectDraw2Impl_GetScanLine,
1134 IDirectDraw2Impl_GetVerticalBlankStatus,
1135 IDirectDraw2Impl_Initialize,
1136 IDirectDraw2Impl_RestoreDisplayMode,
1137 IDirectDraw2Impl_SetCooperativeLevel,
1138 IDirectDraw2Impl_SetDisplayMode,
1139 IDirectDraw2Impl_WaitForVerticalBlank,
1140 IDirectDraw2Impl_GetAvailableVidMem
1143 const IDirectDraw3Vtbl IDirectDraw3_Vtbl =
1145 IDirectDraw3Impl_QueryInterface,
1146 IDirectDraw3Impl_AddRef,
1147 IDirectDraw3Impl_Release,
1148 IDirectDraw3Impl_Compact,
1149 IDirectDraw3Impl_CreateClipper,
1150 IDirectDraw3Impl_CreatePalette,
1151 IDirectDraw3Impl_CreateSurface,
1152 IDirectDraw3Impl_DuplicateSurface,
1153 IDirectDraw3Impl_EnumDisplayModes,
1154 IDirectDraw3Impl_EnumSurfaces,
1155 IDirectDraw3Impl_FlipToGDISurface,
1156 IDirectDraw3Impl_GetCaps,
1157 IDirectDraw3Impl_GetDisplayMode,
1158 IDirectDraw3Impl_GetFourCCCodes,
1159 IDirectDraw3Impl_GetGDISurface,
1160 IDirectDraw3Impl_GetMonitorFrequency,
1161 IDirectDraw3Impl_GetScanLine,
1162 IDirectDraw3Impl_GetVerticalBlankStatus,
1163 IDirectDraw3Impl_Initialize,
1164 IDirectDraw3Impl_RestoreDisplayMode,
1165 IDirectDraw3Impl_SetCooperativeLevel,
1166 IDirectDraw3Impl_SetDisplayMode,
1167 IDirectDraw3Impl_WaitForVerticalBlank,
1168 IDirectDraw3Impl_GetAvailableVidMem,
1169 IDirectDraw3Impl_GetSurfaceFromDC,
1172 const IDirectDraw4Vtbl IDirectDraw4_Vtbl =
1174 IDirectDraw4Impl_QueryInterface,
1175 IDirectDraw4Impl_AddRef,
1176 IDirectDraw4Impl_Release,
1177 IDirectDraw4Impl_Compact,
1178 IDirectDraw4Impl_CreateClipper,
1179 IDirectDraw4Impl_CreatePalette,
1180 IDirectDraw4Impl_CreateSurface,
1181 IDirectDraw4Impl_DuplicateSurface,
1182 IDirectDraw4Impl_EnumDisplayModes,
1183 IDirectDraw4Impl_EnumSurfaces,
1184 IDirectDraw4Impl_FlipToGDISurface,
1185 IDirectDraw4Impl_GetCaps,
1186 IDirectDraw4Impl_GetDisplayMode,
1187 IDirectDraw4Impl_GetFourCCCodes,
1188 IDirectDraw4Impl_GetGDISurface,
1189 IDirectDraw4Impl_GetMonitorFrequency,
1190 IDirectDraw4Impl_GetScanLine,
1191 IDirectDraw4Impl_GetVerticalBlankStatus,
1192 IDirectDraw4Impl_Initialize,
1193 IDirectDraw4Impl_RestoreDisplayMode,
1194 IDirectDraw4Impl_SetCooperativeLevel,
1195 IDirectDraw4Impl_SetDisplayMode,
1196 IDirectDraw4Impl_WaitForVerticalBlank,
1197 IDirectDraw4Impl_GetAvailableVidMem,
1198 IDirectDraw4Impl_GetSurfaceFromDC,
1199 IDirectDraw4Impl_RestoreAllSurfaces,
1200 IDirectDraw4Impl_TestCooperativeLevel,
1201 IDirectDraw4Impl_GetDeviceIdentifier