wined3d: Use D3DCUBEMAP_FACES consistently in the WINED3D namespace.
[wine/wine64.git] / dlls / ddraw / ddraw_thunks.c
blob1b7fa5b81576f6b9bebd787bda0aa6b45a9c1ede
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 "winnls.h"
33 #include "winerror.h"
34 #include "wingdi.h"
35 #include "wine/exception.h"
36 #include "excpt.h"
38 #include "ddraw.h"
39 #include "d3d.h"
41 #include "ddraw_private.h"
42 #include "wine/debug.h"
44 WINE_DEFAULT_DEBUG_CHANNEL(ddraw_thunk);
45 WINE_DECLARE_DEBUG_CHANNEL(ddraw);
47 static HRESULT WINAPI
48 IDirectDrawImpl_QueryInterface(LPDIRECTDRAW This, REFIID iid, LPVOID *ppObj)
50 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
51 IDirectDraw,
52 IDirectDraw7, This),
53 iid, ppObj);
56 static HRESULT WINAPI
57 IDirectDraw2Impl_QueryInterface(LPDIRECTDRAW2 This, REFIID iid, LPVOID *ppObj)
59 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
60 IDirectDraw2,
61 IDirectDraw7, This),
62 iid, ppObj);
66 static HRESULT WINAPI
67 IDirectDraw4Impl_QueryInterface(LPDIRECTDRAW4 This, REFIID iid, LPVOID *ppObj)
69 return IDirectDraw7_QueryInterface(COM_INTERFACE_CAST(IDirectDrawImpl,
70 IDirectDraw4,
71 IDirectDraw7, This),
72 iid, ppObj);
75 static ULONG WINAPI
76 IDirectDrawImpl_AddRef(LPDIRECTDRAW iface)
78 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
79 ULONG ref = InterlockedIncrement(&This->ref1);
81 TRACE("(%p) : incrementing IDirectDraw refcount from %u.\n", This, ref -1);
83 if(ref == 1) InterlockedIncrement(&This->numIfaces);
85 return ref;
88 static ULONG WINAPI
89 IDirectDraw2Impl_AddRef(LPDIRECTDRAW2 iface)
91 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
92 ULONG ref = InterlockedIncrement(&This->ref2);
94 TRACE("(%p) : incrementing IDirectDraw2 refcount from %u.\n", This, ref -1);
96 if(ref == 1) InterlockedIncrement(&This->numIfaces);
98 return ref;
101 static ULONG WINAPI
102 IDirectDraw4Impl_AddRef(LPDIRECTDRAW4 iface)
104 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
105 ULONG ref = InterlockedIncrement(&This->ref4);
107 TRACE("(%p) : incrementing IDirectDraw4 refcount from %u.\n", This, ref -1);
109 if(ref == 1) InterlockedIncrement(&This->numIfaces);
111 return ref;
114 static ULONG WINAPI
115 IDirectDrawImpl_Release(LPDIRECTDRAW iface)
117 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
118 ULONG ref = InterlockedDecrement(&This->ref1);
120 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw refcount from %u.\n", This, ref +1);
122 if(ref == 0)
124 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
125 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
128 return ref;
131 static ULONG WINAPI
132 IDirectDraw2Impl_Release(LPDIRECTDRAW2 iface)
134 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
135 ULONG ref = InterlockedDecrement(&This->ref2);
137 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw2 refcount from %u.\n", This, ref +1);
139 if(ref == 0)
141 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
142 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
145 return ref;
148 static ULONG WINAPI
149 IDirectDraw4Impl_Release(LPDIRECTDRAW4 iface)
151 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
152 ULONG ref = InterlockedDecrement(&This->ref4);
154 TRACE_(ddraw)("(%p)->() decrementing IDirectDraw4 refcount from %u.\n", This, ref +1);
156 if(ref == 0)
158 ULONG ifacecount = InterlockedDecrement(&This->numIfaces);
159 if(ifacecount == 0) IDirectDrawImpl_Destroy(This);
162 return ref;
165 static HRESULT WINAPI
166 IDirectDrawImpl_Compact(LPDIRECTDRAW This)
168 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
169 IDirectDraw, IDirectDraw7,
170 This));
173 static HRESULT WINAPI
174 IDirectDraw2Impl_Compact(LPDIRECTDRAW2 This)
176 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
177 IDirectDraw2, IDirectDraw7,
178 This));
181 static HRESULT WINAPI
182 IDirectDraw4Impl_Compact(LPDIRECTDRAW4 This)
184 return IDirectDraw7_Compact(COM_INTERFACE_CAST(IDirectDrawImpl,
185 IDirectDraw4, IDirectDraw7,
186 This));
189 static HRESULT WINAPI
190 IDirectDrawImpl_CreateClipper(LPDIRECTDRAW This, DWORD dwFlags,
191 LPDIRECTDRAWCLIPPER *ppClipper,
192 IUnknown *pUnkOuter)
194 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
195 IDirectDraw,
196 IDirectDraw7,
197 This),
198 dwFlags, ppClipper, pUnkOuter);
201 static HRESULT WINAPI
202 IDirectDraw2Impl_CreateClipper(LPDIRECTDRAW2 This, DWORD dwFlags,
203 LPDIRECTDRAWCLIPPER *ppClipper,
204 IUnknown *pUnkOuter)
206 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
207 IDirectDraw2,
208 IDirectDraw7,
209 This),
210 dwFlags, ppClipper, pUnkOuter);
213 static HRESULT WINAPI
214 IDirectDraw4Impl_CreateClipper(LPDIRECTDRAW4 This, DWORD dwFlags,
215 LPDIRECTDRAWCLIPPER *ppClipper,
216 IUnknown *pUnkOuter)
218 return IDirectDraw7_CreateClipper(COM_INTERFACE_CAST(IDirectDrawImpl,
219 IDirectDraw4,
220 IDirectDraw7,
221 This),
222 dwFlags, ppClipper, pUnkOuter);
225 static HRESULT WINAPI
226 IDirectDrawImpl_CreatePalette(LPDIRECTDRAW This, DWORD dwFlags,
227 LPPALETTEENTRY pEntries,
228 LPDIRECTDRAWPALETTE *ppPalette,
229 IUnknown *pUnkOuter)
231 HRESULT hr;
232 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
233 IDirectDraw,
234 IDirectDraw7,
235 This),
236 dwFlags, pEntries, ppPalette, pUnkOuter);
237 if(SUCCEEDED(hr) && *ppPalette)
239 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
240 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
241 IDirectDraw,
242 IDirectDraw7,
243 This));
244 impl->ifaceToRelease = NULL;
247 return hr;
250 static HRESULT WINAPI
251 IDirectDraw2Impl_CreatePalette(LPDIRECTDRAW2 This, DWORD dwFlags,
252 LPPALETTEENTRY pEntries,
253 LPDIRECTDRAWPALETTE *ppPalette,
254 IUnknown *pUnkOuter)
256 HRESULT hr;
257 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
258 IDirectDraw2,
259 IDirectDraw7,
260 This),
261 dwFlags, pEntries, ppPalette, pUnkOuter);
262 if(SUCCEEDED(hr) && *ppPalette)
264 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
265 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
266 IDirectDraw2,
267 IDirectDraw7,
268 This));
269 impl->ifaceToRelease = NULL;
271 return hr;
274 static HRESULT WINAPI
275 IDirectDraw4Impl_CreatePalette(LPDIRECTDRAW4 This, DWORD dwFlags,
276 LPPALETTEENTRY pEntries,
277 LPDIRECTDRAWPALETTE *ppPalette,
278 IUnknown *pUnkOuter)
280 HRESULT hr;
281 hr = IDirectDraw7_CreatePalette(COM_INTERFACE_CAST(IDirectDrawImpl,
282 IDirectDraw4,
283 IDirectDraw7,
284 This),
285 dwFlags, pEntries, ppPalette, pUnkOuter);
286 if(SUCCEEDED(hr) && *ppPalette)
288 IDirectDrawPaletteImpl *impl = ICOM_OBJECT(IDirectDrawPaletteImpl, IDirectDrawPalette, *ppPalette);
289 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
290 IDirectDraw4,
291 IDirectDraw7,
292 This));
293 IDirectDraw4_AddRef(This);
294 impl->ifaceToRelease = (IUnknown *) This;
296 return hr;
299 static HRESULT WINAPI
300 IDirectDrawImpl_CreateSurface(LPDIRECTDRAW This, LPDDSURFACEDESC pSDesc,
301 LPDIRECTDRAWSURFACE *ppSurface,
302 IUnknown *pUnkOuter)
304 LPDIRECTDRAWSURFACE7 pSurface7;
305 IDirectDrawSurfaceImpl *impl;
306 HRESULT hr;
308 /* the LPDDSURFACEDESC -> LPDDSURFACEDESC2 conversion should be ok,
309 * since the data layout is the same */
310 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
311 IDirectDraw,
312 IDirectDraw7,
313 This),
314 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
316 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
317 * IDirectDrawSurface vtable layout at the beginning */
318 *ppSurface = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
319 IDirectDrawSurface7, IDirectDrawSurface3,
320 pSurface7);
322 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
323 if(SUCCEEDED(hr) && impl)
325 impl->version = 1;
326 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
327 IDirectDraw,
328 IDirectDraw7,
329 This));
330 IDirectDraw_AddRef(This);
331 impl->ifaceToRelease = (IUnknown *) This;
334 return hr;
337 static HRESULT WINAPI
338 IDirectDraw2Impl_CreateSurface(LPDIRECTDRAW2 This, LPDDSURFACEDESC pSDesc,
339 LPDIRECTDRAWSURFACE *ppSurface,
340 IUnknown *pUnkOuter)
342 LPDIRECTDRAWSURFACE7 pSurface7;
343 IDirectDrawSurfaceImpl *impl;
344 HRESULT hr;
346 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
347 IDirectDraw2,
348 IDirectDraw7,
349 This),
350 (LPDDSURFACEDESC2)pSDesc, &pSurface7, pUnkOuter);
352 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
353 * IDirectDrawSurface vtable layout at the beginning */
354 *ppSurface = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
355 IDirectDrawSurface7, IDirectDrawSurface3,
356 pSurface7);
358 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, pSurface7);
359 if(SUCCEEDED(hr) && impl)
361 impl->version = 2;
362 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
363 IDirectDraw2,
364 IDirectDraw7,
365 This));
366 IDirectDraw2_AddRef(This);
367 impl->ifaceToRelease = (IUnknown *) This;
370 return hr;
373 static HRESULT WINAPI
374 IDirectDraw4Impl_CreateSurface(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pSDesc,
375 LPDIRECTDRAWSURFACE4 *ppSurface,
376 IUnknown *pUnkOuter)
378 HRESULT hr;
379 IDirectDrawSurfaceImpl *impl;
381 hr = IDirectDraw7_CreateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
382 IDirectDraw4,
383 IDirectDraw7,
384 This),
385 pSDesc,
386 (LPDIRECTDRAWSURFACE7 *)ppSurface,
387 pUnkOuter);
388 impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, *ppSurface);
389 if(SUCCEEDED(hr) && impl)
391 impl->version = 4;
392 IDirectDraw7_Release(COM_INTERFACE_CAST(IDirectDrawImpl,
393 IDirectDraw4,
394 IDirectDraw7,
395 This));
396 IDirectDraw4_AddRef(This);
397 impl->ifaceToRelease = (IUnknown *) This;
399 return hr;
402 static HRESULT WINAPI
403 IDirectDrawImpl_DuplicateSurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE pSrc,
404 LPDIRECTDRAWSURFACE *ppDst)
406 LPDIRECTDRAWSURFACE7 pDst7;
407 HRESULT hr;
409 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
410 IDirectDraw,
411 IDirectDraw7, This),
412 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
413 IDirectDrawSurface3,
414 IDirectDrawSurface7,
415 pSrc),
416 &pDst7);
418 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
419 * IDirectDrawSurface vtable layout at the beginning */
420 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
421 IDirectDrawSurface3, pDst7);
423 return hr;
426 static HRESULT WINAPI
427 IDirectDraw2Impl_DuplicateSurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE pSrc,
428 LPDIRECTDRAWSURFACE *ppDst)
430 LPDIRECTDRAWSURFACE7 pDst7;
431 HRESULT hr;
433 hr = IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
434 IDirectDraw2,
435 IDirectDraw7, This),
436 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
437 IDirectDrawSurface3,
438 IDirectDrawSurface7,
439 pSrc),
440 &pDst7);
442 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
443 * IDirectDrawSurface vtable layout at the beginning */
444 *ppDst = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
445 IDirectDrawSurface3, pDst7);
447 return hr;
450 static HRESULT WINAPI
451 IDirectDraw4Impl_DuplicateSurface(LPDIRECTDRAW4 This,
452 LPDIRECTDRAWSURFACE4 pSrc,
453 LPDIRECTDRAWSURFACE4 *ppDst)
455 return IDirectDraw7_DuplicateSurface(COM_INTERFACE_CAST(IDirectDrawImpl,
456 IDirectDraw4,
457 IDirectDraw7,
458 This),
459 (LPDIRECTDRAWSURFACE7)pSrc,
460 (LPDIRECTDRAWSURFACE7 *)ppDst);
463 struct displaymodescallback_context
465 LPDDENUMMODESCALLBACK func;
466 LPVOID context;
469 static HRESULT CALLBACK
470 EnumDisplayModesCallbackThunk(LPDDSURFACEDESC2 pDDSD2, LPVOID context)
472 DDSURFACEDESC DDSD;
473 struct displaymodescallback_context *cbcontext = context;
475 memcpy(&DDSD,pDDSD2,sizeof(DDSD));
476 DDSD.dwSize = sizeof(DDSD);
478 return cbcontext->func(&DDSD, cbcontext->context);
481 static HRESULT WINAPI
482 IDirectDrawImpl_EnumDisplayModes(LPDIRECTDRAW This, DWORD dwFlags,
483 LPDDSURFACEDESC pDDSD, LPVOID context,
484 LPDDENUMMODESCALLBACK cb)
486 struct displaymodescallback_context cbcontext;
488 cbcontext.func = cb;
489 cbcontext.context = context;
491 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
492 IDirectDraw,
493 IDirectDraw7,
494 This),
495 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
496 EnumDisplayModesCallbackThunk);
499 static HRESULT WINAPI
500 IDirectDraw2Impl_EnumDisplayModes(LPDIRECTDRAW2 This, DWORD dwFlags,
501 LPDDSURFACEDESC pDDSD, LPVOID context,
502 LPDDENUMMODESCALLBACK cb)
504 struct displaymodescallback_context cbcontext;
506 cbcontext.func = cb;
507 cbcontext.context = context;
509 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
510 IDirectDraw2,
511 IDirectDraw7,
512 This),
513 dwFlags, (LPDDSURFACEDESC2)pDDSD, &cbcontext,
514 EnumDisplayModesCallbackThunk);
517 static HRESULT WINAPI
518 IDirectDraw4Impl_EnumDisplayModes(LPDIRECTDRAW4 This, DWORD dwFlags,
519 LPDDSURFACEDESC2 pDDSD, LPVOID context,
520 LPDDENUMMODESCALLBACK2 cb)
522 return IDirectDraw7_EnumDisplayModes(COM_INTERFACE_CAST(IDirectDrawImpl,
523 IDirectDraw4,
524 IDirectDraw7,
525 This),
526 dwFlags, pDDSD, context, cb);
529 struct surfacescallback_context
531 LPDDENUMSURFACESCALLBACK func;
532 LPVOID context;
535 static HRESULT CALLBACK
536 EnumSurfacesCallbackThunk(LPDIRECTDRAWSURFACE7 pSurf, LPDDSURFACEDESC2 pDDSD,
537 LPVOID context)
539 struct surfacescallback_context *cbcontext = context;
541 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
542 * IDirectDrawSurface vtable layout at the beginning */
543 return cbcontext->func((LPDIRECTDRAWSURFACE)
544 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl,
545 IDirectDrawSurface7,
546 IDirectDrawSurface3, pSurf),
547 (LPDDSURFACEDESC)pDDSD, cbcontext->context);
550 static HRESULT WINAPI
551 IDirectDrawImpl_EnumSurfaces(LPDIRECTDRAW This, DWORD dwFlags,
552 LPDDSURFACEDESC pDDSD, LPVOID context,
553 LPDDENUMSURFACESCALLBACK cb)
555 struct surfacescallback_context cbcontext;
557 cbcontext.func = cb;
558 cbcontext.context = context;
560 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
561 IDirectDraw,
562 IDirectDraw7, This),
563 dwFlags, (LPDDSURFACEDESC2)pDDSD,
564 &cbcontext, EnumSurfacesCallbackThunk);
567 static HRESULT WINAPI
568 IDirectDraw2Impl_EnumSurfaces(LPDIRECTDRAW2 This, DWORD dwFlags,
569 LPDDSURFACEDESC pDDSD, LPVOID context,
570 LPDDENUMSURFACESCALLBACK cb)
572 struct surfacescallback_context cbcontext;
574 cbcontext.func = cb;
575 cbcontext.context = context;
577 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
578 IDirectDraw2,
579 IDirectDraw7, This),
580 dwFlags, (LPDDSURFACEDESC2)pDDSD,
581 &cbcontext, EnumSurfacesCallbackThunk);
584 static HRESULT WINAPI
585 IDirectDraw4Impl_EnumSurfaces(LPDIRECTDRAW4 This, DWORD dwFlags,
586 LPDDSURFACEDESC2 pDDSD, LPVOID context,
587 LPDDENUMSURFACESCALLBACK2 cb)
589 return IDirectDraw7_EnumSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
590 IDirectDraw4,
591 IDirectDraw7, This),
592 dwFlags, pDDSD, context,
593 (LPDDENUMSURFACESCALLBACK7)cb);
596 static HRESULT WINAPI
597 IDirectDrawImpl_FlipToGDISurface(LPDIRECTDRAW This)
599 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
600 IDirectDraw,
601 IDirectDraw7,
602 This));
605 static HRESULT WINAPI
606 IDirectDraw2Impl_FlipToGDISurface(LPDIRECTDRAW2 This)
608 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
609 IDirectDraw2,
610 IDirectDraw7,
611 This));
614 static HRESULT WINAPI
615 IDirectDraw4Impl_FlipToGDISurface(LPDIRECTDRAW4 This)
617 return IDirectDraw7_FlipToGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
618 IDirectDraw4,
619 IDirectDraw7,
620 This));
623 static HRESULT WINAPI
624 IDirectDrawImpl_GetCaps(LPDIRECTDRAW This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
626 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
627 IDirectDraw, IDirectDraw7,
628 This), pDDC1, pDDC2);
631 static HRESULT WINAPI
632 IDirectDraw2Impl_GetCaps(LPDIRECTDRAW2 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
634 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
635 IDirectDraw2, IDirectDraw7,
636 This), pDDC1, pDDC2);
639 static HRESULT WINAPI
640 IDirectDraw4Impl_GetCaps(LPDIRECTDRAW4 This, LPDDCAPS pDDC1, LPDDCAPS pDDC2)
642 return IDirectDraw7_GetCaps(COM_INTERFACE_CAST(IDirectDrawImpl,
643 IDirectDraw4, IDirectDraw7,
644 This), pDDC1, pDDC2);
647 static HRESULT WINAPI
648 IDirectDrawImpl_GetDisplayMode(LPDIRECTDRAW This, LPDDSURFACEDESC pDDSD)
650 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
651 IDirectDraw,
652 IDirectDraw7, This),
653 (LPDDSURFACEDESC2)pDDSD);
656 static HRESULT WINAPI
657 IDirectDraw2Impl_GetDisplayMode(LPDIRECTDRAW2 This, LPDDSURFACEDESC pDDSD)
659 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
660 IDirectDraw2,
661 IDirectDraw7, This),
662 (LPDDSURFACEDESC2)pDDSD);
665 static HRESULT WINAPI
666 IDirectDraw4Impl_GetDisplayMode(LPDIRECTDRAW4 This, LPDDSURFACEDESC2 pDDSD)
668 return IDirectDraw7_GetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
669 IDirectDraw4,
670 IDirectDraw7, This),
671 pDDSD);
674 static HRESULT WINAPI
675 IDirectDrawImpl_GetFourCCCodes(LPDIRECTDRAW This, LPDWORD lpNumCodes,
676 LPDWORD lpCodes)
678 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
679 IDirectDraw,
680 IDirectDraw7,
681 This),
682 lpNumCodes, lpCodes);
685 static HRESULT WINAPI
686 IDirectDraw2Impl_GetFourCCCodes(LPDIRECTDRAW2 This, LPDWORD lpNumCodes,
687 LPDWORD lpCodes)
689 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
690 IDirectDraw2,
691 IDirectDraw7,
692 This),
693 lpNumCodes, lpCodes);
696 static HRESULT WINAPI
697 IDirectDraw4Impl_GetFourCCCodes(LPDIRECTDRAW4 This, LPDWORD lpNumCodes,
698 LPDWORD lpCodes)
700 return IDirectDraw7_GetFourCCCodes(COM_INTERFACE_CAST(IDirectDrawImpl,
701 IDirectDraw4,
702 IDirectDraw7,
703 This),
704 lpNumCodes, lpCodes);
707 static HRESULT WINAPI
708 IDirectDrawImpl_GetGDISurface(LPDIRECTDRAW This, LPDIRECTDRAWSURFACE *ppSurf)
710 LPDIRECTDRAWSURFACE7 pSurf7;
711 HRESULT hr;
713 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
714 IDirectDraw,
715 IDirectDraw7,
716 This), &pSurf7);
718 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
719 * IDirectDrawSurface vtable layout at the beginning */
720 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
721 IDirectDrawSurface3, pSurf7);
723 return hr;
726 static HRESULT WINAPI
727 IDirectDraw2Impl_GetGDISurface(LPDIRECTDRAW2 This, LPDIRECTDRAWSURFACE *ppSurf)
729 LPDIRECTDRAWSURFACE7 pSurf7;
730 HRESULT hr;
732 hr = IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
733 IDirectDraw2,
734 IDirectDraw7,
735 This), &pSurf7);
737 /* This coercion is safe, since the IDirectDrawSurface3 vtable has the
738 * IDirectDrawSurface vtable layout at the beginning */
739 *ppSurf = (LPDIRECTDRAWSURFACE)COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7,
740 IDirectDrawSurface3, pSurf7);
742 return hr;
745 static HRESULT WINAPI
746 IDirectDraw4Impl_GetGDISurface(LPDIRECTDRAW4 This,
747 LPDIRECTDRAWSURFACE4 *ppSurf)
749 return IDirectDraw7_GetGDISurface(COM_INTERFACE_CAST(IDirectDrawImpl,
750 IDirectDraw4,
751 IDirectDraw7,
752 This),
753 (LPDIRECTDRAWSURFACE7 *)ppSurf);
756 static HRESULT WINAPI
757 IDirectDrawImpl_GetMonitorFrequency(LPDIRECTDRAW This, LPDWORD pdwFreq)
759 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
760 IDirectDraw,
761 IDirectDraw7,
762 This),
763 pdwFreq);
766 static HRESULT WINAPI
767 IDirectDraw2Impl_GetMonitorFrequency(LPDIRECTDRAW2 This, LPDWORD pdwFreq)
769 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
770 IDirectDraw2,
771 IDirectDraw7,
772 This),
773 pdwFreq);
776 static HRESULT WINAPI
777 IDirectDraw4Impl_GetMonitorFrequency(LPDIRECTDRAW4 This, LPDWORD pdwFreq)
779 return IDirectDraw7_GetMonitorFrequency(COM_INTERFACE_CAST(IDirectDrawImpl,
780 IDirectDraw4,
781 IDirectDraw7,
782 This),
783 pdwFreq);
786 static HRESULT WINAPI
787 IDirectDrawImpl_GetScanLine(LPDIRECTDRAW This, LPDWORD pdwLine)
789 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
790 IDirectDraw,
791 IDirectDraw7,
792 This), pdwLine);
795 static HRESULT WINAPI
796 IDirectDraw2Impl_GetScanLine(LPDIRECTDRAW2 This, LPDWORD pdwLine)
798 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
799 IDirectDraw2,
800 IDirectDraw7,
801 This), pdwLine);
804 static HRESULT WINAPI
805 IDirectDraw4Impl_GetScanLine(LPDIRECTDRAW4 This, LPDWORD pdwLine)
807 return IDirectDraw7_GetScanLine(COM_INTERFACE_CAST(IDirectDrawImpl,
808 IDirectDraw4,
809 IDirectDraw7,
810 This), pdwLine);
813 static HRESULT WINAPI
814 IDirectDrawImpl_GetVerticalBlankStatus(LPDIRECTDRAW This, LPBOOL lpbIsInVB)
816 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
817 IDirectDraw,
818 IDirectDraw7,
819 This),
820 lpbIsInVB);
823 static HRESULT WINAPI
824 IDirectDraw2Impl_GetVerticalBlankStatus(LPDIRECTDRAW2 This, LPBOOL lpbIsInVB)
826 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
827 IDirectDraw2,
828 IDirectDraw7,
829 This),
830 lpbIsInVB);
833 static HRESULT WINAPI
834 IDirectDraw4Impl_GetVerticalBlankStatus(LPDIRECTDRAW4 This, LPBOOL lpbIsInVB)
836 return IDirectDraw7_GetVerticalBlankStatus(COM_INTERFACE_CAST(IDirectDrawImpl,
837 IDirectDraw4,
838 IDirectDraw7,
839 This),
840 lpbIsInVB);
843 static HRESULT WINAPI
844 IDirectDrawImpl_Initialize(LPDIRECTDRAW iface, LPGUID pGUID)
846 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw, iface);
847 HRESULT ret_value;
849 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
851 return ret_value;
854 static HRESULT WINAPI
855 IDirectDraw2Impl_Initialize(LPDIRECTDRAW2 iface, LPGUID pGUID)
857 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw2, iface);
858 HRESULT ret_value;
860 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
862 return ret_value;
865 static HRESULT WINAPI
866 IDirectDraw4Impl_Initialize(LPDIRECTDRAW4 iface, LPGUID pGUID)
868 ICOM_THIS_FROM(IDirectDrawImpl, IDirectDraw4, iface);
869 HRESULT ret_value;
871 ret_value = IDirectDraw7_Initialize(ICOM_INTERFACE(This, IDirectDraw7), pGUID);
873 return ret_value;
877 static HRESULT WINAPI
878 IDirectDrawImpl_RestoreDisplayMode(LPDIRECTDRAW This)
880 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
881 IDirectDraw,
882 IDirectDraw7,
883 This));
886 static HRESULT WINAPI
887 IDirectDraw2Impl_RestoreDisplayMode(LPDIRECTDRAW2 This)
889 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
890 IDirectDraw2,
891 IDirectDraw7,
892 This));
895 static HRESULT WINAPI
896 IDirectDraw4Impl_RestoreDisplayMode(LPDIRECTDRAW4 This)
898 return IDirectDraw7_RestoreDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
899 IDirectDraw4,
900 IDirectDraw7,
901 This));
904 static HRESULT WINAPI
905 IDirectDrawImpl_SetCooperativeLevel(LPDIRECTDRAW This, HWND hWnd,
906 DWORD dwFlags)
908 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
909 IDirectDraw,
910 IDirectDraw7,
911 This),
912 hWnd, dwFlags);
915 static HRESULT WINAPI
916 IDirectDraw2Impl_SetCooperativeLevel(LPDIRECTDRAW2 This, HWND hWnd,
917 DWORD dwFlags)
919 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
920 IDirectDraw2,
921 IDirectDraw7,
922 This),
923 hWnd, dwFlags);
926 static HRESULT WINAPI
927 IDirectDraw4Impl_SetCooperativeLevel(LPDIRECTDRAW4 This, HWND hWnd,
928 DWORD dwFlags)
930 return IDirectDraw7_SetCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
931 IDirectDraw4,
932 IDirectDraw7,
933 This),
934 hWnd, dwFlags);
937 static HRESULT WINAPI
938 IDirectDrawImpl_SetDisplayMode(LPDIRECTDRAW This, DWORD a, DWORD b, DWORD c)
940 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
941 IDirectDraw,
942 IDirectDraw7,
943 This),
944 a, b, c, 0, 0);
947 static HRESULT WINAPI
948 IDirectDraw2Impl_SetDisplayMode(LPDIRECTDRAW2 This, DWORD a, DWORD b, DWORD c,
949 DWORD d, DWORD e)
951 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
952 IDirectDraw2,
953 IDirectDraw7,
954 This),
955 a, b, c, d, e);
958 static HRESULT WINAPI
959 IDirectDraw4Impl_SetDisplayMode(LPDIRECTDRAW4 This, DWORD a, DWORD b, DWORD c,
960 DWORD d, DWORD e)
962 return IDirectDraw7_SetDisplayMode(COM_INTERFACE_CAST(IDirectDrawImpl,
963 IDirectDraw4,
964 IDirectDraw7,
965 This),
966 a, b, c, d, e);
969 static HRESULT WINAPI
970 IDirectDrawImpl_WaitForVerticalBlank(LPDIRECTDRAW This, DWORD dwFlags,
971 HANDLE hEvent)
973 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
974 IDirectDraw,
975 IDirectDraw7,
976 This),
977 dwFlags, hEvent);
980 static HRESULT WINAPI
981 IDirectDraw2Impl_WaitForVerticalBlank(LPDIRECTDRAW2 This, DWORD dwFlags,
982 HANDLE hEvent)
984 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
985 IDirectDraw2,
986 IDirectDraw7,
987 This),
988 dwFlags, hEvent);
991 static HRESULT WINAPI
992 IDirectDraw4Impl_WaitForVerticalBlank(LPDIRECTDRAW4 This, DWORD dwFlags,
993 HANDLE hEvent)
995 return IDirectDraw7_WaitForVerticalBlank(COM_INTERFACE_CAST(IDirectDrawImpl,
996 IDirectDraw4,
997 IDirectDraw7,
998 This),
999 dwFlags, hEvent);
1002 static HRESULT WINAPI
1003 IDirectDraw2Impl_GetAvailableVidMem(LPDIRECTDRAW2 This, LPDDSCAPS pCaps,
1004 LPDWORD pdwTotal, LPDWORD pdwFree)
1006 DDSCAPS2 Caps2;
1007 DDRAW_Convert_DDSCAPS_1_To_2(pCaps, &Caps2);
1009 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1010 IDirectDraw2,
1011 IDirectDraw7,
1012 This),
1013 &Caps2, pdwTotal, pdwFree);
1016 static HRESULT WINAPI
1017 IDirectDraw4Impl_GetAvailableVidMem(LPDIRECTDRAW4 This, LPDDSCAPS2 pCaps,
1018 LPDWORD pdwTotal, LPDWORD pdwFree)
1020 return IDirectDraw7_GetAvailableVidMem(COM_INTERFACE_CAST(IDirectDrawImpl,
1021 IDirectDraw4,
1022 IDirectDraw7,
1023 This),
1024 pCaps, pdwTotal, pdwFree);
1027 static HRESULT WINAPI
1028 IDirectDraw4Impl_GetSurfaceFromDC(LPDIRECTDRAW4 This, HDC hDC,
1029 LPDIRECTDRAWSURFACE4 *pSurf)
1031 return IDirectDraw7_GetSurfaceFromDC(COM_INTERFACE_CAST(IDirectDrawImpl,
1032 IDirectDraw4,
1033 IDirectDraw7,
1034 This),
1035 hDC, (LPDIRECTDRAWSURFACE7 *)pSurf);
1038 static HRESULT WINAPI
1039 IDirectDraw4Impl_RestoreAllSurfaces(LPDIRECTDRAW4 This)
1041 return IDirectDraw7_RestoreAllSurfaces(COM_INTERFACE_CAST(IDirectDrawImpl,
1042 IDirectDraw4,
1043 IDirectDraw7,
1044 This));
1047 static HRESULT WINAPI
1048 IDirectDraw4Impl_TestCooperativeLevel(LPDIRECTDRAW4 This)
1050 return IDirectDraw7_TestCooperativeLevel(COM_INTERFACE_CAST(IDirectDrawImpl,
1051 IDirectDraw4,
1052 IDirectDraw7,
1053 This));
1056 static HRESULT WINAPI
1057 IDirectDraw4Impl_GetDeviceIdentifier(LPDIRECTDRAW4 This,
1058 LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags)
1060 DDDEVICEIDENTIFIER2 DDDI2;
1061 HRESULT hr;
1063 hr = IDirectDraw7_GetDeviceIdentifier(COM_INTERFACE_CAST(IDirectDrawImpl,
1064 IDirectDraw4,
1065 IDirectDraw7,
1066 This),
1067 &DDDI2, dwFlags);
1069 DDRAW_Convert_DDDEVICEIDENTIFIER_2_To_1(&DDDI2, pDDDI);
1071 return hr;
1074 const IDirectDrawVtbl IDirectDraw1_Vtbl =
1076 IDirectDrawImpl_QueryInterface,
1077 IDirectDrawImpl_AddRef,
1078 IDirectDrawImpl_Release,
1079 IDirectDrawImpl_Compact,
1080 IDirectDrawImpl_CreateClipper,
1081 IDirectDrawImpl_CreatePalette,
1082 IDirectDrawImpl_CreateSurface,
1083 IDirectDrawImpl_DuplicateSurface,
1084 IDirectDrawImpl_EnumDisplayModes,
1085 IDirectDrawImpl_EnumSurfaces,
1086 IDirectDrawImpl_FlipToGDISurface,
1087 IDirectDrawImpl_GetCaps,
1088 IDirectDrawImpl_GetDisplayMode,
1089 IDirectDrawImpl_GetFourCCCodes,
1090 IDirectDrawImpl_GetGDISurface,
1091 IDirectDrawImpl_GetMonitorFrequency,
1092 IDirectDrawImpl_GetScanLine,
1093 IDirectDrawImpl_GetVerticalBlankStatus,
1094 IDirectDrawImpl_Initialize,
1095 IDirectDrawImpl_RestoreDisplayMode,
1096 IDirectDrawImpl_SetCooperativeLevel,
1097 IDirectDrawImpl_SetDisplayMode,
1098 IDirectDrawImpl_WaitForVerticalBlank,
1101 const IDirectDraw2Vtbl IDirectDraw2_Vtbl =
1103 IDirectDraw2Impl_QueryInterface,
1104 IDirectDraw2Impl_AddRef,
1105 IDirectDraw2Impl_Release,
1106 IDirectDraw2Impl_Compact,
1107 IDirectDraw2Impl_CreateClipper,
1108 IDirectDraw2Impl_CreatePalette,
1109 IDirectDraw2Impl_CreateSurface,
1110 IDirectDraw2Impl_DuplicateSurface,
1111 IDirectDraw2Impl_EnumDisplayModes,
1112 IDirectDraw2Impl_EnumSurfaces,
1113 IDirectDraw2Impl_FlipToGDISurface,
1114 IDirectDraw2Impl_GetCaps,
1115 IDirectDraw2Impl_GetDisplayMode,
1116 IDirectDraw2Impl_GetFourCCCodes,
1117 IDirectDraw2Impl_GetGDISurface,
1118 IDirectDraw2Impl_GetMonitorFrequency,
1119 IDirectDraw2Impl_GetScanLine,
1120 IDirectDraw2Impl_GetVerticalBlankStatus,
1121 IDirectDraw2Impl_Initialize,
1122 IDirectDraw2Impl_RestoreDisplayMode,
1123 IDirectDraw2Impl_SetCooperativeLevel,
1124 IDirectDraw2Impl_SetDisplayMode,
1125 IDirectDraw2Impl_WaitForVerticalBlank,
1126 IDirectDraw2Impl_GetAvailableVidMem
1129 const IDirectDraw4Vtbl IDirectDraw4_Vtbl =
1131 IDirectDraw4Impl_QueryInterface,
1132 IDirectDraw4Impl_AddRef,
1133 IDirectDraw4Impl_Release,
1134 IDirectDraw4Impl_Compact,
1135 IDirectDraw4Impl_CreateClipper,
1136 IDirectDraw4Impl_CreatePalette,
1137 IDirectDraw4Impl_CreateSurface,
1138 IDirectDraw4Impl_DuplicateSurface,
1139 IDirectDraw4Impl_EnumDisplayModes,
1140 IDirectDraw4Impl_EnumSurfaces,
1141 IDirectDraw4Impl_FlipToGDISurface,
1142 IDirectDraw4Impl_GetCaps,
1143 IDirectDraw4Impl_GetDisplayMode,
1144 IDirectDraw4Impl_GetFourCCCodes,
1145 IDirectDraw4Impl_GetGDISurface,
1146 IDirectDraw4Impl_GetMonitorFrequency,
1147 IDirectDraw4Impl_GetScanLine,
1148 IDirectDraw4Impl_GetVerticalBlankStatus,
1149 IDirectDraw4Impl_Initialize,
1150 IDirectDraw4Impl_RestoreDisplayMode,
1151 IDirectDraw4Impl_SetCooperativeLevel,
1152 IDirectDraw4Impl_SetDisplayMode,
1153 IDirectDraw4Impl_WaitForVerticalBlank,
1154 IDirectDraw4Impl_GetAvailableVidMem,
1155 IDirectDraw4Impl_GetSurfaceFromDC,
1156 IDirectDraw4Impl_RestoreAllSurfaces,
1157 IDirectDraw4Impl_TestCooperativeLevel,
1158 IDirectDraw4Impl_GetDeviceIdentifier