2 * Copyright (c) 1998-2004 Lionel ULMER
3 * Copyright (c) 2002-2004 Christian Costa
5 * This file contains all the common stuff for D3D devices.
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.
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.
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34 #include "wine/debug.h"
36 #include "d3d_private.h"
39 WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
41 DWORD InitRenderStateTab[] = {
42 D3DRENDERSTATE_TEXTUREHANDLE, (DWORD)NULL,
43 D3DRENDERSTATE_ANTIALIAS, D3DANTIALIAS_NONE,
44 /* FIXME: D3DRENDERSTATE_TEXTUREADDRESS */
45 D3DRENDERSTATE_TEXTUREPERSPECTIVE, TRUE,
46 /* FIXME: D3DRENDERSTATE_WRAPU */
47 /* FIXME: D3DRENDERSTATE_WRAPV */
48 D3DRENDERSTATE_ZENABLE, D3DZB_TRUE, /* This needs to be set differently according to the Z buffer status */
49 D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID,
50 D3DRENDERSTATE_SHADEMODE, D3DSHADE_GOURAUD,
51 D3DRENDERSTATE_LINEPATTERN, 0,
52 D3DRENDERSTATE_MONOENABLE, FALSE,
53 D3DRENDERSTATE_ROP2, R2_COPYPEN,
54 D3DRENDERSTATE_PLANEMASK, 0xFFFFFFFF,
55 D3DRENDERSTATE_ZWRITEENABLE, TRUE,
56 D3DRENDERSTATE_ALPHATESTENABLE, FALSE,
57 D3DRENDERSTATE_LASTPIXEL, TRUE,
58 D3DRENDERSTATE_TEXTUREMAG, D3DFILTER_NEAREST,
59 D3DRENDERSTATE_TEXTUREMIN, D3DFILTER_NEAREST,
60 D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE,
61 D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO,
62 D3DRENDERSTATE_TEXTUREMAPBLEND, D3DTBLEND_MODULATE,
63 D3DRENDERSTATE_CULLMODE, D3DCULL_CCW,
64 D3DRENDERSTATE_ZFUNC, D3DCMP_LESSEQUAL,
65 D3DRENDERSTATE_ALPHAREF, 0,
66 D3DRENDERSTATE_ALPHAFUNC, D3DCMP_ALWAYS,
67 D3DRENDERSTATE_DITHERENABLE, FALSE,
68 D3DRENDERSTATE_ALPHABLENDENABLE, FALSE,
69 D3DRENDERSTATE_FOGENABLE, FALSE,
70 D3DRENDERSTATE_SPECULARENABLE, FALSE,
71 D3DRENDERSTATE_ZVISIBLE, FALSE,
72 D3DRENDERSTATE_SUBPIXEL, FALSE,
73 D3DRENDERSTATE_SUBPIXELX, FALSE,
74 D3DRENDERSTATE_STIPPLEDALPHA, FALSE,
75 D3DRENDERSTATE_FOGCOLOR, D3DRGBA(0,0,0,0),
76 D3DRENDERSTATE_FOGTABLEMODE, D3DFOG_NONE,
77 /* FIXME: D3DRENDERSTATE_FOGTABLESTART (same as D3DRENDERSTATE_FOGSTART) */
78 /* FIXME: D3DRENDERSTATE_FOGTABLEEND (same as D3DRENDERSTATE_FOGEND) */
79 D3DRENDERSTATE_FOGTABLEDENSITY, 0x3F80000, /* 1.0f (same as D3DRENDERSTATE_FOGDENSITY) */
80 /* FIXME: D3DRENDERSTATE_STIPPLEENABLE */
81 D3DRENDERSTATE_EDGEANTIALIAS, FALSE,
82 D3DRENDERSTATE_COLORKEYENABLE, FALSE,
83 /* FIXME: D3DRENDERSTATE_BORDERCOLOR */
84 D3DRENDERSTATE_TEXTUREADDRESSU, D3DTADDRESS_WRAP,
85 D3DRENDERSTATE_TEXTUREADDRESSV, D3DTADDRESS_WRAP,
86 D3DRENDERSTATE_MIPMAPLODBIAS, 0x00000000, /* 0.0f */
87 D3DRENDERSTATE_ZBIAS, 0,
88 D3DRENDERSTATE_RANGEFOGENABLE, FALSE,
89 /* FIXME: D3DRENDERSTATE_ANISOTROPY */
90 /* FIXME: D3DRENDERSTATE_FLUSHBATCH */
91 /* FIXME: D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT */
92 D3DRENDERSTATE_STENCILENABLE, FALSE,
93 D3DRENDERSTATE_STENCILFAIL, D3DSTENCILOP_KEEP,
94 D3DRENDERSTATE_STENCILZFAIL, D3DSTENCILOP_KEEP,
95 D3DRENDERSTATE_STENCILPASS, D3DSTENCILOP_KEEP,
96 D3DRENDERSTATE_STENCILFUNC, D3DCMP_ALWAYS,
97 D3DRENDERSTATE_STENCILREF, 0,
98 D3DRENDERSTATE_STENCILMASK, 0xFFFFFFFF,
99 D3DRENDERSTATE_STENCILWRITEMASK, 0xFFFFFFFF,
100 /* FIXME: D3DRENDERSTATE_TEXTUREFACTOR */
101 /* FIXME: D3DRENDERSTATE_STIPPLEPATTERN00..31 */
102 D3DRENDERSTATE_WRAP0, 0,
103 D3DRENDERSTATE_WRAP1, 0,
104 D3DRENDERSTATE_WRAP2, 0,
105 D3DRENDERSTATE_WRAP3, 0,
106 D3DRENDERSTATE_WRAP4, 0,
107 D3DRENDERSTATE_WRAP5, 0,
108 D3DRENDERSTATE_WRAP6, 0,
109 D3DRENDERSTATE_WRAP7, 0,
110 D3DRENDERSTATE_CLIPPING, FALSE,
111 D3DRENDERSTATE_LIGHTING, TRUE,
112 D3DRENDERSTATE_EXTENTS, FALSE,
113 D3DRENDERSTATE_AMBIENT, D3DRGBA(0,0,0,0),
114 D3DRENDERSTATE_FOGVERTEXMODE, D3DFOG_NONE,
115 D3DRENDERSTATE_COLORVERTEX, TRUE,
116 D3DRENDERSTATE_LOCALVIEWER, TRUE,
117 D3DRENDERSTATE_NORMALIZENORMALS, FALSE,
118 /* FIXME: D3DRENDER_STATE_COLORKEYBLENDENABLE */
119 D3DRENDERSTATE_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1,
120 D3DRENDERSTATE_SPECULARMATERIALSOURCE, D3DMCS_COLOR2,
121 D3DRENDERSTATE_AMBIENTMATERIALSOURCE, D3DMCS_COLOR2,
122 D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, D3DMCS_MATERIAL,
123 D3DRENDERSTATE_VERTEXBLEND, D3DVBLEND_DISABLE,
124 D3DRENDERSTATE_CLIPPLANEENABLE, 0
127 DWORD InitLightStateTab[] = {
128 D3DLIGHTSTATE_MATERIAL, (DWORD)NULL,
129 D3DLIGHTSTATE_AMBIENT, D3DRGBA(0,0,0,0),
130 D3DLIGHTSTATE_COLORMODEL, D3DCOLOR_RGB,
131 D3DLIGHTSTATE_FOGMODE, D3DFOG_NONE,
132 D3DLIGHTSTATE_FOGSTART, 0x3F80000, /* 1.0f */
133 D3DLIGHTSTATE_FOGEND, 0x42C8000, /* 100.0f */
134 D3DLIGHTSTATE_FOGDENSITY, 0x3F80000 /* 1.0f */
135 /* FIXME: D3DLIGHTSTATE_COLORVERTEX */
138 DWORD InitTextureStageStateTab[] = {
139 D3DTSS_COLOROP, D3DTOP_DISABLE, /* Note, it's manually set for stage 0 */
140 D3DTSS_COLORARG1, D3DTA_TEXTURE,
141 D3DTSS_COLORARG2, D3DTA_CURRENT,
142 D3DTSS_ALPHAOP, D3DTOP_DISABLE, /* Note, it's manually set for stage 0 */
143 D3DTSS_ALPHAARG1, D3DTA_TEXTURE,
144 D3DTSS_ALPHAARG2, D3DTA_CURRENT,
145 /* FIXME: D3DTSS_BUMPENVMAT00,01,10,11 */
146 /* D3DTSS_TEXCOORDINDEX is set manually */
147 D3DTSS_ADDRESS, D3DTADDRESS_WRAP,
148 D3DTSS_ADDRESSU, D3DTADDRESS_WRAP,
149 D3DTSS_ADDRESSV, D3DTADDRESS_WRAP,
150 D3DTSS_BORDERCOLOR, 0x00000000,
151 D3DTSS_MAGFILTER, D3DTFG_POINT,
152 D3DTSS_MINFILTER, D3DTFN_POINT,
153 D3DTSS_MIPFILTER, D3DTFP_NONE,
154 D3DTSS_MIPMAPLODBIAS, 0x00000000, /* 0.0f */
155 D3DTSS_MAXMIPLEVEL, 0,
156 /* D3DTSS_MAXANISOTROPY, 1, */ /* This is to prevent warnings :-) */
157 /* FIXME: D3DTSS_BUMPENVLSCALE */
158 /* FIXME: D3DTSS_NUMPENVLOFFSET */
159 /* FIXME: D3DTSS_TEXTURETRANSFORMFLAGS */
163 void InitDefaultStateBlock(STATEBLOCK* lpStateBlock, int version)
166 TRACE("(%p,%d)\n", lpStateBlock, version);
167 memset(lpStateBlock, 0, sizeof(STATEBLOCK));
169 /* Initialize render states */
170 for (i = 0; i < sizeof(InitRenderStateTab) / sizeof(InitRenderStateTab[0]); i += 2)
172 lpStateBlock->render_state[InitRenderStateTab[i] - 1] = InitRenderStateTab[i + 1];
173 lpStateBlock->set_flags.render_state[InitRenderStateTab[i] - 1] = TRUE;
176 /* Initialize texture stages states */
177 for (i = 0; i < MAX_TEXTURES; i++)
179 for (j = 0; j < sizeof(InitTextureStageStateTab) / sizeof(InitTextureStageStateTab[0]); j += 2)
181 lpStateBlock->texture_stage_state[i][InitTextureStageStateTab[j] - 1] = InitTextureStageStateTab[j + 1];
182 lpStateBlock->set_flags.texture_stage_state[i][InitTextureStageStateTab[j] - 1] = TRUE;
184 /* Map texture coords 0 to stage 0, 1 to stage 1, etc... */
185 lpStateBlock->texture_stage_state[i][D3DTSS_TEXCOORDINDEX - 1] = i;
186 lpStateBlock->set_flags.texture_stage_state[i][D3DTSS_TEXCOORDINDEX - 1] = TRUE;
189 /* The first texture is particular, update it consequently */
190 lpStateBlock->texture_stage_state[0][D3DTSS_COLOROP - 1] = D3DTOP_MODULATE;
191 lpStateBlock->texture_stage_state[0][D3DTSS_ALPHAOP - 1] = D3DTOP_SELECTARG1;
192 lpStateBlock->texture_stage_state[0][D3DTSS_COLORARG2 - 1] = D3DTA_DIFFUSE;
193 lpStateBlock->texture_stage_state[0][D3DTSS_ALPHAARG2 - 1] = D3DTA_DIFFUSE;
195 /* Updates for particular versions */
196 if ((version == 1) || (version==2))
197 lpStateBlock->render_state[D3DRENDERSTATE_SPECULARENABLE - 1] = TRUE;
201 Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3DDEVICE7 iface,
205 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
206 TRACE("(%p/%p)->(%s,%p)\n", This, iface, debugstr_guid(riid), obp);
210 if ( IsEqualGUID( &IID_IUnknown, riid ) ) {
211 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
213 TRACE(" Creating IUnknown interface at %p.\n", *obp);
216 if ( IsEqualGUID( &IID_IDirect3DDevice, riid ) ) {
217 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
218 *obp = ICOM_INTERFACE(This, IDirect3DDevice);
219 TRACE(" Creating IDirect3DDevice interface %p\n", *obp);
222 if ( IsEqualGUID( &IID_IDirect3DDevice2, riid ) ) {
223 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
224 *obp = ICOM_INTERFACE(This, IDirect3DDevice2);
225 TRACE(" Creating IDirect3DDevice2 interface %p\n", *obp);
228 if ( IsEqualGUID( &IID_IDirect3DDevice3, riid ) ) {
229 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
230 *obp = ICOM_INTERFACE(This, IDirect3DDevice3);
231 TRACE(" Creating IDirect3DDevice3 interface %p\n", *obp);
234 if ( IsEqualGUID( &IID_IDirect3DDevice7, riid ) ) {
235 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
236 *obp = ICOM_INTERFACE(This, IDirect3DDevice7);
237 TRACE(" Creating IDirect3DDevice7 interface %p\n", *obp);
240 if ( IsEqualGUID( &IID_IDirectDrawSurface, riid ) ||
241 IsEqualGUID( &IID_IDirectDrawSurface2, riid ) ||
242 IsEqualGUID( &IID_IDirectDrawSurface3, riid ) ) {
243 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
244 *obp = ICOM_INTERFACE(This->surface, IDirectDrawSurface3);
245 TRACE(" Return IDirectDrawSurface3 interface %p\n", *obp);
248 if ( IsEqualGUID( &IID_IDirectDrawSurface4, riid ) ||
249 IsEqualGUID( &IID_IDirectDrawSurface7, riid ) ) {
250 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
251 *obp = ICOM_INTERFACE(This->surface, IDirectDrawSurface7);
252 TRACE(" Return IDirectDrawSurface7 interface %p\n", *obp);
255 FIXME("(%p): interface for IID %s NOT found!\n", This, debugstr_guid(riid));
256 return OLE_E_ENUM_NOMORE;
260 Main_IDirect3DDeviceImpl_7_3T_2T_1T_AddRef(LPDIRECT3DDEVICE7 iface)
262 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
263 ULONG ref = InterlockedIncrement(&This->ref);
265 TRACE("(%p/%p)->() incrementing from %lu.\n", This, iface, ref - 1);
271 Main_IDirect3DDeviceImpl_7_3T_2T_1T_Release(LPDIRECT3DDEVICE7 iface)
273 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
274 ULONG ref = InterlockedDecrement(&This->ref);
276 TRACE("(%p/%p)->() decrementing from %lu.\n", This, iface, ref + 1);
280 /* Release texture associated with the device */
281 for (i = 0; i < MAX_TEXTURES; i++) {
282 if (This->current_texture[i] != NULL)
283 IDirect3DTexture2_Release(ICOM_INTERFACE(This->current_texture[i], IDirect3DTexture2));
286 HeapFree(GetProcessHeap(), 0, This);
293 Main_IDirect3DDeviceImpl_7_GetCaps(LPDIRECT3DDEVICE7 iface,
294 LPD3DDEVICEDESC7 lpD3DHELDevDesc)
296 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
297 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DHELDevDesc);
302 Main_IDirect3DDeviceImpl_7_3T_EnumTextureFormats(LPDIRECT3DDEVICE7 iface,
303 LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
306 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
307 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumPixelProc, lpArg);
312 Main_IDirect3DDeviceImpl_7_3T_2T_1T_BeginScene(LPDIRECT3DDEVICE7 iface)
314 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
315 TRACE("(%p/%p)->()\n", This, iface);
321 Main_IDirect3DDeviceImpl_7_3T_2T_1T_EndScene(LPDIRECT3DDEVICE7 iface)
323 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
324 TRACE("(%p/%p)->()\n", This, iface);
330 Main_IDirect3DDeviceImpl_7_3T_2T_1T_GetDirect3D(LPDIRECT3DDEVICE7 iface,
331 LPDIRECT3D7* lplpDirect3D7)
333 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
334 TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3D7);
336 *lplpDirect3D7 = ICOM_INTERFACE(This->d3d, IDirect3D7);
337 IDirect3D7_AddRef(ICOM_INTERFACE(This->d3d, IDirect3D7));
339 TRACE(" returning interface %p\n", *lplpDirect3D7);
344 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderTarget(LPDIRECT3DDEVICE7 iface,
345 LPDIRECTDRAWSURFACE7 lpNewRenderTarget,
348 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
349 IDirectDrawSurfaceImpl *target_impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, lpNewRenderTarget);
351 TRACE("(%p/%p)->(%p,%08lx)\n", This, iface, lpNewRenderTarget, dwFlags);
352 if (target_impl != This->surface) {
353 WARN(" Change of rendering target not handled yet !\n");
359 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderTarget(LPDIRECT3DDEVICE7 iface,
360 LPDIRECTDRAWSURFACE7* lplpRenderTarget)
362 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
363 TRACE("(%p/%p)->(%p)\n", This, iface, lplpRenderTarget);
365 *lplpRenderTarget = ICOM_INTERFACE(This->surface, IDirectDrawSurface7);
366 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
368 TRACE(" returning surface at %p.\n", *lplpRenderTarget);
374 Main_IDirect3DDeviceImpl_7_Clear(LPDIRECT3DDEVICE7 iface,
382 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
383 TRACE("(%p/%p)->(%08lx,%p,%08lx,%08lx,%f,%08lx)\n", This, iface, dwCount, lpRects, dwFlags, (DWORD) dwColor, dvZ, dwStencil);
384 return This->clear(This, dwCount, lpRects, dwFlags, dwColor, dvZ, dwStencil);
388 Main_IDirect3DDeviceImpl_7_3T_2T_SetTransform(LPDIRECT3DDEVICE7 iface,
389 D3DTRANSFORMSTATETYPE dtstTransformStateType,
390 LPD3DMATRIX lpD3DMatrix)
392 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
393 DWORD matrix_changed = 0x00000000;
395 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
397 switch (dtstTransformStateType) {
398 case D3DTRANSFORMSTATE_WORLD: {
399 if (TRACE_ON(ddraw)) {
400 TRACE(" D3DTRANSFORMSTATE_WORLD :\n"); dump_D3DMATRIX(lpD3DMatrix);
402 memcpy(This->world_mat, lpD3DMatrix, 16 * sizeof(float));
403 matrix_changed = WORLDMAT_CHANGED;
406 case D3DTRANSFORMSTATE_VIEW: {
407 if (TRACE_ON(ddraw)) {
408 TRACE(" D3DTRANSFORMSTATE_VIEW :\n"); dump_D3DMATRIX(lpD3DMatrix);
410 memcpy(This->view_mat, lpD3DMatrix, 16 * sizeof(float));
411 matrix_changed = VIEWMAT_CHANGED;
414 case D3DTRANSFORMSTATE_PROJECTION: {
415 if (TRACE_ON(ddraw)) {
416 TRACE(" D3DTRANSFORMSTATE_PROJECTION :\n"); dump_D3DMATRIX(lpD3DMatrix);
418 memcpy(This->proj_mat, lpD3DMatrix, 16 * sizeof(float));
419 matrix_changed = PROJMAT_CHANGED;
422 case D3DTRANSFORMSTATE_TEXTURE0:
423 case D3DTRANSFORMSTATE_TEXTURE1:
424 case D3DTRANSFORMSTATE_TEXTURE2:
425 case D3DTRANSFORMSTATE_TEXTURE3:
426 case D3DTRANSFORMSTATE_TEXTURE4:
427 case D3DTRANSFORMSTATE_TEXTURE5:
428 case D3DTRANSFORMSTATE_TEXTURE6:
429 case D3DTRANSFORMSTATE_TEXTURE7: {
430 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
431 if (TRACE_ON(ddraw)) {
432 TRACE(" D3DTRANSFORMSTATE_TEXTURE%ld :\n", mat_num); dump_D3DMATRIX(lpD3DMatrix);
434 memcpy(This->tex_mat[mat_num], lpD3DMatrix, 16 * sizeof(float));
435 matrix_changed = TEXMAT0_CHANGED << mat_num;
439 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
443 if (matrix_changed != 0x00000000) This->matrices_updated(This, matrix_changed);
449 Main_IDirect3DDeviceImpl_7_3T_2T_GetTransform(LPDIRECT3DDEVICE7 iface,
450 D3DTRANSFORMSTATETYPE dtstTransformStateType,
451 LPD3DMATRIX lpD3DMatrix)
453 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
454 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
456 switch (dtstTransformStateType) {
457 case D3DTRANSFORMSTATE_WORLD: {
458 memcpy(lpD3DMatrix, This->world_mat, 16 * sizeof(D3DVALUE));
459 if (TRACE_ON(ddraw)) {
460 TRACE(" returning D3DTRANSFORMSTATE_WORLD :\n");
461 dump_D3DMATRIX(lpD3DMatrix);
465 case D3DTRANSFORMSTATE_VIEW: {
466 memcpy(lpD3DMatrix, This->view_mat, 16 * sizeof(D3DVALUE));
467 if (TRACE_ON(ddraw)) {
468 TRACE(" returning D3DTRANSFORMSTATE_VIEW :\n");
469 dump_D3DMATRIX(lpD3DMatrix);
473 case D3DTRANSFORMSTATE_PROJECTION: {
474 memcpy(lpD3DMatrix, This->proj_mat, 16 * sizeof(D3DVALUE));
475 if (TRACE_ON(ddraw)) {
476 TRACE(" returning D3DTRANSFORMSTATE_PROJECTION :\n");
477 dump_D3DMATRIX(lpD3DMatrix);
481 case D3DTRANSFORMSTATE_TEXTURE0:
482 case D3DTRANSFORMSTATE_TEXTURE1:
483 case D3DTRANSFORMSTATE_TEXTURE2:
484 case D3DTRANSFORMSTATE_TEXTURE3:
485 case D3DTRANSFORMSTATE_TEXTURE4:
486 case D3DTRANSFORMSTATE_TEXTURE5:
487 case D3DTRANSFORMSTATE_TEXTURE6:
488 case D3DTRANSFORMSTATE_TEXTURE7: {
489 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
490 memcpy(lpD3DMatrix, This->tex_mat[mat_num], 16 * sizeof(D3DVALUE));
491 if (TRACE_ON(ddraw)) {
492 TRACE(" returning D3DTRANSFORMSTATE_TEXTURE%ld :\n", mat_num);
493 dump_D3DMATRIX(lpD3DMatrix);
498 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
499 return DDERR_INVALIDPARAMS;
506 Main_IDirect3DDeviceImpl_7_3T_2T_MultiplyTransform(LPDIRECT3DDEVICE7 iface,
507 D3DTRANSFORMSTATETYPE dtstTransformStateType,
508 LPD3DMATRIX lpD3DMatrix)
510 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
512 DWORD matrix_changed = 0x00000000;
514 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
516 if (TRACE_ON(ddraw)) {
517 TRACE(" Multiplying by :\n"); dump_D3DMATRIX(lpD3DMatrix);
520 switch (dtstTransformStateType) {
521 case D3DTRANSFORMSTATE_WORLD: {
522 if (TRACE_ON(ddraw)) {
523 TRACE(" Resulting D3DTRANSFORMSTATE_WORLD matrix is :\n");
525 mat = This->world_mat;
526 matrix_changed = WORLDMAT_CHANGED;
529 case D3DTRANSFORMSTATE_VIEW: {
530 if (TRACE_ON(ddraw)) {
531 TRACE(" Resulting D3DTRANSFORMSTATE_VIEW matrix is :\n");
533 mat = This->view_mat;
534 matrix_changed = VIEWMAT_CHANGED;
537 case D3DTRANSFORMSTATE_PROJECTION: {
538 if (TRACE_ON(ddraw)) {
539 TRACE(" Resulting D3DTRANSFORMSTATE_PROJECTION matrix is :\n");
541 mat = This->proj_mat;
542 matrix_changed = PROJMAT_CHANGED;
545 case D3DTRANSFORMSTATE_TEXTURE0:
546 case D3DTRANSFORMSTATE_TEXTURE1:
547 case D3DTRANSFORMSTATE_TEXTURE2:
548 case D3DTRANSFORMSTATE_TEXTURE3:
549 case D3DTRANSFORMSTATE_TEXTURE4:
550 case D3DTRANSFORMSTATE_TEXTURE5:
551 case D3DTRANSFORMSTATE_TEXTURE6:
552 case D3DTRANSFORMSTATE_TEXTURE7: {
553 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
554 if (TRACE_ON(ddraw)) {
555 TRACE(" Resulting D3DTRANSFORMSTATE_TEXTURE%ld matrix is :\n", mat_num);
557 mat = This->tex_mat[mat_num];
558 matrix_changed = TEXMAT0_CHANGED << mat_num;
562 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
563 return DDERR_INVALIDPARAMS;
566 multiply_matrix(mat,mat,lpD3DMatrix);
568 if (TRACE_ON(ddraw)) {
572 if (matrix_changed != 0x00000000) This->matrices_updated(This, matrix_changed);
578 Main_IDirect3DDeviceImpl_7_GetViewport(LPDIRECT3DDEVICE7 iface,
579 LPD3DVIEWPORT7 lpData)
581 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
582 TRACE("(%p/%p)->(%p)\n", This, iface, lpData);
584 *lpData = This->active_viewport;
586 if (TRACE_ON(ddraw)) {
587 TRACE(" returning viewport : \n");
588 TRACE(" - dwX = %ld dwY = %ld\n",
589 lpData->dwX, lpData->dwY);
590 TRACE(" - dwWidth = %ld dwHeight = %ld\n",
591 lpData->dwWidth, lpData->dwHeight);
592 TRACE(" - dvMinZ = %f dvMaxZ = %f\n",
593 lpData->dvMinZ, lpData->dvMaxZ);
600 Main_IDirect3DDeviceImpl_7_SetMaterial(LPDIRECT3DDEVICE7 iface,
601 LPD3DMATERIAL7 lpMat)
603 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
604 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpMat);
609 Main_IDirect3DDeviceImpl_7_GetMaterial(LPDIRECT3DDEVICE7 iface,
610 LPD3DMATERIAL7 lpMat)
612 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
613 TRACE("(%p/%p)->(%p)\n", This, iface, lpMat);
615 *lpMat = This->current_material;
617 if (TRACE_ON(ddraw)) {
618 TRACE(" returning material : \n");
619 dump_D3DMATERIAL7(lpMat);
626 Main_IDirect3DDeviceImpl_7_SetLight(LPDIRECT3DDEVICE7 iface,
630 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
631 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwLightIndex, lpLight);
636 Main_IDirect3DDeviceImpl_7_GetLight(LPDIRECT3DDEVICE7 iface,
640 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
641 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwLightIndex, lpLight);
643 if (dwLightIndex > MAX_LIGHTS) return DDERR_INVALIDPARAMS;
644 *lpLight = This->light_parameters[dwLightIndex];
646 if (TRACE_ON(ddraw)) {
647 TRACE(" returning light : \n");
648 dump_D3DLIGHT7(lpLight);
655 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderState(LPDIRECT3DDEVICE7 iface,
656 D3DRENDERSTATETYPE dwRenderStateType,
659 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
660 FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwRenderStateType, dwRenderState);
665 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderState(LPDIRECT3DDEVICE7 iface,
666 D3DRENDERSTATETYPE dwRenderStateType,
667 LPDWORD lpdwRenderState)
669 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
670 FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dwRenderStateType, lpdwRenderState);
675 Main_IDirect3DDeviceImpl_7_BeginStateBlock(LPDIRECT3DDEVICE7 iface)
677 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
678 FIXME("(%p/%p)->(): stub!\n", This, iface);
683 Main_IDirect3DDeviceImpl_7_EndStateBlock(LPDIRECT3DDEVICE7 iface,
684 LPDWORD lpdwBlockHandle)
686 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
687 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpdwBlockHandle);
692 Main_IDirect3DDeviceImpl_7_PreLoad(LPDIRECT3DDEVICE7 iface,
693 LPDIRECTDRAWSURFACE7 lpddsTexture)
695 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
696 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpddsTexture);
701 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitive(LPDIRECT3DDEVICE7 iface,
702 D3DPRIMITIVETYPE d3dptPrimitiveType,
703 DWORD d3dvtVertexType,
708 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
709 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
714 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitive(LPDIRECT3DDEVICE7 iface,
715 D3DPRIMITIVETYPE d3dptPrimitiveType,
716 DWORD d3dvtVertexType,
723 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
724 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
729 Main_IDirect3DDeviceImpl_7_3T_2T_SetClipStatus(LPDIRECT3DDEVICE7 iface,
730 LPD3DCLIPSTATUS lpD3DClipStatus)
732 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
733 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
738 Main_IDirect3DDeviceImpl_7_3T_2T_GetClipStatus(LPDIRECT3DDEVICE7 iface,
739 LPD3DCLIPSTATUS lpD3DClipStatus)
741 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
742 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
747 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
748 D3DPRIMITIVETYPE d3dptPrimitiveType,
750 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
754 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
755 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
760 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
761 D3DPRIMITIVETYPE d3dptPrimitiveType,
763 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
769 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
770 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
775 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitiveVB(LPDIRECT3DDEVICE7 iface,
776 D3DPRIMITIVETYPE d3dptPrimitiveType,
777 LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
782 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
783 FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
788 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE7 iface,
789 D3DPRIMITIVETYPE d3dptPrimitiveType,
790 LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
797 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
798 FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, lpwIndices, dwIndexCount, dwFlags);
803 Main_IDirect3DDeviceImpl_7_3T_ComputeSphereVisibility(LPDIRECT3DDEVICE7 iface,
804 LPD3DVECTOR lpCenters,
808 LPDWORD lpdwReturnValues)
810 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
811 FIXME("(%p/%p)->(%p,%p,%08lx,%08lx,%p): stub!\n", This, iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
816 Main_IDirect3DDeviceImpl_7_3T_GetTexture(LPDIRECT3DDEVICE7 iface,
818 LPDIRECTDRAWSURFACE7* lpTexture)
820 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
821 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwStage, lpTexture);
823 if (This->current_texture[dwStage] != NULL) {
824 *lpTexture = ICOM_INTERFACE(This->current_texture[dwStage], IDirectDrawSurface7);
825 IDirectDrawSurface7_AddRef(*lpTexture);
830 TRACE(" returning interface at %p (for implementation at %p).\n", *lpTexture, This->current_texture[dwStage]);
836 Main_IDirect3DDeviceImpl_7_3T_SetTexture(LPDIRECT3DDEVICE7 iface,
838 LPDIRECTDRAWSURFACE7 lpTexture)
840 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
841 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lpTexture);
846 Main_IDirect3DDeviceImpl_7_3T_GetTextureStageState(LPDIRECT3DDEVICE7 iface,
848 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
851 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
852 TRACE("(%p/%p)->(%08lx,%08x,%p)\n", This, iface, dwStage, d3dTexStageStateType, lpdwState);
853 if (lpdwState && (dwStage < 8) && d3dTexStageStateType && (d3dTexStageStateType <= HIGHEST_TEXTURE_STAGE_STATE) ) {
854 *lpdwState = This->state_block.texture_stage_state[dwStage][d3dTexStageStateType-1];
857 return DDERR_INVALIDPARAMS;
861 Main_IDirect3DDeviceImpl_7_3T_SetTextureStageState(LPDIRECT3DDEVICE7 iface,
863 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
866 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
867 FIXME("(%p/%p)->(%08lx,%08x,%08lx): stub!\n", This, iface, dwStage, d3dTexStageStateType, dwState);
872 Main_IDirect3DDeviceImpl_7_3T_ValidateDevice(LPDIRECT3DDEVICE7 iface,
875 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
876 FIXME("(%p/%p)->(%p): semi-stub!\n", This, iface, lpdwPasses);
878 /* For the moment, we have a VERY good hardware which does everything in one pass :-) */
885 Main_IDirect3DDeviceImpl_7_ApplyStateBlock(LPDIRECT3DDEVICE7 iface,
888 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
889 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
894 Main_IDirect3DDeviceImpl_7_CaptureStateBlock(LPDIRECT3DDEVICE7 iface,
897 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
898 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
903 Main_IDirect3DDeviceImpl_7_DeleteStateBlock(LPDIRECT3DDEVICE7 iface,
906 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
907 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
912 Main_IDirect3DDeviceImpl_7_CreateStateBlock(LPDIRECT3DDEVICE7 iface,
913 D3DSTATEBLOCKTYPE d3dsbType,
914 LPDWORD lpdwBlockHandle)
916 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
917 FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, d3dsbType, lpdwBlockHandle);
922 Main_IDirect3DDeviceImpl_7_Load(LPDIRECT3DDEVICE7 iface,
923 LPDIRECTDRAWSURFACE7 lpDestTex,
925 LPDIRECTDRAWSURFACE7 lpSrcTex,
929 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
930 FIXME("(%p/%p)->(%p,%p,%p,%p,%08lx): Partially Implemented!\n", This, iface, lpDestTex, lpDestPoint, lpSrcTex, lprcSrcRect, dwFlags);
931 IDirect3DTexture2_Load(COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, lpDestTex),
932 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, lpSrcTex));
937 Main_IDirect3DDeviceImpl_7_LightEnable(LPDIRECT3DDEVICE7 iface,
941 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
942 FIXME("(%p/%p)->(%08lx,%d): stub!\n", This, iface, dwLightIndex, bEnable);
947 Main_IDirect3DDeviceImpl_7_GetLightEnable(LPDIRECT3DDEVICE7 iface,
951 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
952 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwLightIndex, pbEnable);
954 if (dwLightIndex > MAX_LIGHTS) *pbEnable = 0;
955 else *pbEnable = ((0x00000001 << dwLightIndex) & This->active_lights) != 0;
957 TRACE(" returning %d.\n", *pbEnable);
963 Main_IDirect3DDeviceImpl_7_SetClipPlane(LPDIRECT3DDEVICE7 iface,
965 D3DVALUE* pPlaneEquation)
967 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
968 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwIndex, pPlaneEquation);
973 Main_IDirect3DDeviceImpl_7_GetClipPlane(LPDIRECT3DDEVICE7 iface, DWORD dwIndex, D3DVALUE* pPlaneEquation)
975 IDirect3DDeviceImpl *This = (IDirect3DDeviceImpl *)iface;
977 TRACE("(%p)->(%ld,%p)\n", This, dwIndex, pPlaneEquation);
979 if (dwIndex>=This->max_clipping_planes) {
980 return DDERR_INVALIDPARAMS;
983 memcpy( pPlaneEquation, This->clipping_planes[dwIndex].plane, sizeof(D3DVALUE[4]));
989 Main_IDirect3DDeviceImpl_7_GetInfo(LPDIRECT3DDEVICE7 iface,
991 LPVOID pDevInfoStruct,
994 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
995 TRACE("(%p/%p)->(%08lx,%p,%08lx)\n", This, iface, dwDevInfoID, pDevInfoStruct, dwSize);
997 if (TRACE_ON(ddraw)) {
998 TRACE(" info requested : ");
999 switch (dwDevInfoID) {
1000 case D3DDEVINFOID_TEXTUREMANAGER: TRACE("D3DDEVINFOID_TEXTUREMANAGER\n"); break;
1001 case D3DDEVINFOID_D3DTEXTUREMANAGER: TRACE("D3DDEVINFOID_D3DTEXTUREMANAGER\n"); break;
1002 case D3DDEVINFOID_TEXTURING: TRACE("D3DDEVINFOID_TEXTURING\n"); break;
1003 default: ERR(" invalid flag !!!\n"); return DDERR_INVALIDPARAMS;
1007 return S_FALSE; /* According to MSDN, this is valid for a non-debug driver */
1011 Main_IDirect3DDeviceImpl_3_2T_1T_GetCaps(LPDIRECT3DDEVICE3 iface,
1012 LPD3DDEVICEDESC lpD3DHWDevDesc,
1013 LPD3DDEVICEDESC lpD3DHELDevDesc)
1015 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1016 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1021 Main_IDirect3DDeviceImpl_3_2T_1T_GetStats(LPDIRECT3DDEVICE3 iface,
1022 LPD3DSTATS lpD3DStats)
1024 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1025 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DStats);
1030 Main_IDirect3DDeviceImpl_3_2T_1T_AddViewport(LPDIRECT3DDEVICE3 iface,
1031 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1033 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1034 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1036 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1038 lpDirect3DViewportImpl->next = This->viewport_list;
1039 This->viewport_list = lpDirect3DViewportImpl;
1045 Main_IDirect3DDeviceImpl_3_2T_1T_DeleteViewport(LPDIRECT3DDEVICE3 iface,
1046 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1048 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1049 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1050 IDirect3DViewportImpl *cur_viewport, *prev_viewport = NULL;
1052 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1054 cur_viewport = This->viewport_list;
1055 while (cur_viewport != NULL) {
1056 if (cur_viewport == lpDirect3DViewportImpl) {
1057 if (prev_viewport == NULL) This->viewport_list = cur_viewport->next;
1058 else prev_viewport->next = cur_viewport->next;
1059 /* TODO : add desactivate of the viewport and all associated lights... */
1062 prev_viewport = cur_viewport;
1063 cur_viewport = cur_viewport->next;
1066 return DDERR_INVALIDPARAMS;
1070 Main_IDirect3DDeviceImpl_3_2T_1T_NextViewport(LPDIRECT3DDEVICE3 iface,
1071 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3,
1072 LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3,
1075 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1076 IDirect3DViewportImpl *res = NULL;
1078 TRACE("(%p/%p)->(%p,%p,%08lx)\n", This, iface, lpDirect3DViewport3, lplpDirect3DViewport3, dwFlags);
1081 case D3DNEXT_NEXT: {
1082 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1083 res = lpDirect3DViewportImpl->next;
1085 case D3DNEXT_HEAD: {
1086 res = This->viewport_list;
1088 case D3DNEXT_TAIL: {
1089 IDirect3DViewportImpl *cur_viewport = This->viewport_list;
1090 if (cur_viewport != NULL) {
1091 while (cur_viewport->next != NULL) cur_viewport = cur_viewport->next;
1096 *lplpDirect3DViewport3 = NULL;
1097 return DDERR_INVALIDPARAMS;
1099 *lplpDirect3DViewport3 = ICOM_INTERFACE(res, IDirect3DViewport3);
1104 Main_IDirect3DDeviceImpl_3_2T_SetCurrentViewport(LPDIRECT3DDEVICE3 iface,
1105 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1107 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1108 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1110 /* Do nothing if the specified viewport is the same as the current one */
1111 if (This->current_viewport == ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3))
1114 /* Should check if the viewport was added or not */
1116 /* Release previous viewport and AddRef the new one */
1117 if (This->current_viewport)
1118 IDirect3DViewport3_Release(ICOM_INTERFACE(This->current_viewport, IDirect3DViewport3));
1119 IDirect3DViewport3_AddRef(lpDirect3DViewport3);
1121 /* Set this viewport as the current viewport */
1122 This->current_viewport = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1124 /* Activate this viewport */
1125 This->current_viewport->active_device = This;
1126 This->current_viewport->activate(This->current_viewport);
1132 Main_IDirect3DDeviceImpl_3_2T_GetCurrentViewport(LPDIRECT3DDEVICE3 iface,
1133 LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3)
1135 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1136 TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3DViewport3);
1138 *lplpDirect3DViewport3 = ICOM_INTERFACE(This->current_viewport, IDirect3DViewport3);
1140 /* AddRef the returned viewport */
1141 IDirect3DViewport3_AddRef(*lplpDirect3DViewport3);
1143 TRACE(" returning interface %p\n", *lplpDirect3DViewport3);
1149 Main_IDirect3DDeviceImpl_3_Begin(LPDIRECT3DDEVICE3 iface,
1150 D3DPRIMITIVETYPE d3dptPrimitiveType,
1151 DWORD dwVertexTypeDesc,
1154 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1155 FIXME("(%p/%p)->(%08x,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexTypeDesc, dwFlags);
1160 Main_IDirect3DDeviceImpl_3_BeginIndexed(LPDIRECT3DDEVICE3 iface,
1161 D3DPRIMITIVETYPE d3dptPrimitiveType,
1162 DWORD d3dvtVertexType,
1164 DWORD dwNumVertices,
1167 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1168 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
1173 Main_IDirect3DDeviceImpl_3_2T_Vertex(LPDIRECT3DDEVICE3 iface,
1174 LPVOID lpVertexType)
1176 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1177 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpVertexType);
1182 Main_IDirect3DDeviceImpl_3_2T_Index(LPDIRECT3DDEVICE3 iface,
1185 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1186 FIXME("(%p/%p)->(%04x): stub!\n", This, iface, wVertexIndex);
1191 Main_IDirect3DDeviceImpl_3_2T_End(LPDIRECT3DDEVICE3 iface,
1194 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1195 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwFlags);
1200 Main_IDirect3DDeviceImpl_3_2T_GetLightState(LPDIRECT3DDEVICE3 iface,
1201 D3DLIGHTSTATETYPE dwLightStateType,
1202 LPDWORD lpdwLightState)
1204 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1205 FIXME("(%p/%p)->(%08x,%p): stub !\n", This, iface, dwLightStateType, lpdwLightState);
1210 Main_IDirect3DDeviceImpl_3_2T_SetLightState(LPDIRECT3DDEVICE3 iface,
1211 D3DLIGHTSTATETYPE dwLightStateType,
1214 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1215 FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwLightStateType, dwLightState);
1220 Main_IDirect3DDeviceImpl_2_1T_SwapTextureHandles(LPDIRECT3DDEVICE2 iface,
1221 LPDIRECT3DTEXTURE2 lpD3DTex1,
1222 LPDIRECT3DTEXTURE2 lpD3DTex2)
1224 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1225 IDirectDrawSurfaceImpl tmp,*surf1,*surf2;
1226 TRACE("(%p/%p)->(%p,%p):\n", This, iface, lpD3DTex1, lpD3DTex2);
1228 surf1 = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirect3DTexture2,lpD3DTex1);
1229 surf2 = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirect3DTexture2,lpD3DTex2);
1238 Main_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE2 iface,
1239 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
1240 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
1243 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1244 FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
1249 Main_IDirect3DDeviceImpl_2_1T_EnumTextureFormats(LPDIRECT3DDEVICE2 iface,
1250 LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
1253 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1254 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumTextureProc, lpArg);
1259 Main_IDirect3DDeviceImpl_2_Begin(LPDIRECT3DDEVICE2 iface,
1260 D3DPRIMITIVETYPE d3dpt,
1261 D3DVERTEXTYPE dwVertexTypeDesc,
1264 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1265 FIXME("(%p/%p)->(%08x,%08x,%08lx): stub!\n", This, iface, d3dpt, dwVertexTypeDesc, dwFlags);
1270 Main_IDirect3DDeviceImpl_2_BeginIndexed(LPDIRECT3DDEVICE2 iface,
1271 D3DPRIMITIVETYPE d3dptPrimitiveType,
1272 D3DVERTEXTYPE d3dvtVertexType,
1274 DWORD dwNumVertices,
1277 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1278 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
1283 Main_IDirect3DDeviceImpl_2_DrawPrimitive(LPDIRECT3DDEVICE2 iface,
1284 D3DPRIMITIVETYPE d3dptPrimitiveType,
1285 D3DVERTEXTYPE d3dvtVertexType,
1287 DWORD dwVertexCount,
1290 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1291 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
1296 Main_IDirect3DDeviceImpl_2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 iface,
1297 D3DPRIMITIVETYPE d3dptPrimitiveType,
1298 D3DVERTEXTYPE d3dvtVertexType,
1300 DWORD dwVertexCount,
1305 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1306 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
1311 Main_IDirect3DDeviceImpl_1_Initialize(LPDIRECT3DDEVICE iface,
1312 LPDIRECT3D lpDirect3D,
1314 LPD3DDEVICEDESC lpD3DDVDesc)
1316 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1317 FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDirect3D, lpGUID, lpD3DDVDesc);
1322 Main_IDirect3DDeviceImpl_1_CreateExecuteBuffer(LPDIRECT3DDEVICE iface,
1323 LPD3DEXECUTEBUFFERDESC lpDesc,
1324 LPDIRECT3DEXECUTEBUFFER* lplpDirect3DExecuteBuffer,
1325 IUnknown* pUnkOuter)
1327 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1328 FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter);
1333 Main_IDirect3DDeviceImpl_1_Execute(LPDIRECT3DDEVICE iface,
1334 LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
1335 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1338 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1339 IDirect3DExecuteBufferImpl *lpDirect3DExecuteBufferImpl = ICOM_OBJECT(IDirect3DExecuteBufferImpl, IDirect3DExecuteBuffer, lpDirect3DExecuteBuffer);
1340 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport);
1342 TRACE("(%p/%p)->(%p,%p,%08lx)\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags);
1344 /* Put this as the default context */
1347 lpDirect3DExecuteBufferImpl->execute(lpDirect3DExecuteBufferImpl, This, lpDirect3DViewportImpl);
1353 Main_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE iface,
1354 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1355 LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
1358 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1359 FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
1364 Main_IDirect3DDeviceImpl_1_Pick(LPDIRECT3DDEVICE iface,
1365 LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
1366 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1370 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1371 FIXME("(%p/%p)->(%p,%p,%08lx,%p): stub!\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect);
1376 Main_IDirect3DDeviceImpl_1_GetPickRecords(LPDIRECT3DDEVICE iface,
1378 LPD3DPICKRECORD lpD3DPickRec)
1380 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1381 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpCount, lpD3DPickRec);
1386 Main_IDirect3DDeviceImpl_1_CreateMatrix(LPDIRECT3DDEVICE iface,
1387 LPD3DMATRIXHANDLE lpD3DMatHandle)
1389 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1390 TRACE("(%p/%p)->(%p)\n", This, iface, lpD3DMatHandle);
1392 *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(D3DMATRIX));
1393 TRACE(" returning matrix handle %p\n", (void *) *lpD3DMatHandle);
1399 Main_IDirect3DDeviceImpl_1_SetMatrix(LPDIRECT3DDEVICE iface,
1400 D3DMATRIXHANDLE D3DMatHandle,
1401 LPD3DMATRIX lpD3DMatrix)
1403 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1404 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1406 if (TRACE_ON(ddraw)) {
1407 dump_D3DMATRIX(lpD3DMatrix);
1409 *((D3DMATRIX *) D3DMatHandle) = *lpD3DMatrix;
1415 Main_IDirect3DDeviceImpl_1_GetMatrix(LPDIRECT3DDEVICE iface,
1416 D3DMATRIXHANDLE D3DMatHandle,
1417 LPD3DMATRIX lpD3DMatrix)
1419 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1420 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1422 *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle);
1428 Main_IDirect3DDeviceImpl_1_DeleteMatrix(LPDIRECT3DDEVICE iface,
1429 D3DMATRIXHANDLE D3DMatHandle)
1431 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1432 TRACE("(%p/%p)->(%08lx)\n", This, iface, (DWORD) D3DMatHandle);
1434 HeapFree(GetProcessHeap(), 0, (void *) D3DMatHandle);
1440 Thunk_IDirect3DDeviceImpl_3_QueryInterface(LPDIRECT3DDEVICE3 iface,
1444 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1445 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1451 Thunk_IDirect3DDeviceImpl_2_QueryInterface(LPDIRECT3DDEVICE2 iface,
1455 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1456 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1462 Thunk_IDirect3DDeviceImpl_1_QueryInterface(LPDIRECT3DDEVICE iface,
1466 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1467 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1473 Thunk_IDirect3DDeviceImpl_3_AddRef(LPDIRECT3DDEVICE3 iface)
1475 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1476 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1480 Thunk_IDirect3DDeviceImpl_2_AddRef(LPDIRECT3DDEVICE2 iface)
1482 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1483 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1487 Thunk_IDirect3DDeviceImpl_1_AddRef(LPDIRECT3DDEVICE iface)
1489 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1490 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1494 Thunk_IDirect3DDeviceImpl_3_Release(LPDIRECT3DDEVICE3 iface)
1496 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1497 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1501 Thunk_IDirect3DDeviceImpl_2_Release(LPDIRECT3DDEVICE2 iface)
1503 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1504 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1508 Thunk_IDirect3DDeviceImpl_1_Release(LPDIRECT3DDEVICE iface)
1510 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1511 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1515 Thunk_IDirect3DDeviceImpl_2_AddViewport(LPDIRECT3DDEVICE2 iface,
1516 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1518 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1519 return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1520 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1524 Thunk_IDirect3DDeviceImpl_1_AddViewport(LPDIRECT3DDEVICE iface,
1525 LPDIRECT3DVIEWPORT lpDirect3DViewport)
1527 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1528 return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1529 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1533 Thunk_IDirect3DDeviceImpl_2_DeleteViewport(LPDIRECT3DDEVICE2 iface,
1534 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1536 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1537 return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1538 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1542 Thunk_IDirect3DDeviceImpl_1_DeleteViewport(LPDIRECT3DDEVICE iface,
1543 LPDIRECT3DVIEWPORT lpDirect3DViewport)
1545 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1546 return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1547 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1551 Thunk_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE3 iface,
1552 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
1553 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
1556 TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
1557 return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1558 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */,
1559 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2,
1564 Thunk_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE3 iface,
1565 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1566 LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
1569 TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
1570 return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1571 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */,
1572 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport,
1577 Thunk_IDirect3DDeviceImpl_3_GetDirect3D(LPDIRECT3DDEVICE3 iface,
1578 LPDIRECT3D3* lplpDirect3D3)
1581 LPDIRECT3D7 ret_ptr;
1583 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D3);
1584 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1586 *lplpDirect3D3 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D3, ret_ptr);
1587 TRACE(" returning interface %p\n", *lplpDirect3D3);
1592 Thunk_IDirect3DDeviceImpl_2_GetDirect3D(LPDIRECT3DDEVICE2 iface,
1593 LPDIRECT3D2* lplpDirect3D2)
1596 LPDIRECT3D7 ret_ptr;
1598 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D2);
1599 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1601 *lplpDirect3D2 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D2, ret_ptr);
1602 TRACE(" returning interface %p\n", *lplpDirect3D2);
1607 Thunk_IDirect3DDeviceImpl_1_GetDirect3D(LPDIRECT3DDEVICE iface,
1608 LPDIRECT3D* lplpDirect3D)
1611 LPDIRECT3D7 ret_ptr;
1613 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D);
1614 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1616 *lplpDirect3D = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D, ret_ptr);
1617 TRACE(" returning interface %p\n", *lplpDirect3D);
1622 Thunk_IDirect3DDeviceImpl_2_SetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1623 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1625 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1626 return IDirect3DDevice3_SetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1627 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1631 Thunk_IDirect3DDeviceImpl_2_GetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1632 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2)
1634 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lplpDirect3DViewport2);
1635 return IDirect3DDevice3_GetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1636 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1640 Thunk_IDirect3DDeviceImpl_3_EnumTextureFormats(LPDIRECT3DDEVICE3 iface,
1641 LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
1644 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DEnumPixelProc, lpArg);
1645 return IDirect3DDevice7_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1651 Thunk_IDirect3DDeviceImpl_3_BeginScene(LPDIRECT3DDEVICE3 iface)
1653 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1654 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1658 Thunk_IDirect3DDeviceImpl_2_BeginScene(LPDIRECT3DDEVICE2 iface)
1660 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1661 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1665 Thunk_IDirect3DDeviceImpl_1_BeginScene(LPDIRECT3DDEVICE iface)
1667 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1668 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1672 Thunk_IDirect3DDeviceImpl_3_EndScene(LPDIRECT3DDEVICE3 iface)
1674 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1675 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1679 Thunk_IDirect3DDeviceImpl_2_EndScene(LPDIRECT3DDEVICE2 iface)
1681 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1682 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1686 Thunk_IDirect3DDeviceImpl_1_EndScene(LPDIRECT3DDEVICE iface)
1688 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1689 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1693 Thunk_IDirect3DDeviceImpl_3_SetTransform(LPDIRECT3DDEVICE3 iface,
1694 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1695 LPD3DMATRIX lpD3DMatrix)
1697 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1698 return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1699 dtstTransformStateType,
1704 Thunk_IDirect3DDeviceImpl_2_SetTransform(LPDIRECT3DDEVICE2 iface,
1705 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1706 LPD3DMATRIX lpD3DMatrix)
1708 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1709 return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1710 dtstTransformStateType,
1715 Thunk_IDirect3DDeviceImpl_3_GetTransform(LPDIRECT3DDEVICE3 iface,
1716 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1717 LPD3DMATRIX lpD3DMatrix)
1719 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1720 return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1721 dtstTransformStateType,
1726 Thunk_IDirect3DDeviceImpl_2_GetTransform(LPDIRECT3DDEVICE2 iface,
1727 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1728 LPD3DMATRIX lpD3DMatrix)
1730 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1731 return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1732 dtstTransformStateType,
1737 Thunk_IDirect3DDeviceImpl_3_MultiplyTransform(LPDIRECT3DDEVICE3 iface,
1738 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1739 LPD3DMATRIX lpD3DMatrix)
1741 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1742 return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1743 dtstTransformStateType,
1748 Thunk_IDirect3DDeviceImpl_2_MultiplyTransform(LPDIRECT3DDEVICE2 iface,
1749 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1750 LPD3DMATRIX lpD3DMatrix)
1752 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1753 return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1754 dtstTransformStateType,
1759 Thunk_IDirect3DDeviceImpl_3_SetRenderState(LPDIRECT3DDEVICE3 iface,
1760 D3DRENDERSTATETYPE dwRenderStateType,
1761 DWORD dwRenderState)
1763 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1764 return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1770 Thunk_IDirect3DDeviceImpl_2_SetRenderState(LPDIRECT3DDEVICE2 iface,
1771 D3DRENDERSTATETYPE dwRenderStateType,
1772 DWORD dwRenderState)
1774 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1775 return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1781 Thunk_IDirect3DDeviceImpl_3_GetRenderState(LPDIRECT3DDEVICE3 iface,
1782 D3DRENDERSTATETYPE dwRenderStateType,
1783 LPDWORD lpdwRenderState)
1785 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1786 return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1792 Thunk_IDirect3DDeviceImpl_2_GetRenderState(LPDIRECT3DDEVICE2 iface,
1793 D3DRENDERSTATETYPE dwRenderStateType,
1794 LPDWORD lpdwRenderState)
1796 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1797 return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1803 Thunk_IDirect3DDeviceImpl_3_DrawPrimitive(LPDIRECT3DDEVICE3 iface,
1804 D3DPRIMITIVETYPE d3dptPrimitiveType,
1805 DWORD d3dvtVertexType,
1807 DWORD dwVertexCount,
1810 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
1811 return IDirect3DDevice7_DrawPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1820 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitive(LPDIRECT3DDEVICE3 iface,
1821 D3DPRIMITIVETYPE d3dptPrimitiveType,
1822 DWORD d3dvtVertexType,
1824 DWORD dwVertexCount,
1829 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
1830 return IDirect3DDevice7_DrawIndexedPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1841 Thunk_IDirect3DDeviceImpl_3_SetClipStatus(LPDIRECT3DDEVICE3 iface,
1842 LPD3DCLIPSTATUS lpD3DClipStatus)
1844 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1845 return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1850 Thunk_IDirect3DDeviceImpl_2_SetClipStatus(LPDIRECT3DDEVICE2 iface,
1851 LPD3DCLIPSTATUS lpD3DClipStatus)
1853 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1854 return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1859 Thunk_IDirect3DDeviceImpl_3_GetClipStatus(LPDIRECT3DDEVICE3 iface,
1860 LPD3DCLIPSTATUS lpD3DClipStatus)
1862 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1863 return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1868 Thunk_IDirect3DDeviceImpl_2_GetClipStatus(LPDIRECT3DDEVICE2 iface,
1869 LPD3DCLIPSTATUS lpD3DClipStatus)
1871 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1872 return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1877 Thunk_IDirect3DDeviceImpl_3_DrawPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1878 D3DPRIMITIVETYPE d3dptPrimitiveType,
1880 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1881 DWORD dwVertexCount,
1884 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
1885 return IDirect3DDevice7_DrawPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1888 lpD3DDrawPrimStrideData,
1894 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1895 D3DPRIMITIVETYPE d3dptPrimitiveType,
1897 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1898 DWORD dwVertexCount,
1903 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
1904 return IDirect3DDevice7_DrawIndexedPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1907 lpD3DDrawPrimStrideData,
1915 Thunk_IDirect3DDeviceImpl_3_ComputeSphereVisibility(LPDIRECT3DDEVICE3 iface,
1916 LPD3DVECTOR lpCenters,
1920 LPDWORD lpdwReturnValues)
1922 TRACE("(%p)->(%p,%p,%08lx,%08lx,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
1923 return IDirect3DDevice7_ComputeSphereVisibility(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1932 Thunk_IDirect3DDeviceImpl_3_GetTextureStageState(LPDIRECT3DDEVICE3 iface,
1934 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1937 TRACE("(%p)->(%08lx,%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, lpdwState);
1938 return IDirect3DDevice7_GetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1940 d3dTexStageStateType,
1945 Thunk_IDirect3DDeviceImpl_3_SetTextureStageState(LPDIRECT3DDEVICE3 iface,
1947 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1950 TRACE("(%p)->(%08lx,%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, dwState);
1951 return IDirect3DDevice7_SetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1953 d3dTexStageStateType,
1958 Thunk_IDirect3DDeviceImpl_3_ValidateDevice(LPDIRECT3DDEVICE3 iface,
1961 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpdwPasses);
1962 return IDirect3DDevice7_ValidateDevice(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1967 Thunk_IDirect3DDeviceImpl_2_GetCaps(LPDIRECT3DDEVICE2 iface,
1968 LPD3DDEVICEDESC lpD3DHWDevDesc,
1969 LPD3DDEVICEDESC lpD3DHELDevDesc)
1971 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1972 return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1978 Thunk_IDirect3DDeviceImpl_1_GetCaps(LPDIRECT3DDEVICE iface,
1979 LPD3DDEVICEDESC lpD3DHWDevDesc,
1980 LPD3DDEVICEDESC lpD3DHELDevDesc)
1982 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1983 return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1989 Thunk_IDirect3DDeviceImpl_1_SwapTextureHandles(LPDIRECT3DDEVICE iface,
1990 LPDIRECT3DTEXTURE lpD3DTex1,
1991 LPDIRECT3DTEXTURE lpD3DTex2)
1993 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice2 interface.\n", iface, lpD3DTex1, lpD3DTex2);
1994 return IDirect3DDevice2_SwapTextureHandles(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice2, iface),
1995 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture, IDirect3DTexture2, lpD3DTex1),
1996 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture, IDirect3DTexture2, lpD3DTex2));
2000 Thunk_IDirect3DDeviceImpl_2_GetStats(LPDIRECT3DDEVICE2 iface,
2001 LPD3DSTATS lpD3DStats)
2003 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
2004 return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2009 Thunk_IDirect3DDeviceImpl_1_GetStats(LPDIRECT3DDEVICE iface,
2010 LPD3DSTATS lpD3DStats)
2012 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
2013 return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
2018 Thunk_IDirect3DDeviceImpl_3_SetRenderTarget(LPDIRECT3DDEVICE3 iface,
2019 LPDIRECTDRAWSURFACE4 lpNewRenderTarget,
2022 TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
2023 return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2024 (LPDIRECTDRAWSURFACE7) lpNewRenderTarget /* No cast needed as DSurf4 == DSurf7 */,
2029 Thunk_IDirect3DDeviceImpl_3_GetRenderTarget(LPDIRECT3DDEVICE3 iface,
2030 LPDIRECTDRAWSURFACE4* lplpRenderTarget)
2032 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
2033 return IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2034 (LPDIRECTDRAWSURFACE7*) lplpRenderTarget /* No cast needed as DSurf4 == DSurf7 */);
2038 Thunk_IDirect3DDeviceImpl_2_SetRenderTarget(LPDIRECT3DDEVICE2 iface,
2039 LPDIRECTDRAWSURFACE lpNewRenderTarget,
2042 TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
2043 return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
2044 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface3, IDirectDrawSurface7, lpNewRenderTarget),
2049 Thunk_IDirect3DDeviceImpl_2_GetRenderTarget(LPDIRECT3DDEVICE2 iface,
2050 LPDIRECTDRAWSURFACE* lplpRenderTarget)
2053 LPDIRECTDRAWSURFACE7 ret_val;
2055 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
2056 ret = IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
2058 *lplpRenderTarget = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirectDrawSurface3, ret_val);
2059 TRACE(" returning interface %p\n", *lplpRenderTarget);
2064 Thunk_IDirect3DDeviceImpl_2_Vertex(LPDIRECT3DDEVICE2 iface,
2065 LPVOID lpVertexType)
2067 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpVertexType);
2068 return IDirect3DDevice3_Vertex(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2073 Thunk_IDirect3DDeviceImpl_2_Index(LPDIRECT3DDEVICE2 iface,
2076 TRACE("(%p)->(%04x) thunking to IDirect3DDevice3 interface.\n", iface, wVertexIndex);
2077 return IDirect3DDevice3_Index(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2082 Thunk_IDirect3DDeviceImpl_2_End(LPDIRECT3DDEVICE2 iface,
2085 TRACE("(%p)->(%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwFlags);
2086 return IDirect3DDevice3_End(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2091 Thunk_IDirect3DDeviceImpl_2_GetLightState(LPDIRECT3DDEVICE2 iface,
2092 D3DLIGHTSTATETYPE dwLightStateType,
2093 LPDWORD lpdwLightState)
2095 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, lpdwLightState);
2096 return IDirect3DDevice3_GetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2102 Thunk_IDirect3DDeviceImpl_2_SetLightState(LPDIRECT3DDEVICE2 iface,
2103 D3DLIGHTSTATETYPE dwLightStateType,
2106 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, dwLightState);
2107 return IDirect3DDevice3_SetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2113 Thunk_IDirect3DDeviceImpl_1_EnumTextureFormats(LPDIRECT3DDEVICE iface,
2114 LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
2117 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice2 interface.\n", iface, lpD3DEnumTextureProc, lpArg);
2118 return IDirect3DDevice2_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice2, iface),
2119 lpD3DEnumTextureProc,
2124 Thunk_IDirect3DDeviceImpl_3_SetTexture(LPDIRECT3DDEVICE3 iface,
2126 LPDIRECT3DTEXTURE2 lpTexture2)
2128 TRACE("(%p)->(%ld,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, lpTexture2);
2129 return IDirect3DDevice7_SetTexture(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2131 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture2, IDirectDrawSurface7, lpTexture2));
2135 Thunk_IDirect3DDeviceImpl_3_DrawPrimitiveVB(LPDIRECT3DDEVICE3 iface,
2136 D3DPRIMITIVETYPE d3dptPrimitiveType,
2137 LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
2138 DWORD dwStartVertex,
2139 DWORD dwNumVertices,
2142 TRACE("(%p)->(%08x,%p,%08lx,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface,
2143 d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
2144 return IDirect3DDevice7_DrawPrimitiveVB(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2146 COM_INTERFACE_CAST(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer, IDirect3DVertexBuffer7, lpD3DVertexBuf),
2153 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE3 iface,
2154 D3DPRIMITIVETYPE d3dptPrimitiveType,
2155 LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
2160 TRACE("(%p)->(%08x,%p,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface,
2161 d3dptPrimitiveType, lpD3DVertexBuf, lpwIndices, dwIndexCount, dwFlags);
2162 return IDirect3DDevice7_DrawIndexedPrimitiveVB(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2164 COM_INTERFACE_CAST(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer, IDirect3DVertexBuffer7, lpD3DVertexBuf),
2173 Thunk_IDirect3DDeviceImpl_3_GetTexture(LPDIRECT3DDEVICE3 iface,
2175 LPDIRECT3DTEXTURE2* lplpTexture2)
2178 LPDIRECTDRAWSURFACE7 ret_val;
2180 TRACE("(%p)->(%ld,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, lplpTexture2);
2181 ret = IDirect3DDevice7_GetTexture(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2185 *lplpTexture2 = COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, ret_val);
2187 TRACE(" returning interface %p.\n", *lplpTexture2);