ReactOS 0.4.15-dev-7089-gea8a49d
render.c
Go to the documentation of this file.
1#ifdef __REACTOS__
2#include "precomp.h"
3#else
4/*
5 * Copyright (C) 2012 Józef Kucia
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20 *
21 */
22
23
24#include "d3dx9_private.h"
25#endif /* __REACTOS__ */
26
28
30{
32 IDirect3DSurface9 **render_targets;
33 IDirect3DSurface9 *depth_stencil;
35};
36
37static HRESULT device_state_init(IDirect3DDevice9 *device, struct device_state *state)
38{
39 HRESULT hr;
40 D3DCAPS9 caps;
41 unsigned int i;
42
44 if (FAILED(hr)) return hr;
45
46 state->num_render_targets = caps.NumSimultaneousRTs;
47 state->render_targets = HeapAlloc(GetProcessHeap(), 0,
48 state->num_render_targets * sizeof(IDirect3DSurface9 *));
49 if (!state->render_targets)
50 return E_OUTOFMEMORY;
51
52 for (i = 0; i < state->num_render_targets; i++)
53 state->render_targets[i] = NULL;
54 state->depth_stencil = NULL;
55 return D3D_OK;
56}
57
58static void device_state_capture(IDirect3DDevice9 *device, struct device_state *state)
59{
60 HRESULT hr;
61 unsigned int i;
62
64
65 for (i = 0; i < state->num_render_targets; i++)
66 {
67 hr = IDirect3DDevice9_GetRenderTarget(device, i, &state->render_targets[i]);
68 if (FAILED(hr)) state->render_targets[i] = NULL;
69 }
70
72 if (FAILED(hr)) state->depth_stencil = NULL;
73}
74
75static void device_state_restore(IDirect3DDevice9 *device, struct device_state *state)
76{
77 unsigned int i;
78
79 for (i = 0; i < state->num_render_targets; i++)
80 {
82 if (state->render_targets[i])
83 IDirect3DSurface9_Release(state->render_targets[i]);
84 state->render_targets[i] = NULL;
85 }
86
88 if (state->depth_stencil)
89 {
90 IDirect3DSurface9_Release(state->depth_stencil);
91 state->depth_stencil = NULL;
92 }
93
95}
96
98{
99 unsigned int i;
100
101 for (i = 0; i < state->num_render_targets; i++)
102 {
103 if (state->render_targets[i])
104 IDirect3DSurface9_Release(state->render_targets[i]);
105 }
106
107 HeapFree(GetProcessHeap(), 0, state->render_targets);
108
109 if (state->depth_stencil) IDirect3DSurface9_Release(state->depth_stencil);
110}
111
113{
114 ID3DXRenderToSurface ID3DXRenderToSurface_iface;
116
117 IDirect3DDevice9 *device;
119
120 IDirect3DSurface9 *dst_surface;
121
122 IDirect3DSurface9 *render_target;
123 IDirect3DSurface9 *depth_stencil;
124
126};
127
128static inline struct render_to_surface *impl_from_ID3DXRenderToSurface(ID3DXRenderToSurface *iface)
129{
131}
132
133static HRESULT WINAPI D3DXRenderToSurface_QueryInterface(ID3DXRenderToSurface *iface,
134 REFIID riid,
135 void **out)
136{
137 TRACE("iface %p, riid %s, out %p\n", iface, debugstr_guid(riid), out);
138
139 if (IsEqualGUID(riid, &IID_ID3DXRenderToSurface)
141 {
142 IUnknown_AddRef(iface);
143 *out = iface;
144 return S_OK;
145 }
146
147 WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid));
148
149 *out = NULL;
150 return E_NOINTERFACE;
151}
152
153static ULONG WINAPI D3DXRenderToSurface_AddRef(ID3DXRenderToSurface *iface)
154{
157
158 TRACE("%p increasing refcount to %u\n", iface, ref);
159
160 return ref;
161}
162
163static ULONG WINAPI D3DXRenderToSurface_Release(ID3DXRenderToSurface *iface)
164{
167
168 TRACE("%p decreasing refcount to %u\n", iface, ref);
169
170 if (!ref)
171 {
172 if (render->dst_surface) IDirect3DSurface9_Release(render->dst_surface);
173
174 if (render->render_target) IDirect3DSurface9_Release(render->render_target);
175 if (render->depth_stencil) IDirect3DSurface9_Release(render->depth_stencil);
176
177 device_state_release(&render->previous_state);
178
180
182 }
183
184 return ref;
185}
186
187static HRESULT WINAPI D3DXRenderToSurface_GetDevice(ID3DXRenderToSurface *iface,
188 IDirect3DDevice9 **device)
189{
191
192 TRACE("(%p)->(%p)\n", iface, device);
193
194 if (!device) return D3DERR_INVALIDCALL;
195
197 *device = render->device;
198 return D3D_OK;
199}
200
201static HRESULT WINAPI D3DXRenderToSurface_GetDesc(ID3DXRenderToSurface *iface,
203{
205
206 TRACE("(%p)->(%p)\n", iface, desc);
207
208 if (!desc) return D3DERR_INVALIDCALL;
209
210 *desc = render->desc;
211 return D3D_OK;
212}
213
214static HRESULT WINAPI D3DXRenderToSurface_BeginScene(ID3DXRenderToSurface *iface,
215 IDirect3DSurface9 *surface,
216 const D3DVIEWPORT9 *viewport)
217{
219 unsigned int i;
220 IDirect3DDevice9 *device;
221 D3DSURFACE_DESC surface_desc;
223 D3DMULTISAMPLE_TYPE multi_sample_type = D3DMULTISAMPLE_NONE;
224 DWORD multi_sample_quality = 0;
225
226 TRACE("(%p)->(%p, %p)\n", iface, surface, viewport);
227
228 if (!surface || render->dst_surface) return D3DERR_INVALIDCALL;
229
230 IDirect3DSurface9_GetDesc(surface, &surface_desc);
231 if (surface_desc.Format != render->desc.Format
232 || surface_desc.Width != render->desc.Width
233 || surface_desc.Height != render->desc.Height)
234 return D3DERR_INVALIDCALL;
235
236 if (viewport)
237 {
238 if (viewport->X > render->desc.Width || viewport->Y > render->desc.Height
239 || viewport->X + viewport->Width > render->desc.Width
240 || viewport->Y + viewport->Height > render->desc.Height)
241 return D3DERR_INVALIDCALL;
242
243 if (!(surface_desc.Usage & D3DUSAGE_RENDERTARGET)
244 && (viewport->X != 0 || viewport->Y != 0
245 || viewport->Width != render->desc.Width
246 || viewport->Height != render->desc.Height))
247 return D3DERR_INVALIDCALL;
248 }
249
250 device = render->device;
251
252 device_state_capture(device, &render->previous_state);
253
254 /* prepare for rendering to surface */
255 for (i = 1; i < render->previous_state.num_render_targets; i++)
257
258 if (surface_desc.Usage & D3DUSAGE_RENDERTARGET)
259 {
261 multi_sample_type = surface_desc.MultiSampleType;
262 multi_sample_quality = surface_desc.MultiSampleQuality;
263 }
264 else
265 {
266 hr = IDirect3DDevice9_CreateRenderTarget(device, render->desc.Width, render->desc.Height,
267 render->desc.Format, multi_sample_type, multi_sample_quality, FALSE,
268 &render->render_target, NULL);
269 if (FAILED(hr)) goto cleanup;
270 hr = IDirect3DDevice9_SetRenderTarget(device, 0, render->render_target);
271 }
272
273 if (FAILED(hr)) goto cleanup;
274
275 if (render->desc.DepthStencil)
276 {
278 render->desc.DepthStencilFormat, multi_sample_type, multi_sample_quality, TRUE,
279 &render->depth_stencil, NULL);
280 }
281 else render->depth_stencil = NULL;
282
283 if (FAILED(hr)) goto cleanup;
284
286 if (FAILED(hr)) goto cleanup;
287
288 if (viewport) IDirect3DDevice9_SetViewport(device, viewport);
289
291 render->dst_surface = surface;
293
294cleanup:
295 device_state_restore(device, &render->previous_state);
296
297 if (render->dst_surface) IDirect3DSurface9_Release(render->dst_surface);
298 render->dst_surface = NULL;
299
300 if (render->render_target) IDirect3DSurface9_Release(render->render_target);
301 render->render_target = NULL;
302 if (render->depth_stencil) IDirect3DSurface9_Release(render->depth_stencil);
303 render->depth_stencil = NULL;
304
305 return hr;
306}
307
308static HRESULT WINAPI D3DXRenderToSurface_EndScene(ID3DXRenderToSurface *iface,
310{
312 HRESULT hr;
313
314 TRACE("(%p)->(%#x)\n", iface, filter);
315
316 if (!render->dst_surface) return D3DERR_INVALIDCALL;
317
319
320 /* copy render target data to destination surface, if needed */
321 if (render->render_target)
322 {
324 render->render_target, NULL, NULL, filter, 0);
325 if (FAILED(hr)) ERR("Copying render target data to surface failed %#x\n", hr);
326 }
327
328 device_state_restore(render->device, &render->previous_state);
329
330 /* release resources */
331 if (render->render_target)
332 {
333 IDirect3DSurface9_Release(render->render_target);
334 render->render_target = NULL;
335 }
336
337 if (render->depth_stencil)
338 {
339 IDirect3DSurface9_Release(render->depth_stencil);
340 render->depth_stencil = NULL;
341 }
342
343 IDirect3DSurface9_Release(render->dst_surface);
344 render->dst_surface = NULL;
345
346 return hr;
347}
348
349static HRESULT WINAPI D3DXRenderToSurface_OnLostDevice(ID3DXRenderToSurface *iface)
350{
351 FIXME("(%p)->(): stub\n", iface);
352 return D3D_OK;
353}
354
355static HRESULT WINAPI D3DXRenderToSurface_OnResetDevice(ID3DXRenderToSurface *iface)
356{
357 FIXME("(%p)->(): stub\n", iface);
358 return D3D_OK;
359}
360
361static const ID3DXRenderToSurfaceVtbl render_to_surface_vtbl =
362{
363 /* IUnknown methods */
367 /* ID3DXRenderToSurface methods */
374};
375
377 UINT width,
378 UINT height,
381 D3DFORMAT depth_stencil_format,
382 ID3DXRenderToSurface **out)
383{
384 HRESULT hr;
386
387 TRACE("(%p, %u, %u, %#x, %d, %#x, %p)\n", device, width, height, format,
388 depth_stencil, depth_stencil_format, out);
389
390 if (!device || !out) return D3DERR_INVALIDCALL;
391
392 render = HeapAlloc(GetProcessHeap(), 0, sizeof(struct render_to_surface));
393 if (!render) return E_OUTOFMEMORY;
394
395 render->ID3DXRenderToSurface_iface.lpVtbl = &render_to_surface_vtbl;
396 render->ref = 1;
397
398 render->desc.Width = width;
399 render->desc.Height = height;
400 render->desc.Format = format;
401 render->desc.DepthStencil = depth_stencil;
402 render->desc.DepthStencilFormat = depth_stencil_format;
403
404 render->dst_surface = NULL;
405 render->render_target = NULL;
406 render->depth_stencil = NULL;
407
408 hr = device_state_init(device, &render->previous_state);
409 if (FAILED(hr))
410 {
412 return hr;
413 }
414
416 render->device = device;
417
418 *out = &render->ID3DXRenderToSurface_iface;
419 return D3D_OK;
420}
421
422
424{
426
430
432{
433 ID3DXRenderToEnvMap ID3DXRenderToEnvMap_iface;
435
436 IDirect3DDevice9 *device;
438
441
444
445 IDirect3DSurface9 *render_target;
446 IDirect3DSurface9 *depth_stencil;
447
448 IDirect3DCubeTexture9 *dst_cube_texture;
449};
450
451static void copy_render_target_to_cube_texture_face(IDirect3DCubeTexture9 *cube_texture,
452 D3DCUBEMAP_FACES face, IDirect3DSurface9 *render_target, DWORD filter)
453{
454 HRESULT hr;
455 IDirect3DSurface9 *cube_surface;
456
457 IDirect3DCubeTexture9_GetCubeMapSurface(cube_texture, face, 0, &cube_surface);
458
460 if (FAILED(hr)) ERR("Copying render target data to surface failed %#x\n", hr);
461
462 IDirect3DSurface9_Release(cube_surface);
463}
464
465static inline struct render_to_envmap *impl_from_ID3DXRenderToEnvMap(ID3DXRenderToEnvMap *iface)
466{
468}
469
470static HRESULT WINAPI D3DXRenderToEnvMap_QueryInterface(ID3DXRenderToEnvMap *iface,
471 REFIID riid,
472 void **out)
473{
474 TRACE("iface %p, riid %s, out %p\n", iface, debugstr_guid(riid), out);
475
476 if (IsEqualGUID(riid, &IID_ID3DXRenderToEnvMap)
478 {
479 IUnknown_AddRef(iface);
480 *out = iface;
481 return S_OK;
482 }
483
484 WARN("%s not implemented, returning E_NOINTERFACE\n", debugstr_guid(riid));
485
486 *out = NULL;
487 return E_NOINTERFACE;
488}
489
490static ULONG WINAPI D3DXRenderToEnvMap_AddRef(ID3DXRenderToEnvMap *iface)
491{
494
495 TRACE("%p increasing refcount to %u\n", iface, ref);
496
497 return ref;
498}
499
500static ULONG WINAPI D3DXRenderToEnvMap_Release(ID3DXRenderToEnvMap *iface)
501{
504
505 TRACE("%p decreasing refcount to %u\n", iface, ref);
506
507 if (!ref)
508 {
509 if (render->dst_cube_texture) IDirect3DSurface9_Release(render->dst_cube_texture);
510
511 if (render->render_target) IDirect3DSurface9_Release(render->render_target);
512 if (render->depth_stencil) IDirect3DSurface9_Release(render->depth_stencil);
513
514 device_state_release(&render->previous_device_state);
515
517
519 }
520
521 return ref;
522}
523
524static HRESULT WINAPI D3DXRenderToEnvMap_GetDevice(ID3DXRenderToEnvMap *iface,
525 IDirect3DDevice9 **device)
526{
528
529 TRACE("(%p)->(%p)\n", iface, device);
530
531 if (!device) return D3DERR_INVALIDCALL;
532
534 *device = render->device;
535 return D3D_OK;
536}
537
538static HRESULT WINAPI D3DXRenderToEnvMap_GetDesc(ID3DXRenderToEnvMap *iface,
540{
542
543 TRACE("(%p)->(%p)\n", iface, desc);
544
545 if (!desc) return D3DERR_INVALIDCALL;
546
547 *desc = render->desc;
548 return D3D_OK;
549}
550
551static HRESULT WINAPI D3DXRenderToEnvMap_BeginCube(ID3DXRenderToEnvMap *iface,
552 IDirect3DCubeTexture9 *texture)
553{
555 HRESULT hr;
556 D3DSURFACE_DESC level_desc;
557
558 TRACE("(%p)->(%p)\n", iface, texture);
559
560 if (!texture) return D3DERR_INVALIDCALL;
561
562 if (render->state != INITIAL) return D3DERR_INVALIDCALL;
563
565 if (level_desc.Format != render->desc.Format || level_desc.Width != render->desc.Size)
566 return D3DERR_INVALIDCALL;
567
568 if (!(level_desc.Usage & D3DUSAGE_RENDERTARGET))
569 {
570 hr = IDirect3DDevice9_CreateRenderTarget(render->device, level_desc.Width, level_desc.Height,
571 level_desc.Format, level_desc.MultiSampleType, level_desc.MultiSampleQuality,
572 TRUE, &render->render_target, NULL);
573 if (FAILED(hr)) goto cleanup;
575 }
576
577 if (render->desc.DepthStencil)
578 {
579 hr = IDirect3DDevice9_CreateDepthStencilSurface(render->device, level_desc.Width, level_desc.Height,
580 render->desc.DepthStencilFormat, level_desc.MultiSampleType, level_desc.MultiSampleQuality,
581 TRUE, &render->depth_stencil, NULL);
582 if (FAILED(hr)) goto cleanup;
583 }
584
586 render->dst_cube_texture = texture;
587 render->state = CUBE_BEGIN;
588 return D3D_OK;
589
590cleanup:
591 if (render->dst_cube_texture) IDirect3DSurface9_Release(render->dst_cube_texture);
592 render->dst_cube_texture = NULL;
593
594 if (render->render_target) IDirect3DSurface9_Release(render->render_target);
595 render->render_target = NULL;
596 if (render->depth_stencil) IDirect3DSurface9_Release(render->depth_stencil);
597 render->depth_stencil = NULL;
598
599 return hr;
600}
601
602static HRESULT WINAPI D3DXRenderToEnvMap_BeginSphere(ID3DXRenderToEnvMap *iface,
603 IDirect3DTexture9 *texture)
604{
605 FIXME("(%p)->(%p): stub\n", iface, texture);
606 return E_NOTIMPL;
607}
608
609static HRESULT WINAPI D3DXRenderToEnvMap_BeginHemisphere(ID3DXRenderToEnvMap *iface,
610 IDirect3DTexture9 *pos_z_texture,
611 IDirect3DTexture9 *neg_z_texture)
612{
613 FIXME("(%p)->(%p, %p): stub\n", iface, pos_z_texture, neg_z_texture);
614 return E_NOTIMPL;
615}
616
617static HRESULT WINAPI D3DXRenderToEnvMap_BeginParabolic(ID3DXRenderToEnvMap *iface,
618 IDirect3DTexture9 *pos_z_texture,
619 IDirect3DTexture9 *neg_z_texture)
620{
621 FIXME("(%p)->(%p, %p): stub\n", iface, pos_z_texture, neg_z_texture);
622 return E_NOTIMPL;
623}
624
625static HRESULT WINAPI D3DXRenderToEnvMap_Face(ID3DXRenderToEnvMap *iface,
628{
630 HRESULT hr;
631 unsigned int i;
632
633 TRACE("(%p)->(%u, %#x)\n", iface, face, filter);
634
635 if (render->state == CUBE_FACE)
636 {
638 if (render->render_target)
640 render->render_target, render->filter);
641
642 device_state_restore(render->device, &render->previous_device_state);
643
644 render->state = CUBE_BEGIN;
645 }
646 else if (render->state != CUBE_BEGIN)
647 return D3DERR_INVALIDCALL;
648
649 device_state_capture(render->device, &render->previous_device_state);
650
651 for (i = 1; i < render->previous_device_state.num_render_targets; i++)
653
654 if (!render->render_target)
655 {
656 IDirect3DSurface9 *render_target;
660 }
661 else hr = IDirect3DDevice9_SetRenderTarget(render->device, 0, render->render_target);
662
663 if (FAILED(hr)) goto cleanup;
664
665 hr = IDirect3DDevice9_SetDepthStencilSurface(render->device, render->depth_stencil);
666 if (FAILED(hr)) goto cleanup;
667
668 render->state = CUBE_FACE;
669 render->face = face;
670 render->filter = filter;
671 return IDirect3DDevice9_BeginScene(render->device);
672
673cleanup:
674 device_state_restore(render->device, &render->previous_device_state);
675 return hr;
676}
677
678static HRESULT WINAPI D3DXRenderToEnvMap_End(ID3DXRenderToEnvMap *iface,
680{
682
683 TRACE("(%p)->(%#x)\n", iface, filter);
684
685 if (render->state == INITIAL) return D3DERR_INVALIDCALL;
686
687 if (render->state == CUBE_FACE)
688 {
690 if (render->render_target)
692 render->render_target, render->filter);
693
694 device_state_restore(render->device, &render->previous_device_state);
695 }
696
697 D3DXFilterTexture((IDirect3DBaseTexture9 *)render->dst_cube_texture, NULL, 0, filter);
698
699 if (render->render_target)
700 {
701 IDirect3DSurface9_Release(render->render_target);
702 render->render_target = NULL;
703 }
704
705 if (render->depth_stencil)
706 {
707 IDirect3DSurface9_Release(render->depth_stencil);
708 render->depth_stencil = NULL;
709 }
710
711 IDirect3DSurface9_Release(render->dst_cube_texture);
712 render->dst_cube_texture = NULL;
713
714 render->state = INITIAL;
715 return D3D_OK;
716}
717
718static HRESULT WINAPI D3DXRenderToEnvMap_OnLostDevice(ID3DXRenderToEnvMap *iface)
719{
720 FIXME("(%p)->(): stub\n", iface);
721 return D3D_OK;
722}
723
724static HRESULT WINAPI D3DXRenderToEnvMap_OnResetDevice(ID3DXRenderToEnvMap *iface)
725{
726 FIXME("(%p)->(): stub\n", iface);
727 return D3D_OK;
728}
729
730static const ID3DXRenderToEnvMapVtbl render_to_envmap_vtbl =
731{
732 /* IUnknown methods */
736 /* ID3DXRenderToEnvMap methods */
747};
748
750 UINT size,
751 UINT mip_levels,
754 D3DFORMAT depth_stencil_format,
755 ID3DXRenderToEnvMap **out)
756{
757 HRESULT hr;
758 struct render_to_envmap *render;
759
760 TRACE("(%p, %u, %u, %#x, %d, %#x, %p)\n", device, size, mip_levels,
761 format, depth_stencil, depth_stencil_format, out);
762
763 if (!device || !out) return D3DERR_INVALIDCALL;
764
767 if (FAILED(hr)) return hr;
768
769 render = HeapAlloc(GetProcessHeap(), 0, sizeof(struct render_to_envmap));
770 if (!render) return E_OUTOFMEMORY;
771
772 render->ID3DXRenderToEnvMap_iface.lpVtbl = &render_to_envmap_vtbl;
773 render->ref = 1;
774
775 render->desc.Size = size;
776 render->desc.MipLevels = mip_levels;
777 render->desc.Format = format;
778 render->desc.DepthStencil = depth_stencil;
779 render->desc.DepthStencilFormat = depth_stencil_format;
780
781 render->state = INITIAL;
782 render->render_target = NULL;
783 render->depth_stencil = NULL;
784 render->dst_cube_texture = NULL;
785
786 hr = device_state_init(device, &render->previous_device_state);
787 if (FAILED(hr))
788 {
790 return hr;
791 }
792
794 render->device = device;
795
796 *out = &render->ID3DXRenderToEnvMap_iface;
797 return D3D_OK;
798}
static int state
Definition: maze.c:121
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
const GUID IID_IUnknown
#define FIXME(fmt,...)
Definition: debug.h:111
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
@ D3DMULTISAMPLE_NONE
Definition: d3d8types.h:672
#define D3DUSAGE_RENDERTARGET
Definition: d3d8types.h:91
@ D3DPOOL_DEFAULT
Definition: d3d8types.h:709
enum _D3DFORMAT D3DFORMAT
enum _D3DCUBEMAP_FACES D3DCUBEMAP_FACES
enum _D3DMULTISAMPLE_TYPE D3DMULTISAMPLE_TYPE
#define IDirect3DDevice9_EndScene(p)
Definition: d3d9.h:1549
#define IDirect3DDevice9_BeginScene(p)
Definition: d3d9.h:1548
#define IDirect3DCubeTexture9_AddRef(p)
Definition: d3d9.h:918
#define IDirect3DDevice9_SetViewport(p, a)
Definition: d3d9.h:1554
#define IDirect3DDevice9_SetRenderTarget(p, a, b)
Definition: d3d9.h:1544
#define IDirect3DDevice9_SetDepthStencilSurface(p, a)
Definition: d3d9.h:1546
#define IDirect3DDevice9_CreateDepthStencilSurface(p, a, b, c, d, e, f, g, h)
Definition: d3d9.h:1536
#define IDirect3DDevice9_GetDeviceCaps(p, a)
Definition: d3d9.h:1514
#define IDirect3DDevice9_GetViewport(p, a)
Definition: d3d9.h:1555
#define IDirect3DSurface9_AddRef(p)
Definition: d3d9.h:621
#define IDirect3DCubeTexture9_GetLevelDesc(p, a, b)
Definition: d3d9.h:937
#define IDirect3DSurface9_GetDesc(p, a)
Definition: d3d9.h:634
#define IDirect3DDevice9_Release(p)
Definition: d3d9.h:1508
#define IDirect3DDevice9_GetDepthStencilSurface(p, a)
Definition: d3d9.h:1547
#define IDirect3DSurface9_Release(p)
Definition: d3d9.h:622
#define IDirect3DCubeTexture9_GetCubeMapSurface(p, a, b, c)
Definition: d3d9.h:938
#define IDirect3DDevice9_AddRef(p)
Definition: d3d9.h:1507
#define IDirect3DDevice9_CreateRenderTarget(p, a, b, c, d, e, f, g, h)
Definition: d3d9.h:1535
#define IDirect3DDevice9_GetRenderTarget(p, a, b)
Definition: d3d9.h:1545
#define D3D_OK
Definition: d3d.h:106
#define D3DERR_INVALIDCALL
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
WORD face[3]
Definition: mesh.c:4747
static struct render_to_envmap * impl_from_ID3DXRenderToEnvMap(ID3DXRenderToEnvMap *iface)
Definition: render.c:465
static HRESULT WINAPI D3DXRenderToSurface_OnLostDevice(ID3DXRenderToSurface *iface)
Definition: render.c:349
static HRESULT WINAPI D3DXRenderToSurface_BeginScene(ID3DXRenderToSurface *iface, IDirect3DSurface9 *surface, const D3DVIEWPORT9 *viewport)
Definition: render.c:214
static ULONG WINAPI D3DXRenderToSurface_Release(ID3DXRenderToSurface *iface)
Definition: render.c:163
static HRESULT WINAPI D3DXRenderToEnvMap_OnLostDevice(ID3DXRenderToEnvMap *iface)
Definition: render.c:718
static HRESULT WINAPI D3DXRenderToEnvMap_Face(ID3DXRenderToEnvMap *iface, D3DCUBEMAP_FACES face, DWORD filter)
Definition: render.c:625
static HRESULT WINAPI D3DXRenderToEnvMap_BeginHemisphere(ID3DXRenderToEnvMap *iface, IDirect3DTexture9 *pos_z_texture, IDirect3DTexture9 *neg_z_texture)
Definition: render.c:609
static HRESULT WINAPI D3DXRenderToEnvMap_BeginParabolic(ID3DXRenderToEnvMap *iface, IDirect3DTexture9 *pos_z_texture, IDirect3DTexture9 *neg_z_texture)
Definition: render.c:617
render_state
Definition: render.c:424
@ CUBE_BEGIN
Definition: render.c:427
@ CUBE_FACE
Definition: render.c:428
@ INITIAL
Definition: render.c:425
static HRESULT WINAPI D3DXRenderToEnvMap_GetDesc(ID3DXRenderToEnvMap *iface, D3DXRTE_DESC *desc)
Definition: render.c:538
static HRESULT WINAPI D3DXRenderToSurface_EndScene(ID3DXRenderToSurface *iface, DWORD filter)
Definition: render.c:308
static HRESULT WINAPI D3DXRenderToSurface_OnResetDevice(ID3DXRenderToSurface *iface)
Definition: render.c:355
static ULONG WINAPI D3DXRenderToSurface_AddRef(ID3DXRenderToSurface *iface)
Definition: render.c:153
static ULONG WINAPI D3DXRenderToEnvMap_AddRef(ID3DXRenderToEnvMap *iface)
Definition: render.c:490
HRESULT WINAPI D3DXCreateRenderToEnvMap(IDirect3DDevice9 *device, UINT size, UINT mip_levels, D3DFORMAT format, BOOL depth_stencil, D3DFORMAT depth_stencil_format, ID3DXRenderToEnvMap **out)
Definition: render.c:749
static const ID3DXRenderToSurfaceVtbl render_to_surface_vtbl
Definition: render.c:361
static void device_state_capture(IDirect3DDevice9 *device, struct device_state *state)
Definition: render.c:58
static struct render_to_surface * impl_from_ID3DXRenderToSurface(ID3DXRenderToSurface *iface)
Definition: render.c:128
static ULONG WINAPI D3DXRenderToEnvMap_Release(ID3DXRenderToEnvMap *iface)
Definition: render.c:500
static HRESULT WINAPI D3DXRenderToEnvMap_QueryInterface(ID3DXRenderToEnvMap *iface, REFIID riid, void **out)
Definition: render.c:470
static HRESULT WINAPI D3DXRenderToEnvMap_GetDevice(ID3DXRenderToEnvMap *iface, IDirect3DDevice9 **device)
Definition: render.c:524
static HRESULT WINAPI D3DXRenderToSurface_GetDevice(ID3DXRenderToSurface *iface, IDirect3DDevice9 **device)
Definition: render.c:187
HRESULT WINAPI D3DXCreateRenderToSurface(IDirect3DDevice9 *device, UINT width, UINT height, D3DFORMAT format, BOOL depth_stencil, D3DFORMAT depth_stencil_format, ID3DXRenderToSurface **out)
Definition: render.c:376
static HRESULT device_state_init(IDirect3DDevice9 *device, struct device_state *state)
Definition: render.c:37
static HRESULT WINAPI D3DXRenderToSurface_QueryInterface(ID3DXRenderToSurface *iface, REFIID riid, void **out)
Definition: render.c:133
static void device_state_restore(IDirect3DDevice9 *device, struct device_state *state)
Definition: render.c:75
static void copy_render_target_to_cube_texture_face(IDirect3DCubeTexture9 *cube_texture, D3DCUBEMAP_FACES face, IDirect3DSurface9 *render_target, DWORD filter)
Definition: render.c:451
static void device_state_release(struct device_state *state)
Definition: render.c:97
static HRESULT WINAPI D3DXRenderToSurface_GetDesc(ID3DXRenderToSurface *iface, D3DXRTS_DESC *desc)
Definition: render.c:201
static HRESULT WINAPI D3DXRenderToEnvMap_End(ID3DXRenderToEnvMap *iface, DWORD filter)
Definition: render.c:678
static HRESULT WINAPI D3DXRenderToEnvMap_BeginSphere(ID3DXRenderToEnvMap *iface, IDirect3DTexture9 *texture)
Definition: render.c:602
static HRESULT WINAPI D3DXRenderToEnvMap_BeginCube(ID3DXRenderToEnvMap *iface, IDirect3DCubeTexture9 *texture)
Definition: render.c:551
static const ID3DXRenderToEnvMapVtbl render_to_envmap_vtbl
Definition: render.c:730
static HRESULT WINAPI D3DXRenderToEnvMap_OnResetDevice(ID3DXRenderToEnvMap *iface)
Definition: render.c:724
HRESULT WINAPI D3DXLoadSurfaceFromSurface(IDirect3DSurface9 *dst_surface, const PALETTEENTRY *dst_palette, const RECT *dst_rect, IDirect3DSurface9 *src_surface, const PALETTEENTRY *src_palette, const RECT *src_rect, DWORD filter, D3DCOLOR color_key)
Definition: surface.c:2233
HRESULT WINAPI D3DXFilterTexture(IDirect3DBaseTexture9 *texture, const PALETTEENTRY *palette, UINT srclevel, DWORD filter)
Definition: texture.c:52
HRESULT WINAPI D3DXCheckTextureRequirements(struct IDirect3DDevice9 *device, UINT *width, UINT *height, UINT *miplevels, DWORD usage, D3DFORMAT *format, D3DPOOL pool)
Definition: texture.c:412
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
static void cleanup(void)
Definition: main.c:1335
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
GLsizeiptr size
Definition: glext.h:5919
GLenum GLuint texture
Definition: glext.h:6295
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
static const WCHAR desc[]
Definition: protectdata.c:36
unsigned int UINT
Definition: ndis.h:50
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
static FILE * out
Definition: regtests2xml.c:44
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
static void render(void)
Definition: ssstars.c:272
DWORD NumSimultaneousRTs
Definition: d3d9caps.h:324
D3DFORMAT Format
Definition: d3d8types.h:1170
DWORD MultiSampleQuality
Definition: d3d9types.h:1486
D3DMULTISAMPLE_TYPE MultiSampleType
Definition: d3d8types.h:1175
D3DVIEWPORT9 viewport
Definition: render.c:34
IDirect3DSurface9 * render_target
Definition: core.c:1361
IDirect3DSurface9 * depth_stencil
Definition: render.c:33
DWORD num_render_targets
Definition: render.c:31
IDirect3DSurface9 ** render_targets
Definition: render.c:32
Definition: devices.h:37
Definition: send.c:48
D3DCUBEMAP_FACES face
Definition: render.c:442
DWORD filter
Definition: render.c:443
IDirect3DSurface9 * render_target
Definition: render.c:445
enum render_state state
Definition: render.c:439
IDirect3DDevice9 * device
Definition: render.c:436
D3DXRTE_DESC desc
Definition: render.c:437
struct device_state previous_device_state
Definition: render.c:440
IDirect3DCubeTexture9 * dst_cube_texture
Definition: render.c:448
ID3DXRenderToEnvMap ID3DXRenderToEnvMap_iface
Definition: render.c:433
IDirect3DSurface9 * depth_stencil
Definition: render.c:446
IDirect3DSurface9 * depth_stencil
Definition: render.c:123
ID3DXRenderToSurface ID3DXRenderToSurface_iface
Definition: render.c:114
D3DXRTS_DESC desc
Definition: render.c:118
IDirect3DDevice9 * device
Definition: render.c:117
IDirect3DSurface9 * dst_surface
Definition: render.c:120
struct device_state previous_state
Definition: render.c:125
IDirect3DSurface9 * render_target
Definition: render.c:122
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
#define WINAPI
Definition: msvc.h:6
#define E_NOINTERFACE
Definition: winerror.h:2364