ReactOS 0.4.17-dev-923-g4c9a150
surface.c
Go to the documentation of this file.
1/*
2 * Copyright 2008 Stefan Dösinger for CodeWeavers
3 *
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.
8 *
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.
13 *
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
17 */
18
19#include "wine/debug.h"
20
21#define COBJMACROS
22
23#include "winbase.h"
24#include "wingdi.h"
25
26#include "ddraw.h"
27#include "d3d.h"
28
29#include "ddrawex_private.h"
30
32
33static struct ddrawex_surface *impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface)
34{
36}
37
38static struct ddrawex_surface *unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface);
39
40static struct ddrawex_surface *impl_from_IDirectDrawSurface4(IDirectDrawSurface4 *iface)
41{
43}
44
45static HRESULT WINAPI ddrawex_surface4_QueryInterface(IDirectDrawSurface4 *iface, REFIID riid, void **out)
46{
47 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
48
49 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
50
51 if (!riid)
52 {
53 *out = NULL;
55 }
56
57 if (IsEqualGUID(riid, &IID_IDirectDrawSurface4)
59 {
60 *out = &surface->IDirectDrawSurface4_iface;
61 }
62 else if (IsEqualGUID(riid, &IID_IDirectDrawSurface3)
63 || IsEqualGUID(riid, &IID_IDirectDrawSurface2)
64 || IsEqualGUID(riid, &IID_IDirectDrawSurface))
65 {
66 *out = &surface->IDirectDrawSurface3_iface;
67 }
68 else
69 {
70 if (IsEqualGUID(riid, &IID_IDirectDrawGammaControl))
71 FIXME("Implement IDirectDrawGammaControl in ddrawex.\n");
72 else if (IsEqualGUID(riid, &IID_IDirect3DHALDevice)
73 || IsEqualGUID(riid, &IID_IDirect3DRGBDevice))
74 FIXME("Test IDirect3DDevice in ddrawex.\n");
75 else if (IsEqualGUID(&IID_IDirect3DTexture2, riid)
76 || IsEqualGUID( &IID_IDirect3DTexture, riid))
77 FIXME("Implement IDirect3DTexture in ddrawex.\n");
78
79 *out = NULL;
80 WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
81 return E_NOINTERFACE;
82 }
83
84 IUnknown_AddRef((IUnknown *)*out);
85 return S_OK;
86}
87
88static HRESULT WINAPI ddrawex_surface3_QueryInterface(IDirectDrawSurface3 *iface, REFIID riid, void **out)
89{
90 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
91
92 TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
93
95}
96
97static ULONG WINAPI ddrawex_surface4_AddRef(IDirectDrawSurface4 *iface)
98{
99 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
100 ULONG refcount = InterlockedIncrement(&surface->ref);
101
102 TRACE("%p increasing refcount to %lu.\n", iface, refcount);
103
104 return refcount;
105}
106
107static ULONG WINAPI ddrawex_surface3_AddRef(IDirectDrawSurface3 *iface)
108{
109 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
110
111 TRACE("iface %p.\n", iface);
112
114}
115
116static ULONG WINAPI ddrawex_surface4_Release(IDirectDrawSurface4 *iface)
117{
118 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
119 ULONG refcount = InterlockedDecrement(&surface->ref);
120
121 TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
122
123 if (!refcount)
124 {
125 IDirectDrawSurface4_FreePrivateData(surface->parent, &IID_DDrawexPriv);
126 IDirectDrawSurface4_Release(surface->parent);
127 free(surface);
128 }
129
130 return refcount;
131}
132
133static ULONG WINAPI ddrawex_surface3_Release(IDirectDrawSurface3 *iface)
134{
135 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
136
137 TRACE("iface %p.\n", iface);
138
140}
141
142static HRESULT WINAPI ddrawex_surface4_AddAttachedSurface(IDirectDrawSurface4 *iface,
143 IDirectDrawSurface4 *attachment)
144{
145 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
147
148 TRACE("iface %p, attachment %p.\n", iface, attachment);
149
150 return IDirectDrawSurface4_AddAttachedSurface(surface->parent, attachment_impl->parent);
151}
152
153static HRESULT WINAPI ddrawex_surface3_AddAttachedSurface(IDirectDrawSurface3 *iface,
154 IDirectDrawSurface3 *attachment)
155{
156 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
158
159 TRACE("iface %p, attachment %p.\n", iface, attachment);
160
162 attachment_impl ? &attachment_impl->IDirectDrawSurface4_iface : NULL);
163}
164
165static HRESULT WINAPI ddrawex_surface4_AddOverlayDirtyRect(IDirectDrawSurface4 *iface, RECT *rect)
166{
167 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
168
169 TRACE("iface %p, rect %s.\n", iface, wine_dbgstr_rect(rect));
170
171 return IDirectDrawSurface4_AddOverlayDirtyRect(surface->parent, rect);
172}
173
174static HRESULT WINAPI ddrawex_surface3_AddOverlayDirtyRect(IDirectDrawSurface3 *iface, RECT *rect)
175{
176 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
177
178 TRACE("iface %p, rect %s.\n", iface, wine_dbgstr_rect(rect));
179
181}
182
183static HRESULT WINAPI ddrawex_surface4_Blt(IDirectDrawSurface4 *iface, RECT *dst_rect,
184 IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
185{
188
189 TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#lx, fx %p.\n",
190 iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
191
192 return IDirectDrawSurface4_Blt(dst->parent, dst_rect, src ? src->parent : NULL, src_rect, flags, fx);
193}
194
195static HRESULT WINAPI ddrawex_surface3_Blt(IDirectDrawSurface3 *iface, RECT *dst_rect,
196 IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
197{
200
201 TRACE("iface %p, dst_rect %s, src_surface %p, src_rect %s, flags %#lx, fx %p.\n",
202 iface, wine_dbgstr_rect(dst_rect), src_surface, wine_dbgstr_rect(src_rect), flags, fx);
203
204 return ddrawex_surface4_Blt(&dst->IDirectDrawSurface4_iface, dst_rect,
205 src ? &src->IDirectDrawSurface4_iface : NULL, src_rect, flags, fx);
206}
207
208static HRESULT WINAPI ddrawex_surface4_BltBatch(IDirectDrawSurface4 *iface,
210{
211 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
212
213 TRACE("iface %p, batch %p, count %lu, flags %#lx.\n", iface, batch, count, flags);
214
215 return IDirectDrawSurface4_BltBatch(surface->parent, batch, count, flags);
216}
217
218static HRESULT WINAPI ddrawex_surface3_BltBatch(IDirectDrawSurface3 *iface,
220{
221 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
222
223 TRACE("iface %p, batch %p, count %lu, flags %#lx.\n", iface, batch, count, flags);
224
226}
227
228static HRESULT WINAPI ddrawex_surface4_BltFast(IDirectDrawSurface4 *iface, DWORD dst_x,
229 DWORD dst_y, IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags)
230{
233
234 TRACE("iface %p, dst_x %lu, dst_y %lu, src_surface %p, src_rect %s, flags %#lx.\n",
235 iface, dst_x, dst_y, src_surface, wine_dbgstr_rect(src_rect), flags);
236
237 return IDirectDrawSurface4_BltFast(dst->parent, dst_x, dst_y,
238 src ? src->parent : NULL, src_rect, flags);
239}
240
241static HRESULT WINAPI ddrawex_surface3_BltFast(IDirectDrawSurface3 *iface, DWORD dst_x,
242 DWORD dst_y, IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags)
243{
246
247 TRACE("iface %p, dst_x %lu, dst_y %lu, src_surface %p, src_rect %s, flags %#lx.\n",
248 iface, dst_x, dst_y, src_surface, wine_dbgstr_rect(src_rect), flags);
249
250 return ddrawex_surface4_BltFast(&dst->IDirectDrawSurface4_iface, dst_x, dst_y,
251 src ? &src->IDirectDrawSurface4_iface : NULL, src_rect, flags);
252}
253
254static HRESULT WINAPI ddrawex_surface4_DeleteAttachedSurface(IDirectDrawSurface4 *iface,
255 DWORD flags, IDirectDrawSurface4 *attachment)
256{
257 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
259
260 TRACE("iface %p, flags %#lx, attachment %p.\n", iface, flags, attachment);
261
262 return IDirectDrawSurface4_DeleteAttachedSurface(surface->parent,
263 flags, attachment_impl ? attachment_impl->parent : NULL);
264}
265
266static HRESULT WINAPI ddrawex_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *iface,
267 DWORD flags, IDirectDrawSurface3 *attachment)
268{
269 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
271
272 TRACE("iface %p, flags %#lx, attachment %p.\n", iface, flags, attachment);
273
275 flags, attachment_impl ? &attachment_impl->IDirectDrawSurface4_iface : NULL);
276}
277
279{
281 void *orig_ctx;
282};
283
284static HRESULT WINAPI
285enumsurfaces_wrap_cb(IDirectDrawSurface4 *surf, DDSURFACEDESC2 *desc, void *vctx)
286{
287 struct enumsurfaces_wrap *ctx = vctx;
288 IDirectDrawSurface4 *outer = dds_get_outer(surf);
289
290 TRACE("Returning outer surface %p for inner surface %p\n", outer, surf);
291 IDirectDrawSurface4_AddRef(outer);
292 IDirectDrawSurface4_Release(surf);
293 return ctx->orig_cb(outer, desc, vctx);
294}
295
296static HRESULT WINAPI ddrawex_surface4_EnumAttachedSurfaces(IDirectDrawSurface4 *iface,
298{
299 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
300 struct enumsurfaces_wrap cb_ctx;
301
302 TRACE("iface %p, ctx %p, cb %p.\n", iface, ctx, cb);
303
304 cb_ctx.orig_cb = cb;
305 cb_ctx.orig_ctx = ctx;
306 return IDirectDrawSurface4_EnumAttachedSurfaces(surface->parent, &cb_ctx, enumsurfaces_wrap_cb);
307}
308
310{
312 void *orig_ctx;
313};
314
315static HRESULT WINAPI enumsurfaces_thunk_cb(IDirectDrawSurface4 *surf, DDSURFACEDESC2 *desc2,
316 void *vctx)
317{
319 struct enumsurfaces_thunk *ctx = vctx;
321
322 TRACE("Thunking back to IDirectDrawSurface3\n");
323 IDirectDrawSurface3_AddRef(&surface->IDirectDrawSurface3_iface);
324 IDirectDrawSurface3_Release(surf);
325 DDSD2_to_DDSD(desc2, &desc);
326 return ctx->orig_cb((IDirectDrawSurface *)&surface->IDirectDrawSurface3_iface, &desc, ctx->orig_ctx);
327}
328
329static HRESULT WINAPI ddrawex_surface3_EnumAttachedSurfaces(IDirectDrawSurface3 *iface,
331{
332 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
333 struct enumsurfaces_thunk cb_ctx;
334
335 TRACE("iface %p, ctx %p, cb %p.\n", iface, ctx, cb);
336
337 cb_ctx.orig_cb = cb;
338 cb_ctx.orig_ctx = ctx;
340}
341
342static HRESULT WINAPI ddrawex_surface4_EnumOverlayZOrders(IDirectDrawSurface4 *iface,
344{
345 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
346 struct enumsurfaces_wrap cb_ctx;
347
348 TRACE("iface %p, flags %#lx, ctx %p, cb %p.\n", iface, flags, ctx, cb);
349
350 cb_ctx.orig_cb = cb;
351 cb_ctx.orig_ctx = ctx;
352 return IDirectDrawSurface4_EnumOverlayZOrders(surface->parent, flags, &cb_ctx, enumsurfaces_wrap_cb);
353}
354
355static HRESULT WINAPI ddrawex_surface3_EnumOverlayZOrders(IDirectDrawSurface3 *iface,
357{
358 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
359 struct enumsurfaces_thunk cb_ctx;
360
361 TRACE("iface %p, flags %#lx, ctx %p, cb %p.\n", iface, flags, ctx, cb);
362
363 cb_ctx.orig_cb = cb;
364 cb_ctx.orig_ctx = ctx;
366 flags, &cb_ctx, enumsurfaces_thunk_cb);
367}
368
369static HRESULT WINAPI ddrawex_surface4_Flip(IDirectDrawSurface4 *iface, IDirectDrawSurface4 *dst, DWORD flags)
370{
371 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
373
374 TRACE("iface %p, dst %p, flags %#lx.\n", iface, dst, flags);
375
376 return IDirectDrawSurface4_Flip(surface->parent, dst_impl ? dst_impl->parent : NULL, flags);
377}
378
379static HRESULT WINAPI ddrawex_surface3_Flip(IDirectDrawSurface3 *iface, IDirectDrawSurface3 *dst, DWORD flags)
380{
381 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
383
384 TRACE("iface %p, dst %p, flags %#lx.\n", iface, dst, flags);
385
387 dst_impl ? &dst_impl->IDirectDrawSurface4_iface : NULL, flags);
388}
389
390static HRESULT WINAPI ddrawex_surface4_GetAttachedSurface(IDirectDrawSurface4 *iface,
391 DDSCAPS2 *caps, IDirectDrawSurface4 **attachment)
392{
393 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
394 IDirectDrawSurface4 *inner = NULL;
395 HRESULT hr;
396
397 TRACE("iface %p, caps %p, attachment %p.\n", iface, caps, attachment);
398
399 if (SUCCEEDED(hr = IDirectDrawSurface4_GetAttachedSurface(surface->parent, caps, &inner)))
400 {
401 *attachment = dds_get_outer(inner);
402 IDirectDrawSurface4_AddRef(*attachment);
403 IDirectDrawSurface4_Release(inner);
404 }
405 else
406 {
407 *attachment = NULL;
408 }
409 return hr;
410}
411
412static HRESULT WINAPI ddrawex_surface3_GetAttachedSurface(IDirectDrawSurface3 *iface,
413 DDSCAPS *caps, IDirectDrawSurface3 **attachment)
414{
415 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
416 IDirectDrawSurface4 *surf4;
417 DDSCAPS2 caps2;
418 HRESULT hr;
419
420 TRACE("iface %p, caps %p, attachment %p.\n", iface, caps, attachment);
421
422 memset(&caps2, 0, sizeof(caps2));
423 caps2.dwCaps = caps->dwCaps;
425 {
426 IDirectDrawSurface4_QueryInterface(surf4, &IID_IDirectDrawSurface3, (void **)attachment);
427 IDirectDrawSurface4_Release(surf4);
428 }
429 else
430 {
431 *attachment = NULL;
432 }
433 return hr;
434}
435
436static HRESULT WINAPI ddrawex_surface4_GetBltStatus(IDirectDrawSurface4 *iface, DWORD flags)
437{
438 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
439
440 TRACE("iface %p, flags %#lx.\n", iface, flags);
441
442 return IDirectDrawSurface4_GetBltStatus(surface->parent, flags);
443}
444
445static HRESULT WINAPI ddrawex_surface3_GetBltStatus(IDirectDrawSurface3 *iface, DWORD flags)
446{
447 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
448
449 TRACE("iface %p, flags %#lx.\n", iface, flags);
450
452}
453
454static HRESULT WINAPI ddrawex_surface4_GetCaps(IDirectDrawSurface4 *iface, DDSCAPS2 *caps)
455{
456 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
457
458 TRACE("iface %p, caps %p.\n", iface, caps);
459
460 return IDirectDrawSurface4_GetCaps(surface->parent, caps);
461}
462
463static HRESULT WINAPI ddrawex_surface3_GetCaps(IDirectDrawSurface3 *iface, DDSCAPS *caps)
464{
465 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
466 DDSCAPS2 caps2;
467 HRESULT hr;
468
469 TRACE("iface %p, caps %p.\n", iface, caps);
470
471 memset(&caps2, 0, sizeof(caps2));
472 memset(caps, 0, sizeof(*caps));
473 hr = IDirectDrawSurface4_GetCaps(&surface->IDirectDrawSurface4_iface, &caps2);
474 caps->dwCaps = caps2.dwCaps;
475 return hr;
476}
477
478static HRESULT WINAPI ddrawex_surface4_GetClipper(IDirectDrawSurface4 *iface, IDirectDrawClipper **clipper)
479{
480 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
481
482 TRACE("iface %p, clipper %p.\n", iface, clipper);
483
484 return IDirectDrawSurface4_GetClipper(surface->parent, clipper);
485}
486
487static HRESULT WINAPI ddrawex_surface3_GetClipper(IDirectDrawSurface3 *iface, IDirectDrawClipper **clipper)
488{
489 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
490
491 TRACE("iface %p, clipper %p.\n", iface, clipper);
492
494}
495
497{
498 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
499
500 TRACE("iface %p, flags %#lx, color_key %p.\n", iface, flags, color_key);
501
502 return IDirectDrawSurface4_GetColorKey(surface->parent, flags, color_key);
503}
504
506{
507 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
508
509 TRACE("iface %p, flags %#lx, color_key %p.\n", iface, flags, color_key);
510
512}
513
514static HRESULT WINAPI ddrawex_surface4_GetDC(IDirectDrawSurface4 *iface, HDC *dc)
515{
516 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
517
518 TRACE("iface %p, dc %p.\n", iface, dc);
519
520 if (surface->permanent_dc)
521 {
522 TRACE("Returning stored dc %p.\n", surface->hdc);
523 *dc = surface->hdc;
524 return DD_OK;
525 }
526
527 return IDirectDrawSurface4_GetDC(surface->parent, dc);
528}
529
530static HRESULT WINAPI ddrawex_surface3_GetDC(IDirectDrawSurface3 *iface, HDC *dc)
531{
532 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
533
534 TRACE("iface %p, dc %p.\n", iface, dc);
535
537}
538
539static HRESULT WINAPI ddrawex_surface4_GetFlipStatus(IDirectDrawSurface4 *iface, DWORD flags)
540{
541 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
542
543 TRACE("iface %p, flags %#lx.\n", iface, flags);
544
545 return IDirectDrawSurface4_GetFlipStatus(surface->parent, flags);
546}
547
548static HRESULT WINAPI ddrawex_surface3_GetFlipStatus(IDirectDrawSurface3 *iface, DWORD flags)
549{
550 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
551
552 TRACE("iface %p, flags %#lx.\n", iface, flags);
553
555}
556
557static HRESULT WINAPI ddrawex_surface4_GetOverlayPosition(IDirectDrawSurface4 *iface, LONG *x, LONG *y)
558{
559 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
560
561 TRACE("iface %p, x %p, y %p.\n", iface, x, y);
562
563 return IDirectDrawSurface4_GetOverlayPosition(surface->parent, x, y);
564}
565
566static HRESULT WINAPI ddrawex_surface3_GetOverlayPosition(IDirectDrawSurface3 *iface, LONG *x, LONG *y)
567{
568 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
569
570 TRACE("iface %p, x %p, y %p.\n", iface, x, y);
571
573}
574
575static HRESULT WINAPI ddrawex_surface4_GetPalette(IDirectDrawSurface4 *iface, IDirectDrawPalette **palette)
576{
577 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
578
579 TRACE("iface %p, palette %p.\n", iface, palette);
580
581 return IDirectDrawSurface4_GetPalette(surface->parent, palette);
582}
583
584static HRESULT WINAPI ddrawex_surface3_GetPalette(IDirectDrawSurface3 *iface, IDirectDrawPalette **palette)
585{
586 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
587
588 TRACE("iface %p, palette %p.\n", iface, palette);
589
591}
592
594{
595 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
596
597 TRACE("iface %p, pixel_format %p.\n", iface, pixel_format);
598
599 return IDirectDrawSurface4_GetPixelFormat(surface->parent, pixel_format);
600}
601
603{
604 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
605
606 TRACE("iface %p, pixel_format %p.\n", iface, pixel_format);
607
609}
610
612{
613 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
614 HRESULT hr;
615
616 TRACE("iface %p, desc %p.\n", iface, desc);
617
618 if (SUCCEEDED(hr = IDirectDrawSurface4_GetSurfaceDesc(surface->parent, desc))
619 && surface->permanent_dc)
620 {
621 desc->ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
622 desc->ddsCaps.dwCaps &= ~DDSCAPS_OWNDC;
623 }
624
625 return hr;
626}
627
629{
630 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
631 DDSURFACEDESC2 ddsd2;
632 HRESULT hr;
633
634 TRACE("iface %p, desc %p.\n", iface, desc);
635
636 memset(&ddsd2, 0, sizeof(ddsd2));
637 ddsd2.dwSize = sizeof(ddsd2);
639 DDSD2_to_DDSD(&ddsd2, desc);
640
641 return hr;
642}
643
644static HRESULT WINAPI ddrawex_surface4_Initialize(IDirectDrawSurface4 *iface,
645 IDirectDraw *ddraw, DDSURFACEDESC2 *desc)
646{
647 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
648 IDirectDraw4 *outer_DD4;
649 IDirectDraw4 *inner_DD4;
650 IDirectDraw *inner_DD;
651 HRESULT hr;
652
653 TRACE("iface %p, ddraw %p, desc %p.\n", iface, ddraw, desc);
654
655 IDirectDraw_QueryInterface(ddraw, &IID_IDirectDraw4, (void **)&outer_DD4);
656 inner_DD4 = dd_get_inner(outer_DD4);
657 IDirectDraw4_Release(outer_DD4);
658 IDirectDraw4_QueryInterface(inner_DD4, &IID_IDirectDraw4, (void **)&inner_DD);
659 hr = IDirectDrawSurface4_Initialize(surface->parent, inner_DD, desc);
660 IDirectDraw_Release(inner_DD);
661 return hr;
662}
663
664static HRESULT WINAPI ddrawex_surface3_Initialize(IDirectDrawSurface3 *iface,
665 IDirectDraw *ddraw, DDSURFACEDESC *desc)
666{
667 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
668 DDSURFACEDESC2 ddsd2;
669
670 TRACE("iface %p, ddraw %p, desc %p.\n", iface, ddraw, desc);
671
672 DDSD_to_DDSD2(desc, &ddsd2);
674}
675
676static HRESULT WINAPI ddrawex_surface4_IsLost(IDirectDrawSurface4 *iface)
677{
678 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
679
680 TRACE("iface %p.\n", iface);
681
682 return IDirectDrawSurface4_IsLost(surface->parent);
683}
684
685static HRESULT WINAPI ddrawex_surface3_IsLost(IDirectDrawSurface3 *iface)
686{
687 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
688
689 TRACE("iface %p.\n", iface);
690
692}
693
694static HRESULT WINAPI ddrawex_surface4_Lock(IDirectDrawSurface4 *iface, RECT *rect,
696{
697 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
698 HRESULT hr;
699
700 TRACE("iface %p, rect %s, desc %p, flags %#lx, h %p.\n",
701 iface, wine_dbgstr_rect(rect), desc, flags, h);
702
703 if (SUCCEEDED(hr = IDirectDrawSurface4_Lock(surface->parent, rect, desc, flags, h))
704 && surface->permanent_dc)
705 {
706 desc->ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
707 desc->ddsCaps.dwCaps &= ~DDSCAPS_OWNDC;
708 }
709
710 return hr;
711}
712
713static HRESULT WINAPI ddrawex_surface3_Lock(IDirectDrawSurface3 *iface, RECT *rect,
715{
716 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
717 DDSURFACEDESC2 ddsd2;
718 HRESULT hr;
719
720 TRACE("iface %p, rect %s, desc %p, flags %#lx, h %p.\n",
721 iface, wine_dbgstr_rect(rect), desc, flags, h);
722
723 memset(&ddsd2, 0, sizeof(ddsd2));
724 ddsd2.dwSize = sizeof(ddsd2);
726 DDSD2_to_DDSD(&ddsd2, desc);
727
728 return hr;
729}
730
731static HRESULT WINAPI ddrawex_surface4_ReleaseDC(IDirectDrawSurface4 *iface, HDC dc)
732{
733 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
734
735 TRACE("iface %p, dc %p.\n", iface, dc);
736
737 if (surface->permanent_dc)
738 {
739 TRACE("Surface has a permanent DC, not doing anything.\n");
740 return DD_OK;
741 }
742
743 return IDirectDrawSurface4_ReleaseDC(surface->parent, dc);
744}
745
746static HRESULT WINAPI ddrawex_surface3_ReleaseDC(IDirectDrawSurface3 *iface, HDC dc)
747{
748 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
749
750 TRACE("iface %p, dc %p.\n", iface, dc);
751
753}
754
755static HRESULT WINAPI ddrawex_surface4_Restore(IDirectDrawSurface4 *iface)
756{
757 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
758
759 TRACE("iface %p.\n", iface);
760
761 return IDirectDrawSurface4_Restore(surface->parent);
762}
763
764static HRESULT WINAPI ddrawex_surface3_Restore(IDirectDrawSurface3 *iface)
765{
766 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
767
768 TRACE("iface %p.\n", iface);
769
771}
772
773static HRESULT WINAPI ddrawex_surface4_SetClipper(IDirectDrawSurface4 *iface, IDirectDrawClipper *clipper)
774{
775 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
776
777 TRACE("iface %p, clipper %p.\n", iface, clipper);
778
779 return IDirectDrawSurface4_SetClipper(surface->parent, clipper);
780}
781
782static HRESULT WINAPI ddrawex_surface3_SetClipper(IDirectDrawSurface3 *iface, IDirectDrawClipper *clipper)
783{
784 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
785
786 TRACE("iface %p, clipper %p.\n", iface, clipper);
787
789}
790
791static HRESULT WINAPI ddrawex_surface4_SetColorKey(IDirectDrawSurface4 *iface,
793{
794 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
795
796 TRACE("iface %p, flags %#lx, color_key %p.\n", iface, flags, color_key);
797
798 return IDirectDrawSurface4_SetColorKey(surface->parent, flags, color_key);
799}
800
801static HRESULT WINAPI ddrawex_surface3_SetColorKey(IDirectDrawSurface3 *iface,
803{
804 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
805
806 TRACE("iface %p, flags %#lx, color_key %p.\n", iface, flags, color_key);
807
809}
810
811static HRESULT WINAPI ddrawex_surface4_SetOverlayPosition(IDirectDrawSurface4 *iface, LONG x, LONG y)
812{
813 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
814
815 TRACE("iface %p, x %ld, y %ld.\n", iface, x, y);
816
817 return IDirectDrawSurface4_SetOverlayPosition(surface->parent, x, y);
818}
819
820static HRESULT WINAPI ddrawex_surface3_SetOverlayPosition(IDirectDrawSurface3 *iface, LONG x, LONG y)
821{
822 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
823
824 TRACE("iface %p, x %ld, y %ld.\n", iface, x, y);
825
827}
828
829static HRESULT WINAPI ddrawex_surface4_SetPalette(IDirectDrawSurface4 *iface, IDirectDrawPalette *palette)
830{
831 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
832
833 TRACE("iface %p, palette %p.\n", iface, palette);
834
835 return IDirectDrawSurface4_SetPalette(surface->parent, palette);
836}
837
838static HRESULT WINAPI ddrawex_surface3_SetPalette(IDirectDrawSurface3 *iface, IDirectDrawPalette *palette)
839{
840 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
841
842 TRACE("iface %p, palette %p.\n", iface, palette);
843
845}
846
847static HRESULT WINAPI ddrawex_surface4_Unlock(IDirectDrawSurface4 *iface, RECT *rect)
848{
849 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
850
851 TRACE("iface %p, rect %s.\n", iface, wine_dbgstr_rect(rect));
852
853 return IDirectDrawSurface4_Unlock(surface->parent, rect);
854}
855
856static HRESULT WINAPI ddrawex_surface3_Unlock(IDirectDrawSurface3 *iface, void *data)
857{
858 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
859
860 TRACE("iface %p, data %p.\n", iface, data);
861
863}
864
865static HRESULT WINAPI ddrawex_surface4_UpdateOverlay(IDirectDrawSurface4 *iface, RECT *src_rect,
866 IDirectDrawSurface4 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx)
867{
868 struct ddrawex_surface *src_impl = impl_from_IDirectDrawSurface4(iface);
869 struct ddrawex_surface *dst_impl = unsafe_impl_from_IDirectDrawSurface4(dst_surface);
870
871 TRACE("iface %p, src_rect %s, dst_surface %p, dst_rect %s, flags %#lx, fx %p.\n",
872 iface, wine_dbgstr_rect(src_rect), dst_surface, wine_dbgstr_rect(dst_rect), flags, fx);
873
874 return IDirectDrawSurface4_UpdateOverlay(src_impl->parent, src_rect,
875 dst_impl ? dst_impl->parent : NULL, dst_rect, flags, fx);
876}
877
878static HRESULT WINAPI ddrawex_surface3_UpdateOverlay(IDirectDrawSurface3 *iface, RECT *src_rect,
879 IDirectDrawSurface3 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx)
880{
881 struct ddrawex_surface *src_impl = impl_from_IDirectDrawSurface3(iface);
882 struct ddrawex_surface *dst_impl = unsafe_impl_from_IDirectDrawSurface3(dst_surface);
883
884 TRACE("iface %p, src_rect %s, dst_surface %p, dst_rect %s, flags %#lx, fx %p.\n",
885 iface, wine_dbgstr_rect(src_rect), dst_surface, wine_dbgstr_rect(dst_rect), flags, fx);
886
888 dst_impl ? &dst_impl->IDirectDrawSurface4_iface : NULL, dst_rect, flags, fx);
889}
890
892{
893 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
894
895 TRACE("iface %p, flags %#lx.\n", iface, flags);
896
897 return IDirectDrawSurface4_UpdateOverlayDisplay(surface->parent, flags);
898}
899
901{
902 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
903
904 TRACE("iface %p, flags %#lx.\n", iface, flags);
905
907}
908
909static HRESULT WINAPI ddrawex_surface4_UpdateOverlayZOrder(IDirectDrawSurface4 *iface,
910 DWORD flags, IDirectDrawSurface4 *reference)
911{
912 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
914
915 TRACE("iface %p, flags %#lx, reference %p.\n", iface, flags, reference);
916
917 return IDirectDrawSurface4_UpdateOverlayZOrder(surface->parent,
918 flags, reference_impl ? reference_impl->parent : NULL);
919}
920
921static HRESULT WINAPI ddrawex_surface3_UpdateOverlayZOrder(IDirectDrawSurface3 *iface,
922 DWORD flags, IDirectDrawSurface3 *reference)
923{
924 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
926
927 TRACE("iface %p, flags %#lx, reference %p.\n", iface, flags, reference);
928
930 flags, reference_impl ? &reference_impl->IDirectDrawSurface4_iface : NULL);
931}
932
933static HRESULT WINAPI ddrawex_surface4_GetDDInterface(IDirectDrawSurface4 *iface, void **ddraw)
934{
935 FIXME("iface %p, ddraw %p stub!\n", iface, ddraw);
936
937 /* This has to be implemented in ddrawex, ddraw's interface can't be used
938 * because it is pretty hard to tell which version of the ddraw interface
939 * is returned. */
940 *ddraw = NULL;
941
942 return E_FAIL;
943}
944
945static HRESULT WINAPI ddrawex_surface3_GetDDInterface(IDirectDrawSurface3 *iface, void **ddraw)
946{
947 FIXME("iface %p, ddraw %p stub!\n", iface, ddraw);
948
949 /* A thunk it pretty pointless for the same reason that relaying to
950 * ddraw.dll works badly. */
951 *ddraw = NULL;
952
953 return E_FAIL;
954}
955
956static HRESULT WINAPI ddrawex_surface4_PageLock(IDirectDrawSurface4 *iface, DWORD flags)
957{
958 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
959
960 TRACE("iface %p, flags %#lx.\n", iface, flags);
961
962 return IDirectDrawSurface4_PageLock(surface->parent, flags);
963}
964
965static HRESULT WINAPI ddrawex_surface3_PageLock(IDirectDrawSurface3 *iface, DWORD flags)
966{
967 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
968
969 TRACE("iface %p, flags %#lx.\n", iface, flags);
970
972}
973
974static HRESULT WINAPI ddrawex_surface4_PageUnlock(IDirectDrawSurface4 *iface, DWORD flags)
975{
976 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
977
978 TRACE("iface %p, flags %#lx.\n", iface, flags);
979
980 return IDirectDrawSurface4_PageUnlock(surface->parent, flags);
981}
982
983static HRESULT WINAPI ddrawex_surface3_PageUnlock(IDirectDrawSurface3 *iface, DWORD flags)
984{
985 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
986
987 TRACE("iface %p, flags %#lx.\n", iface, flags);
988
990}
991
992static HRESULT WINAPI ddrawex_surface4_SetSurfaceDesc(IDirectDrawSurface4 *iface,
994{
995 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
996
997 TRACE("iface %p, desc %p, flags %#lx.\n", iface, desc, flags);
998
999 return IDirectDrawSurface4_SetSurfaceDesc(surface->parent, desc, flags);
1000}
1001
1002static HRESULT WINAPI ddrawex_surface3_SetSurfaceDesc(IDirectDrawSurface3 *iface,
1004{
1005 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface3(iface);
1006 DDSURFACEDESC2 ddsd;
1007
1008 TRACE("iface %p, desc %p, flags %#lx.\n", iface, desc, flags);
1009
1010 DDSD_to_DDSD2(desc, &ddsd);
1012}
1013
1014static HRESULT WINAPI ddrawex_surface4_SetPrivateData(IDirectDrawSurface4 *iface,
1015 REFGUID tag, void *data, DWORD data_size, DWORD flags)
1016{
1017 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
1018
1019 TRACE("iface %p, tag %s, data %p, data_size %lu, flags %#lx.\n",
1020 iface, debugstr_guid(tag), data, data_size, flags);
1021
1022 /* To completely avoid this we'd have to clone the private data API in
1023 * ddrawex. */
1025 FIXME("Application uses ddrawex's private GUID.\n");
1026
1027 return IDirectDrawSurface4_SetPrivateData(surface->parent, tag, data, data_size, flags);
1028}
1029
1030static HRESULT WINAPI ddrawex_surface4_GetPrivateData(IDirectDrawSurface4 *iface,
1031 REFGUID tag, void *data, DWORD *data_size)
1032{
1033 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
1034
1035 TRACE("iface %p, tag %s, data %p, data_size %p.\n",
1036 iface, debugstr_guid(tag), data, data_size);
1037
1038 /* To completely avoid this we'd have to clone the private data API in
1039 * ddrawex. */
1041 FIXME("Application uses ddrawex's private GUID.\n");
1042
1043 return IDirectDrawSurface4_GetPrivateData(surface->parent, tag, data, data_size);
1044}
1045
1046static HRESULT WINAPI ddrawex_surface4_FreePrivateData(IDirectDrawSurface4 *iface, REFGUID tag)
1047{
1048 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
1049
1050 TRACE("iface %p, tag %s.\n", iface, debugstr_guid(tag));
1051
1052 /* To completely avoid this we'd have to clone the private data API in
1053 * ddrawex. */
1055 FIXME("Application uses ddrawex's private GUID.\n");
1056
1057 return IDirectDrawSurface4_FreePrivateData(surface->parent, tag);
1058}
1059
1061{
1062 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
1063
1064 TRACE("iface %p, value %p.\n", iface, value);
1065
1066 return IDirectDrawSurface4_GetUniquenessValue(surface->parent, value);
1067}
1068
1070{
1071 struct ddrawex_surface *surface = impl_from_IDirectDrawSurface4(iface);
1072
1073 TRACE("iface %p.\n", iface);
1074
1075 return IDirectDrawSurface4_ChangeUniquenessValue(surface->parent);
1076}
1077
1078static const IDirectDrawSurface3Vtbl ddrawex_surface3_vtbl =
1079{
1120};
1121
1122static const IDirectDrawSurface4Vtbl ddrawex_surface4_vtbl =
1123{
1169};
1170
1171static struct ddrawex_surface *unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface)
1172{
1173 if (!iface || iface->lpVtbl != &ddrawex_surface3_vtbl)
1174 return NULL;
1175 return impl_from_IDirectDrawSurface3(iface);
1176}
1177
1179{
1180 if (!iface || iface->lpVtbl != &ddrawex_surface4_vtbl)
1181 return NULL;
1182 return impl_from_IDirectDrawSurface4(iface);
1183}
1184
1185/* dds_get_outer
1186 *
1187 * Given a surface from ddraw.dll it retrieves the pointer to the ddrawex.dll wrapper around it
1188 *
1189 * Parameters:
1190 * inner: ddraw.dll surface to retrieve the outer surface from
1191 *
1192 * Returns:
1193 * The surface wrapper. If there is none yet, a new one is created
1194 */
1195IDirectDrawSurface4 *dds_get_outer(IDirectDrawSurface4 *inner)
1196{
1197 IDirectDrawSurface4 *outer = NULL;
1198 DWORD size = sizeof(outer);
1199 HRESULT hr;
1200 if(!inner) return NULL;
1201
1202 hr = IDirectDrawSurface4_GetPrivateData(inner,
1204 &outer,
1205 &size);
1206 if(FAILED(hr) || outer == NULL)
1207 {
1208 struct ddrawex_surface *impl;
1209
1210 TRACE("Creating new ddrawex surface wrapper for surface %p\n", inner);
1211 impl = calloc(1, sizeof(*impl));
1212 impl->ref = 1;
1215 IDirectDrawSurface4_AddRef(inner);
1216 impl->parent = inner;
1217
1219
1220 hr = IDirectDrawSurface4_SetPrivateData(inner,
1222 &outer,
1223 sizeof(outer),
1224 0 /* Flags */);
1225 if(FAILED(hr))
1226 {
1227 ERR("IDirectDrawSurface4_SetPrivateData failed\n");
1228 }
1229 }
1230
1231 return outer;
1232}
1233
1234HRESULT prepare_permanent_dc(IDirectDrawSurface4 *iface)
1235{
1237 HRESULT hr;
1238
1239 surface->permanent_dc = TRUE;
1240 if (FAILED(hr = IDirectDrawSurface4_GetDC(surface->parent, &surface->hdc)))
1241 return hr;
1242 return IDirectDrawSurface4_ReleaseDC(surface->parent, surface->hdc);
1243}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
static const char * wine_dbgstr_rect(const RECT *prc)
Definition: atltest.h:160
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define FIXME(fmt,...)
Definition: precomp.h:53
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
RECT rect
Definition: combotst.c:67
HDC dc
Definition: cylfrac.c:34
static struct ddraw_surface * impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface)
static struct ddraw_surface * impl_from_IDirectDrawSurface4(IDirectDrawSurface4 *iface)
void DDSD_to_DDSD2(const DDSURFACEDESC *in, DDSURFACEDESC2 *out)
Definition: utils.c:1198
void DDSD2_to_DDSD(const DDSURFACEDESC2 *in, DDSURFACEDESC *out)
Definition: utils.c:1242
#define IID_DDrawexPriv
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
struct ddraw_surface * unsafe_impl_from_IDirectDrawSurface4(IDirectDrawSurface4 *iface)
Definition: surface.c:5966
static struct ddraw_surface * unsafe_impl_from_IDirectDrawSurface3(IDirectDrawSurface3 *iface)
Definition: surface.c:5982
IDirectDraw4 * dd_get_inner(IDirectDraw4 *outer)
Definition: ddraw.c:1458
static HRESULT WINAPI ddrawex_surface4_SetSurfaceDesc(IDirectDrawSurface4 *iface, DDSURFACEDESC2 *desc, DWORD flags)
Definition: surface.c:992
static HRESULT WINAPI ddrawex_surface4_Initialize(IDirectDrawSurface4 *iface, IDirectDraw *ddraw, DDSURFACEDESC2 *desc)
Definition: surface.c:644
static HRESULT WINAPI ddrawex_surface3_SetColorKey(IDirectDrawSurface3 *iface, DWORD flags, DDCOLORKEY *color_key)
Definition: surface.c:801
static HRESULT WINAPI ddrawex_surface3_EnumAttachedSurfaces(IDirectDrawSurface3 *iface, void *ctx, LPDDENUMSURFACESCALLBACK cb)
Definition: surface.c:329
static HRESULT WINAPI ddrawex_surface4_UpdateOverlayZOrder(IDirectDrawSurface4 *iface, DWORD flags, IDirectDrawSurface4 *reference)
Definition: surface.c:909
static HRESULT WINAPI ddrawex_surface4_BltBatch(IDirectDrawSurface4 *iface, DDBLTBATCH *batch, DWORD count, DWORD flags)
Definition: surface.c:208
static HRESULT WINAPI ddrawex_surface4_GetPrivateData(IDirectDrawSurface4 *iface, REFGUID tag, void *data, DWORD *data_size)
Definition: surface.c:1030
static HRESULT WINAPI ddrawex_surface4_UpdateOverlay(IDirectDrawSurface4 *iface, RECT *src_rect, IDirectDrawSurface4 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx)
Definition: surface.c:865
static HRESULT WINAPI ddrawex_surface3_PageUnlock(IDirectDrawSurface3 *iface, DWORD flags)
Definition: surface.c:983
static HRESULT WINAPI ddrawex_surface3_GetFlipStatus(IDirectDrawSurface3 *iface, DWORD flags)
Definition: surface.c:548
static HRESULT WINAPI ddrawex_surface3_GetSurfaceDesc(IDirectDrawSurface3 *iface, DDSURFACEDESC *desc)
Definition: surface.c:628
static HRESULT WINAPI ddrawex_surface3_GetPalette(IDirectDrawSurface3 *iface, IDirectDrawPalette **palette)
Definition: surface.c:584
static ULONG WINAPI ddrawex_surface4_Release(IDirectDrawSurface4 *iface)
Definition: surface.c:116
static HRESULT WINAPI ddrawex_surface4_FreePrivateData(IDirectDrawSurface4 *iface, REFGUID tag)
Definition: surface.c:1046
static HRESULT WINAPI ddrawex_surface3_SetClipper(IDirectDrawSurface3 *iface, IDirectDrawClipper *clipper)
Definition: surface.c:782
static HRESULT WINAPI ddrawex_surface3_GetAttachedSurface(IDirectDrawSurface3 *iface, DDSCAPS *caps, IDirectDrawSurface3 **attachment)
Definition: surface.c:412
static HRESULT WINAPI ddrawex_surface4_BltFast(IDirectDrawSurface4 *iface, DWORD dst_x, DWORD dst_y, IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags)
Definition: surface.c:228
static HRESULT WINAPI ddrawex_surface4_GetOverlayPosition(IDirectDrawSurface4 *iface, LONG *x, LONG *y)
Definition: surface.c:557
static HRESULT WINAPI enumsurfaces_thunk_cb(IDirectDrawSurface4 *surf, DDSURFACEDESC2 *desc2, void *vctx)
Definition: surface.c:315
static HRESULT WINAPI ddrawex_surface4_GetSurfaceDesc(IDirectDrawSurface4 *iface, DDSURFACEDESC2 *desc)
Definition: surface.c:611
static HRESULT WINAPI ddrawex_surface4_AddAttachedSurface(IDirectDrawSurface4 *iface, IDirectDrawSurface4 *attachment)
Definition: surface.c:142
static HRESULT WINAPI ddrawex_surface3_EnumOverlayZOrders(IDirectDrawSurface3 *iface, DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK cb)
Definition: surface.c:355
static HRESULT WINAPI ddrawex_surface4_SetOverlayPosition(IDirectDrawSurface4 *iface, LONG x, LONG y)
Definition: surface.c:811
static HRESULT WINAPI ddrawex_surface3_ReleaseDC(IDirectDrawSurface3 *iface, HDC dc)
Definition: surface.c:746
static HRESULT WINAPI ddrawex_surface4_SetPalette(IDirectDrawSurface4 *iface, IDirectDrawPalette *palette)
Definition: surface.c:829
static HRESULT WINAPI ddrawex_surface4_Lock(IDirectDrawSurface4 *iface, RECT *rect, DDSURFACEDESC2 *desc, DWORD flags, HANDLE h)
Definition: surface.c:694
static HRESULT WINAPI ddrawex_surface3_GetDC(IDirectDrawSurface3 *iface, HDC *dc)
Definition: surface.c:530
static ULONG WINAPI ddrawex_surface3_AddRef(IDirectDrawSurface3 *iface)
Definition: surface.c:107
static HRESULT WINAPI ddrawex_surface4_Flip(IDirectDrawSurface4 *iface, IDirectDrawSurface4 *dst, DWORD flags)
Definition: surface.c:369
static HRESULT WINAPI ddrawex_surface4_Blt(IDirectDrawSurface4 *iface, RECT *dst_rect, IDirectDrawSurface4 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
Definition: surface.c:183
static HRESULT WINAPI ddrawex_surface3_SetPalette(IDirectDrawSurface3 *iface, IDirectDrawPalette *palette)
Definition: surface.c:838
static const IDirectDrawSurface3Vtbl ddrawex_surface3_vtbl
Definition: surface.c:1078
static HRESULT WINAPI ddrawex_surface3_Initialize(IDirectDrawSurface3 *iface, IDirectDraw *ddraw, DDSURFACEDESC *desc)
Definition: surface.c:664
static HRESULT WINAPI ddrawex_surface3_QueryInterface(IDirectDrawSurface3 *iface, REFIID riid, void **out)
Definition: surface.c:88
static HRESULT WINAPI ddrawex_surface4_QueryInterface(IDirectDrawSurface4 *iface, REFIID riid, void **out)
Definition: surface.c:45
static HRESULT WINAPI ddrawex_surface3_BltFast(IDirectDrawSurface3 *iface, DWORD dst_x, DWORD dst_y, IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags)
Definition: surface.c:241
static HRESULT WINAPI ddrawex_surface4_GetPalette(IDirectDrawSurface4 *iface, IDirectDrawPalette **palette)
Definition: surface.c:575
static HRESULT WINAPI ddrawex_surface3_Lock(IDirectDrawSurface3 *iface, RECT *rect, DDSURFACEDESC *desc, DWORD flags, HANDLE h)
Definition: surface.c:713
static HRESULT WINAPI ddrawex_surface4_GetCaps(IDirectDrawSurface4 *iface, DDSCAPS2 *caps)
Definition: surface.c:454
static HRESULT WINAPI ddrawex_surface3_AddAttachedSurface(IDirectDrawSurface3 *iface, IDirectDrawSurface3 *attachment)
Definition: surface.c:153
static HRESULT WINAPI ddrawex_surface4_IsLost(IDirectDrawSurface4 *iface)
Definition: surface.c:676
static HRESULT WINAPI ddrawex_surface4_GetDC(IDirectDrawSurface4 *iface, HDC *dc)
Definition: surface.c:514
static HRESULT WINAPI ddrawex_surface3_SetSurfaceDesc(IDirectDrawSurface3 *iface, DDSURFACEDESC *desc, DWORD flags)
Definition: surface.c:1002
IDirectDrawSurface4 * dds_get_outer(IDirectDrawSurface4 *inner)
Definition: surface.c:1195
static HRESULT WINAPI ddrawex_surface4_Restore(IDirectDrawSurface4 *iface)
Definition: surface.c:755
static HRESULT WINAPI ddrawex_surface4_GetClipper(IDirectDrawSurface4 *iface, IDirectDrawClipper **clipper)
Definition: surface.c:478
static HRESULT WINAPI ddrawex_surface3_BltBatch(IDirectDrawSurface3 *iface, DDBLTBATCH *batch, DWORD count, DWORD flags)
Definition: surface.c:218
static HRESULT WINAPI ddrawex_surface3_UpdateOverlayZOrder(IDirectDrawSurface3 *iface, DWORD flags, IDirectDrawSurface3 *reference)
Definition: surface.c:921
static HRESULT WINAPI ddrawex_surface4_Unlock(IDirectDrawSurface4 *iface, RECT *rect)
Definition: surface.c:847
static const IDirectDrawSurface4Vtbl ddrawex_surface4_vtbl
Definition: surface.c:1122
static HRESULT WINAPI ddrawex_surface3_GetPixelFormat(IDirectDrawSurface3 *iface, DDPIXELFORMAT *pixel_format)
Definition: surface.c:602
static ULONG WINAPI ddrawex_surface4_AddRef(IDirectDrawSurface4 *iface)
Definition: surface.c:97
static HRESULT WINAPI ddrawex_surface4_PageLock(IDirectDrawSurface4 *iface, DWORD flags)
Definition: surface.c:956
static HRESULT WINAPI ddrawex_surface3_Blt(IDirectDrawSurface3 *iface, RECT *dst_rect, IDirectDrawSurface3 *src_surface, RECT *src_rect, DWORD flags, DDBLTFX *fx)
Definition: surface.c:195
static HRESULT WINAPI ddrawex_surface4_ChangeUniquenessValue(IDirectDrawSurface4 *iface)
Definition: surface.c:1069
static HRESULT WINAPI ddrawex_surface4_GetFlipStatus(IDirectDrawSurface4 *iface, DWORD flags)
Definition: surface.c:539
static HRESULT WINAPI ddrawex_surface4_GetColorKey(IDirectDrawSurface4 *iface, DWORD flags, DDCOLORKEY *color_key)
Definition: surface.c:496
static HRESULT WINAPI ddrawex_surface4_DeleteAttachedSurface(IDirectDrawSurface4 *iface, DWORD flags, IDirectDrawSurface4 *attachment)
Definition: surface.c:254
static ULONG WINAPI ddrawex_surface3_Release(IDirectDrawSurface3 *iface)
Definition: surface.c:133
HRESULT prepare_permanent_dc(IDirectDrawSurface4 *iface)
Definition: surface.c:1234
static HRESULT WINAPI ddrawex_surface4_SetColorKey(IDirectDrawSurface4 *iface, DWORD flags, DDCOLORKEY *color_key)
Definition: surface.c:791
static HRESULT WINAPI ddrawex_surface3_IsLost(IDirectDrawSurface3 *iface)
Definition: surface.c:685
static HRESULT WINAPI ddrawex_surface3_Flip(IDirectDrawSurface3 *iface, IDirectDrawSurface3 *dst, DWORD flags)
Definition: surface.c:379
static HRESULT WINAPI ddrawex_surface3_GetColorKey(IDirectDrawSurface3 *iface, DWORD flags, DDCOLORKEY *color_key)
Definition: surface.c:505
static HRESULT WINAPI ddrawex_surface3_GetCaps(IDirectDrawSurface3 *iface, DDSCAPS *caps)
Definition: surface.c:463
static HRESULT WINAPI ddrawex_surface3_UpdateOverlay(IDirectDrawSurface3 *iface, RECT *src_rect, IDirectDrawSurface3 *dst_surface, RECT *dst_rect, DWORD flags, DDOVERLAYFX *fx)
Definition: surface.c:878
static HRESULT WINAPI ddrawex_surface4_GetDDInterface(IDirectDrawSurface4 *iface, void **ddraw)
Definition: surface.c:933
static HRESULT WINAPI ddrawex_surface3_SetOverlayPosition(IDirectDrawSurface3 *iface, LONG x, LONG y)
Definition: surface.c:820
static HRESULT WINAPI ddrawex_surface4_EnumOverlayZOrders(IDirectDrawSurface4 *iface, DWORD flags, void *ctx, LPDDENUMSURFACESCALLBACK2 cb)
Definition: surface.c:342
static HRESULT WINAPI ddrawex_surface3_UpdateOverlayDisplay(IDirectDrawSurface3 *iface, DWORD flags)
Definition: surface.c:900
static HRESULT WINAPI ddrawex_surface3_PageLock(IDirectDrawSurface3 *iface, DWORD flags)
Definition: surface.c:965
static HRESULT WINAPI ddrawex_surface4_PageUnlock(IDirectDrawSurface4 *iface, DWORD flags)
Definition: surface.c:974
static HRESULT WINAPI ddrawex_surface4_GetBltStatus(IDirectDrawSurface4 *iface, DWORD flags)
Definition: surface.c:436
static HRESULT WINAPI ddrawex_surface4_GetPixelFormat(IDirectDrawSurface4 *iface, DDPIXELFORMAT *pixel_format)
Definition: surface.c:593
static HRESULT WINAPI ddrawex_surface3_Unlock(IDirectDrawSurface3 *iface, void *data)
Definition: surface.c:856
static HRESULT WINAPI enumsurfaces_wrap_cb(IDirectDrawSurface4 *surf, DDSURFACEDESC2 *desc, void *vctx)
Definition: surface.c:285
static HRESULT WINAPI ddrawex_surface3_GetClipper(IDirectDrawSurface3 *iface, IDirectDrawClipper **clipper)
Definition: surface.c:487
static HRESULT WINAPI ddrawex_surface3_Restore(IDirectDrawSurface3 *iface)
Definition: surface.c:764
static HRESULT WINAPI ddrawex_surface4_EnumAttachedSurfaces(IDirectDrawSurface4 *iface, void *ctx, LPDDENUMSURFACESCALLBACK2 cb)
Definition: surface.c:296
static HRESULT WINAPI ddrawex_surface4_SetPrivateData(IDirectDrawSurface4 *iface, REFGUID tag, void *data, DWORD data_size, DWORD flags)
Definition: surface.c:1014
static HRESULT WINAPI ddrawex_surface4_AddOverlayDirtyRect(IDirectDrawSurface4 *iface, RECT *rect)
Definition: surface.c:165
static HRESULT WINAPI ddrawex_surface3_GetBltStatus(IDirectDrawSurface3 *iface, DWORD flags)
Definition: surface.c:445
static HRESULT WINAPI ddrawex_surface3_DeleteAttachedSurface(IDirectDrawSurface3 *iface, DWORD flags, IDirectDrawSurface3 *attachment)
Definition: surface.c:266
static HRESULT WINAPI ddrawex_surface4_GetUniquenessValue(IDirectDrawSurface4 *iface, DWORD *value)
Definition: surface.c:1060
static HRESULT WINAPI ddrawex_surface3_GetDDInterface(IDirectDrawSurface3 *iface, void **ddraw)
Definition: surface.c:945
static HRESULT WINAPI ddrawex_surface4_GetAttachedSurface(IDirectDrawSurface4 *iface, DDSCAPS2 *caps, IDirectDrawSurface4 **attachment)
Definition: surface.c:390
static HRESULT WINAPI ddrawex_surface4_UpdateOverlayDisplay(IDirectDrawSurface4 *iface, DWORD flags)
Definition: surface.c:891
static HRESULT WINAPI ddrawex_surface3_GetOverlayPosition(IDirectDrawSurface3 *iface, LONG *x, LONG *y)
Definition: surface.c:566
static HRESULT WINAPI ddrawex_surface4_SetClipper(IDirectDrawSurface4 *iface, IDirectDrawClipper *clipper)
Definition: surface.c:773
static HRESULT WINAPI ddrawex_surface4_ReleaseDC(IDirectDrawSurface4 *iface, HDC dc)
Definition: surface.c:731
static HRESULT WINAPI ddrawex_surface3_AddOverlayDirtyRect(IDirectDrawSurface3 *iface, RECT *rect)
Definition: surface.c:174
static MonoProfilerRuntimeShutdownBeginCallback cb
Definition: metahost.c:118
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLenum src
Definition: glext.h:6340
GLsizeiptr size
Definition: glext.h:5919
GLint reference
Definition: glext.h:11729
GLenum GLenum dst
Definition: glext.h:6340
GLbitfield flags
Definition: glext.h:7161
GLenum attachment
Definition: glext.h:6295
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
static HDC
Definition: imagelist.c:88
D3D11_SHADER_VARIABLE_DESC desc
Definition: reflection.c:1683
static IUnknown * outer
Definition: compobj.c:82
static HPALETTE palette
Definition: clipboard.c:1457
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
#define calloc
Definition: rosglue.h:14
HRESULT(WINAPI * LPDDENUMSURFACESCALLBACK)(LPDIRECTDRAWSURFACE, LPDDSURFACEDESC, LPVOID)
Definition: ddraw.h:1262
HRESULT(WINAPI * LPDDENUMSURFACESCALLBACK2)(LPDIRECTDRAWSURFACE4, LPDDSURFACEDESC2, LPVOID)
Definition: ddraw.h:1263
#define DD_OK
Definition: ddraw.h:188
#define DDERR_INVALIDPARAMS
Definition: ddraw.h:81
#define DDSCAPS_VIDEOMEMORY
Definition: ddraw.h:266
#define memset(x, y, z)
Definition: compat.h:39
#define TRACE(s)
Definition: solgame.cpp:4
Definition: dcommon.idl:28
DWORD dwCaps
Definition: ddraw.h:734
DWORD dwCaps
Definition: ddraw.h:729
DWORD dwSize
Definition: ddraw.h:1154
Definition: scsiwmi.h:51
IDirectDrawSurface4 * parent
IDirectDrawSurface3 IDirectDrawSurface3_iface
IDirectDrawSurface4 IDirectDrawSurface4_iface
LPDDENUMSURFACESCALLBACK orig_cb
Definition: surface.c:311
void * orig_ctx
Definition: surface.c:281
LPDDENUMSURFACESCALLBACK2 orig_cb
Definition: surface.c:280
Definition: ecma_167.h:138
GLfixed fx
Definition: tritemp.h:484
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
Definition: pdh_main.c:64
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:3479