- Viewport hack to get some old D3D1 games to work
[wine/wine-kai.git] / dlls / ddraw / d3ddevice / main.c
blob9c4d566a533a031eb1c122cb9eac9b4995fbbd67
1 /* Direct3D Device
2 * Copyright (c) 1998 Lionel ULMER
4 * This file contains all the common stuff for D3D devices.
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include "config.h"
23 #include <string.h>
25 #include "windef.h"
26 #include "winerror.h"
27 #include "objbase.h"
28 #include "ddraw.h"
29 #include "d3d.h"
30 #include "wine/debug.h"
32 #include "d3d_private.h"
33 #include "main.h"
35 WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
37 DWORD InitRenderStateTab[] = {
38 D3DRENDERSTATE_TEXTUREHANDLE, (DWORD)NULL,
39 D3DRENDERSTATE_ANTIALIAS, D3DANTIALIAS_NONE,
40 /* FIXME: D3DRENDERSTATE_TEXTUREADDRESS */
41 D3DRENDERSTATE_TEXTUREPERSPECTIVE, TRUE,
42 /* FIXME: D3DRENDERSTATE_WRAPU */
43 /* FIXME: D3DRENDERSTATE_WRAPV */
44 D3DRENDERSTATE_ZENABLE, D3DZB_TRUE, /* This needs to be set differently according to the Z buffer status */
45 D3DRENDERSTATE_FILLMODE, D3DFILL_SOLID,
46 D3DRENDERSTATE_SHADEMODE, D3DSHADE_GOURAUD,
47 D3DRENDERSTATE_LINEPATTERN, 0,
48 D3DRENDERSTATE_MONOENABLE, FALSE,
49 D3DRENDERSTATE_ROP2, R2_COPYPEN,
50 D3DRENDERSTATE_PLANEMASK, 0xFFFFFFFF,
51 D3DRENDERSTATE_ZWRITEENABLE, TRUE,
52 D3DRENDERSTATE_ALPHATESTENABLE, FALSE,
53 D3DRENDERSTATE_LASTPIXEL, TRUE,
54 D3DRENDERSTATE_TEXTUREMAG, D3DFILTER_NEAREST,
55 D3DRENDERSTATE_TEXTUREMIN, D3DFILTER_NEAREST,
56 D3DRENDERSTATE_SRCBLEND, D3DBLEND_ONE,
57 D3DRENDERSTATE_DESTBLEND, D3DBLEND_ZERO,
58 D3DRENDERSTATE_TEXTUREMAPBLEND, D3DTBLEND_MODULATE,
59 D3DRENDERSTATE_CULLMODE, D3DCULL_CCW,
60 D3DRENDERSTATE_ZFUNC, D3DCMP_LESSEQUAL,
61 D3DRENDERSTATE_ALPHAREF, 0,
62 D3DRENDERSTATE_ALPHAFUNC, D3DCMP_ALWAYS,
63 D3DRENDERSTATE_DITHERENABLE, FALSE,
64 D3DRENDERSTATE_ALPHABLENDENABLE, FALSE,
65 D3DRENDERSTATE_FOGENABLE, FALSE,
66 D3DRENDERSTATE_SPECULARENABLE, FALSE,
67 D3DRENDERSTATE_ZVISIBLE, FALSE,
68 D3DRENDERSTATE_SUBPIXEL, FALSE,
69 D3DRENDERSTATE_SUBPIXELX, FALSE,
70 D3DRENDERSTATE_STIPPLEDALPHA, FALSE,
71 D3DRENDERSTATE_FOGCOLOR, D3DRGBA(0,0,0,0),
72 D3DRENDERSTATE_FOGTABLEMODE, D3DFOG_NONE,
73 /* FIXME: D3DRENDERSTATE_FOGTABLESTART (same as D3DRENDERSTATE_FOGSTART) */
74 /* FIXME: D3DRENDERSTATE_FOGTABLEEND (same as D3DRENDERSTATE_FOGEND) */
75 D3DRENDERSTATE_FOGTABLEDENSITY, 0x3F80000, /* 1.0f (same as D3DRENDERSTATE_FOGDENSITY) */
76 /* FIXME: D3DRENDERSTATE_STIPPLEENABLE */
77 D3DRENDERSTATE_EDGEANTIALIAS, FALSE,
78 D3DRENDERSTATE_COLORKEYENABLE, FALSE,
79 /* FIXME: D3DRENDERSTATE_BORDERCOLOR */
80 D3DRENDERSTATE_TEXTUREADDRESSU, D3DTADDRESS_WRAP,
81 D3DRENDERSTATE_TEXTUREADDRESSV, D3DTADDRESS_WRAP,
82 D3DRENDERSTATE_MIPMAPLODBIAS, 0x00000000, /* 0.0f */
83 D3DRENDERSTATE_ZBIAS, 0,
84 D3DRENDERSTATE_RANGEFOGENABLE, FALSE,
85 /* FIXME: D3DRENDERSTATE_ANISOTROPY */
86 /* FIXME: D3DRENDERSTATE_FLUSHBATCH */
87 /* FIXME: D3DRENDERSTATE_TRANSLUCENTSORTINDEPENDENT */
88 D3DRENDERSTATE_STENCILENABLE, FALSE,
89 D3DRENDERSTATE_STENCILFAIL, D3DSTENCILOP_KEEP,
90 D3DRENDERSTATE_STENCILZFAIL, D3DSTENCILOP_KEEP,
91 D3DRENDERSTATE_STENCILPASS, D3DSTENCILOP_KEEP,
92 D3DRENDERSTATE_STENCILFUNC, D3DCMP_ALWAYS,
93 D3DRENDERSTATE_STENCILREF, 0,
94 D3DRENDERSTATE_STENCILMASK, 0xFFFFFFFF,
95 D3DRENDERSTATE_STENCILWRITEMASK, 0xFFFFFFFF,
96 /* FIXME: D3DRENDERSTATE_TEXTUREFACTOR */
97 /* FIXME: D3DRENDERSTATE_STIPPLEPATTERN00..31 */
98 D3DRENDERSTATE_WRAP0, 0,
99 D3DRENDERSTATE_WRAP1, 0,
100 D3DRENDERSTATE_WRAP2, 0,
101 D3DRENDERSTATE_WRAP3, 0,
102 D3DRENDERSTATE_WRAP4, 0,
103 D3DRENDERSTATE_WRAP5, 0,
104 D3DRENDERSTATE_WRAP6, 0,
105 D3DRENDERSTATE_WRAP7, 0,
106 D3DRENDERSTATE_CLIPPING, FALSE,
107 D3DRENDERSTATE_LIGHTING, TRUE,
108 D3DRENDERSTATE_EXTENTS, FALSE,
109 D3DRENDERSTATE_AMBIENT, D3DRGBA(0,0,0,0),
110 D3DRENDERSTATE_FOGVERTEXMODE, D3DFOG_NONE,
111 D3DRENDERSTATE_COLORVERTEX, TRUE,
112 D3DRENDERSTATE_LOCALVIEWER, TRUE,
113 D3DRENDERSTATE_NORMALIZENORMALS, FALSE,
114 /* FIXME: D3DRENDER_STATE_COLORKEYBLENDENABLE */
115 D3DRENDERSTATE_DIFFUSEMATERIALSOURCE, D3DMCS_COLOR1,
116 D3DRENDERSTATE_SPECULARMATERIALSOURCE, D3DMCS_COLOR2,
117 D3DRENDERSTATE_AMBIENTMATERIALSOURCE, D3DMCS_COLOR2,
118 D3DRENDERSTATE_EMISSIVEMATERIALSOURCE, D3DMCS_MATERIAL,
119 D3DRENDERSTATE_VERTEXBLEND, D3DVBLEND_DISABLE,
120 D3DRENDERSTATE_CLIPPLANEENABLE, 0
123 DWORD InitLightStateTab[] = {
124 D3DLIGHTSTATE_MATERIAL, (DWORD)NULL,
125 D3DLIGHTSTATE_AMBIENT, D3DRGBA(0,0,0,0),
126 D3DLIGHTSTATE_COLORMODEL, D3DCOLOR_RGB,
127 D3DLIGHTSTATE_FOGMODE, D3DFOG_NONE,
128 D3DLIGHTSTATE_FOGSTART, 0x3F80000, /* 1.0f */
129 D3DLIGHTSTATE_FOGEND, 0x42C8000, /* 100.0f */
130 D3DLIGHTSTATE_FOGDENSITY, 0x3F80000 /* 1.0f */
131 /* FIXME: D3DLIGHTSTATE_COLORVERTEX */
134 DWORD InitTextureStageStateTab[] = {
135 D3DTSS_COLOROP, D3DTOP_DISABLE, /* Note, it's manually set for stage 0 */
136 D3DTSS_COLORARG1, D3DTA_TEXTURE,
137 D3DTSS_COLORARG2, D3DTA_CURRENT,
138 D3DTSS_ALPHAOP, D3DTOP_DISABLE, /* Note, it's manually set for stage 0 */
139 D3DTSS_ALPHAARG1, D3DTA_TEXTURE,
140 D3DTSS_ALPHAARG2, D3DTA_CURRENT,
141 /* FIXME: D3DTSS_BUMPENVMAT00,01,10,11 */
142 /* D3DTSS_TEXCOORDINDEX is set manually */
143 D3DTSS_ADDRESS, D3DTADDRESS_WRAP,
144 D3DTSS_ADDRESSU, D3DTADDRESS_WRAP,
145 D3DTSS_ADDRESSV, D3DTADDRESS_WRAP,
146 D3DTSS_BORDERCOLOR, 0x00000000,
147 D3DTSS_MAGFILTER, D3DTFG_POINT,
148 D3DTSS_MINFILTER, D3DTFN_POINT,
149 D3DTSS_MIPFILTER, D3DTFP_NONE,
150 D3DTSS_MIPMAPLODBIAS, 0x00000000, /* 0.0f */
151 D3DTSS_MAXMIPLEVEL, 0,
152 /* D3DTSS_MAXANISOTROPY, 1, */ /* This is to prevent warnings :-) */
153 /* FIXME: D3DTSS_BUMPENVLSCALE */
154 /* FIXME: D3DTSS_NUMPENVLOFFSET */
155 /* FIXME: D3DTSS_TEXTURETRANSFORMFLAGS */
159 void InitDefaultStateBlock(STATEBLOCK* lpStateBlock, int version)
161 int i, j;
162 TRACE("(%p,%d)\n", lpStateBlock, version);
163 memset(lpStateBlock, 0, sizeof(STATEBLOCK));
165 /* Initialize render states */
166 for (i = 0; i < sizeof(InitRenderStateTab) / sizeof(InitRenderStateTab[0]); i += 2)
168 lpStateBlock->render_state[InitRenderStateTab[i] - 1] = InitRenderStateTab[i + 1];
169 lpStateBlock->set_flags.render_state[InitRenderStateTab[i] - 1] = TRUE;
172 /* Initialize texture stages states */
173 for (i = 0; i < MAX_TEXTURES; i++)
175 for (j = 0; j < sizeof(InitTextureStageStateTab) / sizeof(InitTextureStageStateTab[0]); j += 2)
177 lpStateBlock->texture_stage_state[i][InitTextureStageStateTab[j] - 1] = InitTextureStageStateTab[j + 1];
178 lpStateBlock->set_flags.texture_stage_state[i][InitTextureStageStateTab[j] - 1] = TRUE;
180 /* Map texture coords 0 to stage 0, 1 to stage 1, etc... */
181 lpStateBlock->texture_stage_state[i][D3DTSS_TEXCOORDINDEX - 1] = i;
182 lpStateBlock->set_flags.texture_stage_state[i][D3DTSS_TEXCOORDINDEX - 1] = TRUE;
185 /* The first texture is particular, update it consequently */
186 lpStateBlock->texture_stage_state[0][D3DTSS_COLOROP - 1] = D3DTOP_MODULATE;
187 lpStateBlock->texture_stage_state[0][D3DTSS_ALPHAOP - 1] = D3DTOP_SELECTARG1;
188 lpStateBlock->texture_stage_state[0][D3DTSS_COLORARG2 - 1] = D3DTA_DIFFUSE;
189 lpStateBlock->texture_stage_state[0][D3DTSS_ALPHAARG2 - 1] = D3DTA_DIFFUSE;
191 /* Updates for particular versions */
192 if ((version == 1) || (version==2))
193 lpStateBlock->render_state[D3DRENDERSTATE_SPECULARENABLE - 1] = TRUE;
196 HRESULT WINAPI
197 Main_IDirect3DDeviceImpl_7_3T_2T_1T_QueryInterface(LPDIRECT3DDEVICE7 iface,
198 REFIID riid,
199 LPVOID* obp)
201 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
202 TRACE("(%p/%p)->(%s,%p)\n", This, iface, debugstr_guid(riid), obp);
204 *obp = NULL;
206 if ( IsEqualGUID( &IID_IUnknown, riid ) ) {
207 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
208 *obp = iface;
209 TRACE(" Creating IUnknown interface at %p.\n", *obp);
210 return S_OK;
212 if ( IsEqualGUID( &IID_IDirect3DDevice, riid ) ) {
213 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
214 *obp = ICOM_INTERFACE(This, IDirect3DDevice);
215 TRACE(" Creating IDirect3DDevice interface %p\n", *obp);
216 return S_OK;
218 if ( IsEqualGUID( &IID_IDirect3DDevice2, riid ) ) {
219 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
220 *obp = ICOM_INTERFACE(This, IDirect3DDevice2);
221 TRACE(" Creating IDirect3DDevice2 interface %p\n", *obp);
222 return S_OK;
224 if ( IsEqualGUID( &IID_IDirect3DDevice3, riid ) ) {
225 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
226 *obp = ICOM_INTERFACE(This, IDirect3DDevice3);
227 TRACE(" Creating IDirect3DDevice3 interface %p\n", *obp);
228 return S_OK;
230 if ( IsEqualGUID( &IID_IDirect3DDevice7, riid ) ) {
231 IDirect3DDevice7_AddRef(ICOM_INTERFACE(This, IDirect3DDevice7));
232 *obp = ICOM_INTERFACE(This, IDirect3DDevice7);
233 TRACE(" Creating IDirect3DDevice7 interface %p\n", *obp);
234 return S_OK;
236 if ( IsEqualGUID( &IID_IDirectDrawSurface, riid ) ||
237 IsEqualGUID( &IID_IDirectDrawSurface2, riid ) ||
238 IsEqualGUID( &IID_IDirectDrawSurface3, riid ) ) {
239 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
240 *obp = ICOM_INTERFACE(This->surface, IDirectDrawSurface3);
241 TRACE(" Return IDirectDrawSurface3 interface %p\n", *obp);
242 return S_OK;
244 if ( IsEqualGUID( &IID_IDirectDrawSurface4, riid ) ||
245 IsEqualGUID( &IID_IDirectDrawSurface7, riid ) ) {
246 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
247 *obp = ICOM_INTERFACE(This->surface, IDirectDrawSurface7);
248 TRACE(" Return IDirectDrawSurface7 interface %p\n", *obp);
249 return S_OK;
251 FIXME("(%p): interface for IID %s NOT found!\n", This, debugstr_guid(riid));
252 return OLE_E_ENUM_NOMORE;
255 ULONG WINAPI
256 Main_IDirect3DDeviceImpl_7_3T_2T_1T_AddRef(LPDIRECT3DDEVICE7 iface)
258 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
259 TRACE("(%p/%p)->() incrementing from %lu.\n", This, iface, This->ref);
260 return ++(This->ref);
263 ULONG WINAPI
264 Main_IDirect3DDeviceImpl_7_3T_2T_1T_Release(LPDIRECT3DDEVICE7 iface)
266 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
267 TRACE("(%p/%p)->() decrementing from %lu.\n", This, iface, This->ref);
268 if (!--(This->ref)) {
269 int i;
270 /* Release texture associated with the device */
271 for (i = 0; i < MAX_TEXTURES; i++) {
272 if (This->current_texture[i] != NULL)
273 IDirect3DTexture2_Release(ICOM_INTERFACE(This->current_texture[i], IDirect3DTexture2));
276 HeapFree(GetProcessHeap(), 0, This);
277 return 0;
279 return This->ref;
282 HRESULT WINAPI
283 Main_IDirect3DDeviceImpl_7_GetCaps(LPDIRECT3DDEVICE7 iface,
284 LPD3DDEVICEDESC7 lpD3DHELDevDesc)
286 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
287 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DHELDevDesc);
288 return DD_OK;
291 HRESULT WINAPI
292 Main_IDirect3DDeviceImpl_7_3T_EnumTextureFormats(LPDIRECT3DDEVICE7 iface,
293 LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
294 LPVOID lpArg)
296 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
297 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumPixelProc, lpArg);
298 return DD_OK;
301 HRESULT WINAPI
302 Main_IDirect3DDeviceImpl_7_3T_2T_1T_BeginScene(LPDIRECT3DDEVICE7 iface)
304 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
305 TRACE("(%p/%p)->()\n", This, iface);
306 /* Nothing to do */
307 return DD_OK;
310 HRESULT WINAPI
311 Main_IDirect3DDeviceImpl_7_3T_2T_1T_EndScene(LPDIRECT3DDEVICE7 iface)
313 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
314 TRACE("(%p/%p)->()\n", This, iface);
315 /* Nothing to do */
316 return DD_OK;
319 HRESULT WINAPI
320 Main_IDirect3DDeviceImpl_7_3T_2T_1T_GetDirect3D(LPDIRECT3DDEVICE7 iface,
321 LPDIRECT3D7* lplpDirect3D7)
323 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
324 TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3D7);
326 *lplpDirect3D7 = ICOM_INTERFACE(This->d3d, IDirect3D7);
327 IDirect3D7_AddRef(ICOM_INTERFACE(This->d3d, IDirect3D7));
329 TRACE(" returning interface %p\n", *lplpDirect3D7);
330 return DD_OK;
333 HRESULT WINAPI
334 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderTarget(LPDIRECT3DDEVICE7 iface,
335 LPDIRECTDRAWSURFACE7 lpNewRenderTarget,
336 DWORD dwFlags)
338 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
339 IDirectDrawSurfaceImpl *target_impl = ICOM_OBJECT(IDirectDrawSurfaceImpl, IDirectDrawSurface7, lpNewRenderTarget);
341 TRACE("(%p/%p)->(%p,%08lx)\n", This, iface, lpNewRenderTarget, dwFlags);
342 if (target_impl != This->surface) {
343 WARN(" Change of rendering target not handled yet !\n");
345 return DD_OK;
348 HRESULT WINAPI
349 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderTarget(LPDIRECT3DDEVICE7 iface,
350 LPDIRECTDRAWSURFACE7* lplpRenderTarget)
352 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
353 TRACE("(%p/%p)->(%p)\n", This, iface, lplpRenderTarget);
355 *lplpRenderTarget = ICOM_INTERFACE(This->surface, IDirectDrawSurface7);
356 IDirectDrawSurface7_AddRef(ICOM_INTERFACE(This->surface, IDirectDrawSurface7));
358 TRACE(" returning surface at %p.\n", *lplpRenderTarget);
360 return DD_OK;
363 HRESULT WINAPI
364 Main_IDirect3DDeviceImpl_7_Clear(LPDIRECT3DDEVICE7 iface,
365 DWORD dwCount,
366 LPD3DRECT lpRects,
367 DWORD dwFlags,
368 D3DCOLOR dwColor,
369 D3DVALUE dvZ,
370 DWORD dwStencil)
372 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
373 TRACE("(%p/%p)->(%08lx,%p,%08lx,%08lx,%f,%08lx)\n", This, iface, dwCount, lpRects, dwFlags, (DWORD) dwColor, dvZ, dwStencil);
374 return This->clear(This, dwCount, lpRects, dwFlags, dwColor, dvZ, dwStencil);
377 HRESULT WINAPI
378 Main_IDirect3DDeviceImpl_7_3T_2T_SetTransform(LPDIRECT3DDEVICE7 iface,
379 D3DTRANSFORMSTATETYPE dtstTransformStateType,
380 LPD3DMATRIX lpD3DMatrix)
382 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
383 DWORD matrix_changed = 0x00000000;
385 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
387 switch (dtstTransformStateType) {
388 case D3DTRANSFORMSTATE_WORLD: {
389 if (TRACE_ON(ddraw)) {
390 TRACE(" D3DTRANSFORMSTATE_WORLD :\n"); dump_D3DMATRIX(lpD3DMatrix);
392 memcpy(This->world_mat, lpD3DMatrix, 16 * sizeof(float));
393 matrix_changed = WORLDMAT_CHANGED;
394 } break;
396 case D3DTRANSFORMSTATE_VIEW: {
397 if (TRACE_ON(ddraw)) {
398 TRACE(" D3DTRANSFORMSTATE_VIEW :\n"); dump_D3DMATRIX(lpD3DMatrix);
400 memcpy(This->view_mat, lpD3DMatrix, 16 * sizeof(float));
401 matrix_changed = VIEWMAT_CHANGED;
402 } break;
404 case D3DTRANSFORMSTATE_PROJECTION: {
405 if (TRACE_ON(ddraw)) {
406 TRACE(" D3DTRANSFORMSTATE_PROJECTION :\n"); dump_D3DMATRIX(lpD3DMatrix);
408 memcpy(This->proj_mat, lpD3DMatrix, 16 * sizeof(float));
409 matrix_changed = PROJMAT_CHANGED;
410 } break;
412 case D3DTRANSFORMSTATE_TEXTURE0:
413 case D3DTRANSFORMSTATE_TEXTURE1:
414 case D3DTRANSFORMSTATE_TEXTURE2:
415 case D3DTRANSFORMSTATE_TEXTURE3:
416 case D3DTRANSFORMSTATE_TEXTURE4:
417 case D3DTRANSFORMSTATE_TEXTURE5:
418 case D3DTRANSFORMSTATE_TEXTURE6:
419 case D3DTRANSFORMSTATE_TEXTURE7: {
420 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
421 if (TRACE_ON(ddraw)) {
422 TRACE(" D3DTRANSFORMSTATE_TEXTURE%ld :\n", mat_num); dump_D3DMATRIX(lpD3DMatrix);
424 memcpy(This->tex_mat[mat_num], lpD3DMatrix, 16 * sizeof(float));
425 matrix_changed = TEXMAT0_CHANGED << mat_num;
426 } break;
428 default:
429 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
430 break;
433 if (matrix_changed != 0x00000000) This->matrices_updated(This, matrix_changed);
435 return DD_OK;
438 HRESULT WINAPI
439 Main_IDirect3DDeviceImpl_7_3T_2T_GetTransform(LPDIRECT3DDEVICE7 iface,
440 D3DTRANSFORMSTATETYPE dtstTransformStateType,
441 LPD3DMATRIX lpD3DMatrix)
443 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
444 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
446 switch (dtstTransformStateType) {
447 case D3DTRANSFORMSTATE_WORLD: {
448 memcpy(lpD3DMatrix, This->world_mat, 16 * sizeof(D3DVALUE));
449 if (TRACE_ON(ddraw)) {
450 TRACE(" returning D3DTRANSFORMSTATE_WORLD :\n");
451 dump_D3DMATRIX(lpD3DMatrix);
453 } break;
455 case D3DTRANSFORMSTATE_VIEW: {
456 memcpy(lpD3DMatrix, This->view_mat, 16 * sizeof(D3DVALUE));
457 if (TRACE_ON(ddraw)) {
458 TRACE(" returning D3DTRANSFORMSTATE_VIEW :\n");
459 dump_D3DMATRIX(lpD3DMatrix);
461 } break;
463 case D3DTRANSFORMSTATE_PROJECTION: {
464 memcpy(lpD3DMatrix, This->proj_mat, 16 * sizeof(D3DVALUE));
465 if (TRACE_ON(ddraw)) {
466 TRACE(" returning D3DTRANSFORMSTATE_PROJECTION :\n");
467 dump_D3DMATRIX(lpD3DMatrix);
469 } break;
471 case D3DTRANSFORMSTATE_TEXTURE0:
472 case D3DTRANSFORMSTATE_TEXTURE1:
473 case D3DTRANSFORMSTATE_TEXTURE2:
474 case D3DTRANSFORMSTATE_TEXTURE3:
475 case D3DTRANSFORMSTATE_TEXTURE4:
476 case D3DTRANSFORMSTATE_TEXTURE5:
477 case D3DTRANSFORMSTATE_TEXTURE6:
478 case D3DTRANSFORMSTATE_TEXTURE7: {
479 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
480 memcpy(lpD3DMatrix, This->tex_mat[mat_num], 16 * sizeof(D3DVALUE));
481 if (TRACE_ON(ddraw)) {
482 TRACE(" returning D3DTRANSFORMSTATE_TEXTURE%ld :\n", mat_num);
483 dump_D3DMATRIX(lpD3DMatrix);
485 } break;
487 default:
488 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
489 return DDERR_INVALIDPARAMS;
492 return DD_OK;
495 HRESULT WINAPI
496 Main_IDirect3DDeviceImpl_7_3T_2T_MultiplyTransform(LPDIRECT3DDEVICE7 iface,
497 D3DTRANSFORMSTATETYPE dtstTransformStateType,
498 LPD3DMATRIX lpD3DMatrix)
500 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
501 LPD3DMATRIX mat;
502 DWORD matrix_changed = 0x00000000;
504 TRACE("(%p/%p)->(%08x,%p)\n", This, iface, dtstTransformStateType, lpD3DMatrix);
506 if (TRACE_ON(ddraw)) {
507 TRACE(" Multiplying by :\n"); dump_D3DMATRIX(lpD3DMatrix);
510 switch (dtstTransformStateType) {
511 case D3DTRANSFORMSTATE_WORLD: {
512 if (TRACE_ON(ddraw)) {
513 TRACE(" Resulting D3DTRANSFORMSTATE_WORLD matrix is :\n");
515 mat = This->world_mat;
516 matrix_changed = WORLDMAT_CHANGED;
517 } break;
519 case D3DTRANSFORMSTATE_VIEW: {
520 if (TRACE_ON(ddraw)) {
521 TRACE(" Resulting D3DTRANSFORMSTATE_VIEW matrix is :\n");
523 mat = This->view_mat;
524 matrix_changed = VIEWMAT_CHANGED;
525 } break;
527 case D3DTRANSFORMSTATE_PROJECTION: {
528 if (TRACE_ON(ddraw)) {
529 TRACE(" Resulting D3DTRANSFORMSTATE_PROJECTION matrix is :\n");
531 mat = This->proj_mat;
532 matrix_changed = PROJMAT_CHANGED;
533 } break;
535 case D3DTRANSFORMSTATE_TEXTURE0:
536 case D3DTRANSFORMSTATE_TEXTURE1:
537 case D3DTRANSFORMSTATE_TEXTURE2:
538 case D3DTRANSFORMSTATE_TEXTURE3:
539 case D3DTRANSFORMSTATE_TEXTURE4:
540 case D3DTRANSFORMSTATE_TEXTURE5:
541 case D3DTRANSFORMSTATE_TEXTURE6:
542 case D3DTRANSFORMSTATE_TEXTURE7: {
543 DWORD mat_num = dtstTransformStateType - D3DTRANSFORMSTATE_TEXTURE0;
544 if (TRACE_ON(ddraw)) {
545 TRACE(" Resulting D3DTRANSFORMSTATE_TEXTURE%ld matrix is :\n", mat_num);
547 mat = This->tex_mat[mat_num];
548 matrix_changed = TEXMAT0_CHANGED << mat_num;
549 } break;
551 default:
552 ERR("Unknown transform type %08x !!!\n", dtstTransformStateType);
553 return DDERR_INVALIDPARAMS;
556 multiply_matrix(mat,mat,lpD3DMatrix);
558 if (TRACE_ON(ddraw)) {
559 dump_D3DMATRIX(mat);
562 if (matrix_changed != 0x00000000) This->matrices_updated(This, matrix_changed);
564 return DD_OK;
567 HRESULT WINAPI
568 Main_IDirect3DDeviceImpl_7_GetViewport(LPDIRECT3DDEVICE7 iface,
569 LPD3DVIEWPORT7 lpData)
571 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
572 TRACE("(%p/%p)->(%p)\n", This, iface, lpData);
574 *lpData = This->active_viewport;
576 if (TRACE_ON(ddraw)) {
577 TRACE(" returning viewport : \n");
578 TRACE(" - dwX = %ld dwY = %ld\n",
579 lpData->dwX, lpData->dwY);
580 TRACE(" - dwWidth = %ld dwHeight = %ld\n",
581 lpData->dwWidth, lpData->dwHeight);
582 TRACE(" - dvMinZ = %f dvMaxZ = %f\n",
583 lpData->dvMinZ, lpData->dvMaxZ);
586 return DD_OK;
589 HRESULT WINAPI
590 Main_IDirect3DDeviceImpl_7_SetMaterial(LPDIRECT3DDEVICE7 iface,
591 LPD3DMATERIAL7 lpMat)
593 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
594 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpMat);
595 return DD_OK;
598 HRESULT WINAPI
599 Main_IDirect3DDeviceImpl_7_GetMaterial(LPDIRECT3DDEVICE7 iface,
600 LPD3DMATERIAL7 lpMat)
602 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
603 TRACE("(%p/%p)->(%p)\n", This, iface, lpMat);
605 *lpMat = This->current_material;
607 if (TRACE_ON(ddraw)) {
608 TRACE(" returning material : \n");
609 dump_D3DMATERIAL7(lpMat);
612 return DD_OK;
615 HRESULT WINAPI
616 Main_IDirect3DDeviceImpl_7_SetLight(LPDIRECT3DDEVICE7 iface,
617 DWORD dwLightIndex,
618 LPD3DLIGHT7 lpLight)
620 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
621 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwLightIndex, lpLight);
622 return DD_OK;
625 HRESULT WINAPI
626 Main_IDirect3DDeviceImpl_7_GetLight(LPDIRECT3DDEVICE7 iface,
627 DWORD dwLightIndex,
628 LPD3DLIGHT7 lpLight)
630 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
631 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwLightIndex, lpLight);
633 if (dwLightIndex > MAX_LIGHTS) return DDERR_INVALIDPARAMS;
634 *lpLight = This->light_parameters[dwLightIndex];
636 if (TRACE_ON(ddraw)) {
637 TRACE(" returning light : \n");
638 dump_D3DLIGHT7(lpLight);
641 return DD_OK;
644 HRESULT WINAPI
645 Main_IDirect3DDeviceImpl_7_3T_2T_SetRenderState(LPDIRECT3DDEVICE7 iface,
646 D3DRENDERSTATETYPE dwRenderStateType,
647 DWORD dwRenderState)
649 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
650 FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwRenderStateType, dwRenderState);
651 return DD_OK;
654 HRESULT WINAPI
655 Main_IDirect3DDeviceImpl_7_3T_2T_GetRenderState(LPDIRECT3DDEVICE7 iface,
656 D3DRENDERSTATETYPE dwRenderStateType,
657 LPDWORD lpdwRenderState)
659 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
660 FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, dwRenderStateType, lpdwRenderState);
661 return DD_OK;
664 HRESULT WINAPI
665 Main_IDirect3DDeviceImpl_7_BeginStateBlock(LPDIRECT3DDEVICE7 iface)
667 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
668 FIXME("(%p/%p)->(): stub!\n", This, iface);
669 return DD_OK;
672 HRESULT WINAPI
673 Main_IDirect3DDeviceImpl_7_EndStateBlock(LPDIRECT3DDEVICE7 iface,
674 LPDWORD lpdwBlockHandle)
676 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
677 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpdwBlockHandle);
678 return DD_OK;
681 HRESULT WINAPI
682 Main_IDirect3DDeviceImpl_7_PreLoad(LPDIRECT3DDEVICE7 iface,
683 LPDIRECTDRAWSURFACE7 lpddsTexture)
685 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
686 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpddsTexture);
687 return DD_OK;
690 HRESULT WINAPI
691 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitive(LPDIRECT3DDEVICE7 iface,
692 D3DPRIMITIVETYPE d3dptPrimitiveType,
693 DWORD d3dvtVertexType,
694 LPVOID lpvVertices,
695 DWORD dwVertexCount,
696 DWORD dwFlags)
698 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
699 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
700 return DD_OK;
703 HRESULT WINAPI
704 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitive(LPDIRECT3DDEVICE7 iface,
705 D3DPRIMITIVETYPE d3dptPrimitiveType,
706 DWORD d3dvtVertexType,
707 LPVOID lpvVertices,
708 DWORD dwVertexCount,
709 LPWORD dwIndices,
710 DWORD dwIndexCount,
711 DWORD dwFlags)
713 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
714 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
715 return DD_OK;
718 HRESULT WINAPI
719 Main_IDirect3DDeviceImpl_7_3T_2T_SetClipStatus(LPDIRECT3DDEVICE7 iface,
720 LPD3DCLIPSTATUS lpD3DClipStatus)
722 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
723 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
724 return DD_OK;
727 HRESULT WINAPI
728 Main_IDirect3DDeviceImpl_7_3T_2T_GetClipStatus(LPDIRECT3DDEVICE7 iface,
729 LPD3DCLIPSTATUS lpD3DClipStatus)
731 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
732 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DClipStatus);
733 return DD_OK;
736 HRESULT WINAPI
737 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
738 D3DPRIMITIVETYPE d3dptPrimitiveType,
739 DWORD dwVertexType,
740 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
741 DWORD dwVertexCount,
742 DWORD dwFlags)
744 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
745 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
746 return DD_OK;
749 HRESULT WINAPI
750 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE7 iface,
751 D3DPRIMITIVETYPE d3dptPrimitiveType,
752 DWORD dwVertexType,
753 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
754 DWORD dwVertexCount,
755 LPWORD lpIndex,
756 DWORD dwIndexCount,
757 DWORD dwFlags)
759 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
760 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
761 return DD_OK;
764 HRESULT WINAPI
765 Main_IDirect3DDeviceImpl_7_3T_DrawPrimitiveVB(LPDIRECT3DDEVICE7 iface,
766 D3DPRIMITIVETYPE d3dptPrimitiveType,
767 LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
768 DWORD dwStartVertex,
769 DWORD dwNumVertices,
770 DWORD dwFlags)
772 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
773 FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
774 return DD_OK;
777 HRESULT WINAPI
778 Main_IDirect3DDeviceImpl_7_3T_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE7 iface,
779 D3DPRIMITIVETYPE d3dptPrimitiveType,
780 LPDIRECT3DVERTEXBUFFER7 lpD3DVertexBuf,
781 DWORD dwStartVertex,
782 DWORD dwNumVertices,
783 LPWORD lpwIndices,
784 DWORD dwIndexCount,
785 DWORD dwFlags)
787 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
788 FIXME("(%p/%p)->(%08x,%p,%08lx,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, lpwIndices, dwIndexCount, dwFlags);
789 return DD_OK;
792 HRESULT WINAPI
793 Main_IDirect3DDeviceImpl_7_3T_ComputeSphereVisibility(LPDIRECT3DDEVICE7 iface,
794 LPD3DVECTOR lpCenters,
795 LPD3DVALUE lpRadii,
796 DWORD dwNumSpheres,
797 DWORD dwFlags,
798 LPDWORD lpdwReturnValues)
800 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
801 FIXME("(%p/%p)->(%p,%p,%08lx,%08lx,%p): stub!\n", This, iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
802 return DD_OK;
805 HRESULT WINAPI
806 Main_IDirect3DDeviceImpl_7_3T_GetTexture(LPDIRECT3DDEVICE7 iface,
807 DWORD dwStage,
808 LPDIRECTDRAWSURFACE7* lpTexture)
810 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
811 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwStage, lpTexture);
813 if (This->current_texture[dwStage] != NULL) {
814 *lpTexture = ICOM_INTERFACE(This->current_texture[dwStage], IDirectDrawSurface7);
815 IDirectDrawSurface7_AddRef(*lpTexture);
816 } else {
817 *lpTexture = NULL;
820 TRACE(" returning interface at %p (for implementation at %p).\n", *lpTexture, This->current_texture[dwStage]);
822 return DD_OK;
825 HRESULT WINAPI
826 Main_IDirect3DDeviceImpl_7_3T_SetTexture(LPDIRECT3DDEVICE7 iface,
827 DWORD dwStage,
828 LPDIRECTDRAWSURFACE7 lpTexture)
830 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
831 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwStage, lpTexture);
832 return DD_OK;
835 HRESULT WINAPI
836 Main_IDirect3DDeviceImpl_7_3T_GetTextureStageState(LPDIRECT3DDEVICE7 iface,
837 DWORD dwStage,
838 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
839 LPDWORD lpdwState)
841 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
842 TRACE("(%p/%p)->(%08lx,%08x,%p)\n", This, iface, dwStage, d3dTexStageStateType, lpdwState);
843 if (lpdwState && (dwStage < 8) && d3dTexStageStateType && (d3dTexStageStateType < HIGHEST_TEXTURE_STAGE_STATE) ) {
844 *lpdwState = This->state_block.texture_stage_state[dwStage][d3dTexStageStateType-1];
845 return DD_OK;
847 return DDERR_INVALIDPARAMS;
850 HRESULT WINAPI
851 Main_IDirect3DDeviceImpl_7_3T_SetTextureStageState(LPDIRECT3DDEVICE7 iface,
852 DWORD dwStage,
853 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
854 DWORD dwState)
856 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
857 FIXME("(%p/%p)->(%08lx,%08x,%08lx): stub!\n", This, iface, dwStage, d3dTexStageStateType, dwState);
858 return DD_OK;
861 HRESULT WINAPI
862 Main_IDirect3DDeviceImpl_7_3T_ValidateDevice(LPDIRECT3DDEVICE7 iface,
863 LPDWORD lpdwPasses)
865 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
866 FIXME("(%p/%p)->(%p): semi-stub!\n", This, iface, lpdwPasses);
868 /* For the moment, we have a VERY good hardware which does everything in one pass :-) */
869 *lpdwPasses = 1;
871 return DD_OK;
874 HRESULT WINAPI
875 Main_IDirect3DDeviceImpl_7_ApplyStateBlock(LPDIRECT3DDEVICE7 iface,
876 DWORD dwBlockHandle)
878 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
879 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
880 return DD_OK;
883 HRESULT WINAPI
884 Main_IDirect3DDeviceImpl_7_CaptureStateBlock(LPDIRECT3DDEVICE7 iface,
885 DWORD dwBlockHandle)
887 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
888 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
889 return DD_OK;
892 HRESULT WINAPI
893 Main_IDirect3DDeviceImpl_7_DeleteStateBlock(LPDIRECT3DDEVICE7 iface,
894 DWORD dwBlockHandle)
896 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
897 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwBlockHandle);
898 return DD_OK;
901 HRESULT WINAPI
902 Main_IDirect3DDeviceImpl_7_CreateStateBlock(LPDIRECT3DDEVICE7 iface,
903 D3DSTATEBLOCKTYPE d3dsbType,
904 LPDWORD lpdwBlockHandle)
906 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
907 FIXME("(%p/%p)->(%08x,%p): stub!\n", This, iface, d3dsbType, lpdwBlockHandle);
908 return DD_OK;
911 HRESULT WINAPI
912 Main_IDirect3DDeviceImpl_7_Load(LPDIRECT3DDEVICE7 iface,
913 LPDIRECTDRAWSURFACE7 lpDestTex,
914 LPPOINT lpDestPoint,
915 LPDIRECTDRAWSURFACE7 lpSrcTex,
916 LPRECT lprcSrcRect,
917 DWORD dwFlags)
919 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
920 FIXME("(%p/%p)->(%p,%p,%p,%p,%08lx): Partially Implemented!\n", This, iface, lpDestTex, lpDestPoint, lpSrcTex, lprcSrcRect, dwFlags);
921 IDirect3DTexture2_Load(COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, lpDestTex),
922 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, lpSrcTex));
923 return DD_OK;
926 HRESULT WINAPI
927 Main_IDirect3DDeviceImpl_7_LightEnable(LPDIRECT3DDEVICE7 iface,
928 DWORD dwLightIndex,
929 BOOL bEnable)
931 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
932 FIXME("(%p/%p)->(%08lx,%d): stub!\n", This, iface, dwLightIndex, bEnable);
933 return DD_OK;
936 HRESULT WINAPI
937 Main_IDirect3DDeviceImpl_7_GetLightEnable(LPDIRECT3DDEVICE7 iface,
938 DWORD dwLightIndex,
939 BOOL* pbEnable)
941 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
942 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, dwLightIndex, pbEnable);
944 if (dwLightIndex > MAX_LIGHTS) *pbEnable = 0;
945 else *pbEnable = ((0x00000001 << dwLightIndex) & This->active_lights) != 0;
947 TRACE(" returning %d.\n", *pbEnable);
949 return DD_OK;
952 HRESULT WINAPI
953 Main_IDirect3DDeviceImpl_7_SetClipPlane(LPDIRECT3DDEVICE7 iface,
954 DWORD dwIndex,
955 D3DVALUE* pPlaneEquation)
957 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
958 FIXME("(%p/%p)->(%08lx,%p): stub!\n", This, iface, dwIndex, pPlaneEquation);
959 return DD_OK;
962 HRESULT WINAPI
963 Main_IDirect3DDeviceImpl_7_GetClipPlane(LPDIRECT3DDEVICE7 iface, DWORD dwIndex, D3DVALUE* pPlaneEquation)
965 ICOM_THIS(IDirect3DDeviceImpl,iface);
967 TRACE("(%p)->(%ld,%p)\n", This, dwIndex, pPlaneEquation);
969 if (dwIndex>=This->max_clipping_planes) {
970 return DDERR_INVALIDPARAMS;
973 memcpy( pPlaneEquation, This->clipping_planes[dwIndex].plane, sizeof(D3DVALUE[4]));
975 return D3D_OK;
978 HRESULT WINAPI
979 Main_IDirect3DDeviceImpl_7_GetInfo(LPDIRECT3DDEVICE7 iface,
980 DWORD dwDevInfoID,
981 LPVOID pDevInfoStruct,
982 DWORD dwSize)
984 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice7, iface);
985 TRACE("(%p/%p)->(%08lx,%p,%08lx)\n", This, iface, dwDevInfoID, pDevInfoStruct, dwSize);
987 if (TRACE_ON(ddraw)) {
988 TRACE(" info requested : ");
989 switch (dwDevInfoID) {
990 case D3DDEVINFOID_TEXTUREMANAGER: TRACE("D3DDEVINFOID_TEXTUREMANAGER\n"); break;
991 case D3DDEVINFOID_D3DTEXTUREMANAGER: TRACE("D3DDEVINFOID_D3DTEXTUREMANAGER\n"); break;
992 case D3DDEVINFOID_TEXTURING: TRACE("D3DDEVINFOID_TEXTURING\n"); break;
993 default: ERR(" invalid flag !!!\n"); return DDERR_INVALIDPARAMS;
997 return S_FALSE; /* According to MSDN, this is valid for a non-debug driver */
1000 HRESULT WINAPI
1001 Main_IDirect3DDeviceImpl_3_2T_1T_GetCaps(LPDIRECT3DDEVICE3 iface,
1002 LPD3DDEVICEDESC lpD3DHWDevDesc,
1003 LPD3DDEVICEDESC lpD3DHELDevDesc)
1005 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1006 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1007 return DD_OK;
1010 HRESULT WINAPI
1011 Main_IDirect3DDeviceImpl_3_2T_1T_GetStats(LPDIRECT3DDEVICE3 iface,
1012 LPD3DSTATS lpD3DStats)
1014 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1015 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpD3DStats);
1016 return DD_OK;
1019 HRESULT WINAPI
1020 Main_IDirect3DDeviceImpl_3_2T_1T_AddViewport(LPDIRECT3DDEVICE3 iface,
1021 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1023 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1024 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1026 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1028 lpDirect3DViewportImpl->next = This->viewport_list;
1029 This->viewport_list = lpDirect3DViewportImpl;
1031 return DD_OK;
1034 HRESULT WINAPI
1035 Main_IDirect3DDeviceImpl_3_2T_1T_DeleteViewport(LPDIRECT3DDEVICE3 iface,
1036 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1038 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1039 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1040 IDirect3DViewportImpl *cur_viewport, *prev_viewport = NULL;
1042 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1044 cur_viewport = This->viewport_list;
1045 while (cur_viewport != NULL) {
1046 if (cur_viewport == lpDirect3DViewportImpl) {
1047 if (prev_viewport == NULL) This->viewport_list = cur_viewport->next;
1048 else prev_viewport->next = cur_viewport->next;
1049 /* TODO : add desactivate of the viewport and all associated lights... */
1050 return DD_OK;
1052 prev_viewport = cur_viewport;
1053 cur_viewport = cur_viewport->next;
1056 return DDERR_INVALIDPARAMS;
1059 HRESULT WINAPI
1060 Main_IDirect3DDeviceImpl_3_2T_1T_NextViewport(LPDIRECT3DDEVICE3 iface,
1061 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3,
1062 LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3,
1063 DWORD dwFlags)
1065 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1066 IDirect3DViewportImpl *res = NULL;
1068 TRACE("(%p/%p)->(%p,%p,%08lx)\n", This, iface, lpDirect3DViewport3, lplpDirect3DViewport3, dwFlags);
1070 switch (dwFlags) {
1071 case D3DNEXT_NEXT: {
1072 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1073 res = lpDirect3DViewportImpl->next;
1074 } break;
1075 case D3DNEXT_HEAD: {
1076 res = This->viewport_list;
1077 } break;
1078 case D3DNEXT_TAIL: {
1079 IDirect3DViewportImpl *cur_viewport = This->viewport_list;
1080 if (cur_viewport != NULL) {
1081 while (cur_viewport->next != NULL) cur_viewport = cur_viewport->next;
1083 res = cur_viewport;
1084 } break;
1085 default:
1086 *lplpDirect3DViewport3 = NULL;
1087 return DDERR_INVALIDPARAMS;
1089 *lplpDirect3DViewport3 = ICOM_INTERFACE(res, IDirect3DViewport3);
1090 return DD_OK;
1093 HRESULT WINAPI
1094 Main_IDirect3DDeviceImpl_3_2T_SetCurrentViewport(LPDIRECT3DDEVICE3 iface,
1095 LPDIRECT3DVIEWPORT3 lpDirect3DViewport3)
1097 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1098 TRACE("(%p/%p)->(%p)\n", This, iface, lpDirect3DViewport3);
1100 /* Should check if the viewport was added or not */
1102 /* Set this viewport as the current viewport */
1103 This->current_viewport = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport3);
1105 /* Activate this viewport */
1106 This->current_viewport->active_device = This;
1107 This->current_viewport->activate(This->current_viewport);
1109 return DD_OK;
1112 HRESULT WINAPI
1113 Main_IDirect3DDeviceImpl_3_2T_GetCurrentViewport(LPDIRECT3DDEVICE3 iface,
1114 LPDIRECT3DVIEWPORT3* lplpDirect3DViewport3)
1116 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1117 TRACE("(%p/%p)->(%p)\n", This, iface, lplpDirect3DViewport3);
1119 *lplpDirect3DViewport3 = ICOM_INTERFACE(This->current_viewport, IDirect3DViewport3);
1120 TRACE(" returning interface %p\n", *lplpDirect3DViewport3);
1122 return DD_OK;
1125 HRESULT WINAPI
1126 Main_IDirect3DDeviceImpl_3_Begin(LPDIRECT3DDEVICE3 iface,
1127 D3DPRIMITIVETYPE d3dptPrimitiveType,
1128 DWORD dwVertexTypeDesc,
1129 DWORD dwFlags)
1131 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1132 FIXME("(%p/%p)->(%08x,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, dwVertexTypeDesc, dwFlags);
1133 return DD_OK;
1136 HRESULT WINAPI
1137 Main_IDirect3DDeviceImpl_3_BeginIndexed(LPDIRECT3DDEVICE3 iface,
1138 D3DPRIMITIVETYPE d3dptPrimitiveType,
1139 DWORD d3dvtVertexType,
1140 LPVOID lpvVertices,
1141 DWORD dwNumVertices,
1142 DWORD dwFlags)
1144 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1145 FIXME("(%p/%p)->(%08x,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
1146 return DD_OK;
1149 HRESULT WINAPI
1150 Main_IDirect3DDeviceImpl_3_2T_Vertex(LPDIRECT3DDEVICE3 iface,
1151 LPVOID lpVertexType)
1153 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1154 FIXME("(%p/%p)->(%p): stub!\n", This, iface, lpVertexType);
1155 return DD_OK;
1158 HRESULT WINAPI
1159 Main_IDirect3DDeviceImpl_3_2T_Index(LPDIRECT3DDEVICE3 iface,
1160 WORD wVertexIndex)
1162 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1163 FIXME("(%p/%p)->(%04x): stub!\n", This, iface, wVertexIndex);
1164 return DD_OK;
1167 HRESULT WINAPI
1168 Main_IDirect3DDeviceImpl_3_2T_End(LPDIRECT3DDEVICE3 iface,
1169 DWORD dwFlags)
1171 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1172 FIXME("(%p/%p)->(%08lx): stub!\n", This, iface, dwFlags);
1173 return DD_OK;
1176 HRESULT WINAPI
1177 Main_IDirect3DDeviceImpl_3_2T_GetLightState(LPDIRECT3DDEVICE3 iface,
1178 D3DLIGHTSTATETYPE dwLightStateType,
1179 LPDWORD lpdwLightState)
1181 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1182 FIXME("(%p/%p)->(%08x,%p): stub !\n", This, iface, dwLightStateType, lpdwLightState);
1183 return DD_OK;
1186 HRESULT WINAPI
1187 Main_IDirect3DDeviceImpl_3_2T_SetLightState(LPDIRECT3DDEVICE3 iface,
1188 D3DLIGHTSTATETYPE dwLightStateType,
1189 DWORD dwLightState)
1191 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice3, iface);
1192 FIXME("(%p/%p)->(%08x,%08lx): stub!\n", This, iface, dwLightStateType, dwLightState);
1193 return DD_OK;
1196 HRESULT WINAPI
1197 Main_IDirect3DDeviceImpl_2_1T_SwapTextureHandles(LPDIRECT3DDEVICE2 iface,
1198 LPDIRECT3DTEXTURE2 lpD3DTex1,
1199 LPDIRECT3DTEXTURE2 lpD3DTex2)
1201 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1202 IDirectDrawSurfaceImpl tmp,*surf1,*surf2;
1203 TRACE("(%p/%p)->(%p,%p):\n", This, iface, lpD3DTex1, lpD3DTex2);
1205 surf1 = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirect3DTexture2,lpD3DTex1);
1206 surf2 = ICOM_OBJECT(IDirectDrawSurfaceImpl,IDirect3DTexture2,lpD3DTex2);
1207 tmp = *surf1;
1208 *surf1 = *surf2;
1209 *surf2 = tmp;
1211 return DD_OK;
1214 HRESULT WINAPI
1215 Main_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE2 iface,
1216 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
1217 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
1218 DWORD dwFlags)
1220 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1221 FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
1222 return DD_OK;
1225 HRESULT WINAPI
1226 Main_IDirect3DDeviceImpl_2_1T_EnumTextureFormats(LPDIRECT3DDEVICE2 iface,
1227 LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
1228 LPVOID lpArg)
1230 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1231 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpD3DEnumTextureProc, lpArg);
1232 return DD_OK;
1235 HRESULT WINAPI
1236 Main_IDirect3DDeviceImpl_2_Begin(LPDIRECT3DDEVICE2 iface,
1237 D3DPRIMITIVETYPE d3dpt,
1238 D3DVERTEXTYPE dwVertexTypeDesc,
1239 DWORD dwFlags)
1241 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1242 FIXME("(%p/%p)->(%08x,%08x,%08lx): stub!\n", This, iface, d3dpt, dwVertexTypeDesc, dwFlags);
1243 return DD_OK;
1246 HRESULT WINAPI
1247 Main_IDirect3DDeviceImpl_2_BeginIndexed(LPDIRECT3DDEVICE2 iface,
1248 D3DPRIMITIVETYPE d3dptPrimitiveType,
1249 D3DVERTEXTYPE d3dvtVertexType,
1250 LPVOID lpvVertices,
1251 DWORD dwNumVertices,
1252 DWORD dwFlags)
1254 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1255 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwNumVertices, dwFlags);
1256 return DD_OK;
1259 HRESULT WINAPI
1260 Main_IDirect3DDeviceImpl_2_DrawPrimitive(LPDIRECT3DDEVICE2 iface,
1261 D3DPRIMITIVETYPE d3dptPrimitiveType,
1262 D3DVERTEXTYPE d3dvtVertexType,
1263 LPVOID lpvVertices,
1264 DWORD dwVertexCount,
1265 DWORD dwFlags)
1267 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1268 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
1269 return DD_OK;
1272 HRESULT WINAPI
1273 Main_IDirect3DDeviceImpl_2_DrawIndexedPrimitive(LPDIRECT3DDEVICE2 iface,
1274 D3DPRIMITIVETYPE d3dptPrimitiveType,
1275 D3DVERTEXTYPE d3dvtVertexType,
1276 LPVOID lpvVertices,
1277 DWORD dwVertexCount,
1278 LPWORD dwIndices,
1279 DWORD dwIndexCount,
1280 DWORD dwFlags)
1282 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice2, iface);
1283 FIXME("(%p/%p)->(%08x,%08x,%p,%08lx,%p,%08lx,%08lx): stub!\n", This, iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
1284 return DD_OK;
1287 HRESULT WINAPI
1288 Main_IDirect3DDeviceImpl_1_Initialize(LPDIRECT3DDEVICE iface,
1289 LPDIRECT3D lpDirect3D,
1290 LPGUID lpGUID,
1291 LPD3DDEVICEDESC lpD3DDVDesc)
1293 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1294 FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDirect3D, lpGUID, lpD3DDVDesc);
1295 return DD_OK;
1298 HRESULT WINAPI
1299 Main_IDirect3DDeviceImpl_1_CreateExecuteBuffer(LPDIRECT3DDEVICE iface,
1300 LPD3DEXECUTEBUFFERDESC lpDesc,
1301 LPDIRECT3DEXECUTEBUFFER* lplpDirect3DExecuteBuffer,
1302 IUnknown* pUnkOuter)
1304 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1305 FIXME("(%p/%p)->(%p,%p,%p): stub!\n", This, iface, lpDesc, lplpDirect3DExecuteBuffer, pUnkOuter);
1306 return DD_OK;
1309 HRESULT WINAPI
1310 Main_IDirect3DDeviceImpl_1_Execute(LPDIRECT3DDEVICE iface,
1311 LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
1312 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1313 DWORD dwFlags)
1315 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1316 IDirect3DExecuteBufferImpl *lpDirect3DExecuteBufferImpl = ICOM_OBJECT(IDirect3DExecuteBufferImpl, IDirect3DExecuteBuffer, lpDirect3DExecuteBuffer);
1317 IDirect3DViewportImpl *lpDirect3DViewportImpl = ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, lpDirect3DViewport);
1319 TRACE("(%p/%p)->(%p,%p,%08lx)\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags);
1321 /* Put this as the default context */
1323 /* Execute... */
1324 lpDirect3DExecuteBufferImpl->execute(lpDirect3DExecuteBufferImpl, This, lpDirect3DViewportImpl);
1326 return DD_OK;
1329 HRESULT WINAPI
1330 Main_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE iface,
1331 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1332 LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
1333 DWORD dwFlags)
1335 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1336 FIXME("(%p/%p)->(%p,%p,%08lx): stub!\n", This, iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
1337 return DD_OK;
1340 HRESULT WINAPI
1341 Main_IDirect3DDeviceImpl_1_Pick(LPDIRECT3DDEVICE iface,
1342 LPDIRECT3DEXECUTEBUFFER lpDirect3DExecuteBuffer,
1343 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1344 DWORD dwFlags,
1345 LPD3DRECT lpRect)
1347 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1348 FIXME("(%p/%p)->(%p,%p,%08lx,%p): stub!\n", This, iface, lpDirect3DExecuteBuffer, lpDirect3DViewport, dwFlags, lpRect);
1349 return DD_OK;
1352 HRESULT WINAPI
1353 Main_IDirect3DDeviceImpl_1_GetPickRecords(LPDIRECT3DDEVICE iface,
1354 LPDWORD lpCount,
1355 LPD3DPICKRECORD lpD3DPickRec)
1357 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1358 FIXME("(%p/%p)->(%p,%p): stub!\n", This, iface, lpCount, lpD3DPickRec);
1359 return DD_OK;
1362 HRESULT WINAPI
1363 Main_IDirect3DDeviceImpl_1_CreateMatrix(LPDIRECT3DDEVICE iface,
1364 LPD3DMATRIXHANDLE lpD3DMatHandle)
1366 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1367 TRACE("(%p/%p)->(%p)\n", This, iface, lpD3DMatHandle);
1369 *lpD3DMatHandle = (D3DMATRIXHANDLE) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(D3DMATRIX));
1370 TRACE(" returning matrix handle %p\n", (void *) *lpD3DMatHandle);
1372 return DD_OK;
1375 HRESULT WINAPI
1376 Main_IDirect3DDeviceImpl_1_SetMatrix(LPDIRECT3DDEVICE iface,
1377 D3DMATRIXHANDLE D3DMatHandle,
1378 LPD3DMATRIX lpD3DMatrix)
1380 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1381 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1383 if (TRACE_ON(ddraw)) {
1384 dump_D3DMATRIX(lpD3DMatrix);
1386 *((D3DMATRIX *) D3DMatHandle) = *lpD3DMatrix;
1388 return DD_OK;
1391 HRESULT WINAPI
1392 Main_IDirect3DDeviceImpl_1_GetMatrix(LPDIRECT3DDEVICE iface,
1393 D3DMATRIXHANDLE D3DMatHandle,
1394 LPD3DMATRIX lpD3DMatrix)
1396 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1397 TRACE("(%p/%p)->(%08lx,%p)\n", This, iface, (DWORD) D3DMatHandle, lpD3DMatrix);
1399 *lpD3DMatrix = *((D3DMATRIX *) D3DMatHandle);
1401 return DD_OK;
1404 HRESULT WINAPI
1405 Main_IDirect3DDeviceImpl_1_DeleteMatrix(LPDIRECT3DDEVICE iface,
1406 D3DMATRIXHANDLE D3DMatHandle)
1408 ICOM_THIS_FROM(IDirect3DDeviceImpl, IDirect3DDevice, iface);
1409 TRACE("(%p/%p)->(%08lx)\n", This, iface, (DWORD) D3DMatHandle);
1411 HeapFree(GetProcessHeap(), 0, (void *) D3DMatHandle);
1413 return DD_OK;
1416 HRESULT WINAPI
1417 Thunk_IDirect3DDeviceImpl_3_QueryInterface(LPDIRECT3DDEVICE3 iface,
1418 REFIID riid,
1419 LPVOID* obp)
1421 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1422 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1423 riid,
1424 obp);
1427 HRESULT WINAPI
1428 Thunk_IDirect3DDeviceImpl_2_QueryInterface(LPDIRECT3DDEVICE2 iface,
1429 REFIID riid,
1430 LPVOID* obp)
1432 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1433 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1434 riid,
1435 obp);
1438 HRESULT WINAPI
1439 Thunk_IDirect3DDeviceImpl_1_QueryInterface(LPDIRECT3DDEVICE iface,
1440 REFIID riid,
1441 LPVOID* obp)
1443 TRACE("(%p)->(%s,%p) thunking to IDirect3DDevice7 interface.\n", iface, debugstr_guid(riid), obp);
1444 return IDirect3DDevice7_QueryInterface(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1445 riid,
1446 obp);
1449 ULONG WINAPI
1450 Thunk_IDirect3DDeviceImpl_3_AddRef(LPDIRECT3DDEVICE3 iface)
1452 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1453 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1456 ULONG WINAPI
1457 Thunk_IDirect3DDeviceImpl_2_AddRef(LPDIRECT3DDEVICE2 iface)
1459 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1460 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1463 ULONG WINAPI
1464 Thunk_IDirect3DDeviceImpl_1_AddRef(LPDIRECT3DDEVICE iface)
1466 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1467 return IDirect3DDevice7_AddRef(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1470 ULONG WINAPI
1471 Thunk_IDirect3DDeviceImpl_3_Release(LPDIRECT3DDEVICE3 iface)
1473 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1474 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1477 ULONG WINAPI
1478 Thunk_IDirect3DDeviceImpl_2_Release(LPDIRECT3DDEVICE2 iface)
1480 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1481 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1484 ULONG WINAPI
1485 Thunk_IDirect3DDeviceImpl_1_Release(LPDIRECT3DDEVICE iface)
1487 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1488 return IDirect3DDevice7_Release(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1491 HRESULT WINAPI
1492 Thunk_IDirect3DDeviceImpl_2_AddViewport(LPDIRECT3DDEVICE2 iface,
1493 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1495 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1496 return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1497 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1500 HRESULT WINAPI
1501 Thunk_IDirect3DDeviceImpl_1_AddViewport(LPDIRECT3DDEVICE iface,
1502 LPDIRECT3DVIEWPORT lpDirect3DViewport)
1504 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1505 return IDirect3DDevice3_AddViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1506 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1509 HRESULT WINAPI
1510 Thunk_IDirect3DDeviceImpl_2_DeleteViewport(LPDIRECT3DDEVICE2 iface,
1511 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1513 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1514 return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1515 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1518 HRESULT WINAPI
1519 Thunk_IDirect3DDeviceImpl_1_DeleteViewport(LPDIRECT3DDEVICE iface,
1520 LPDIRECT3DVIEWPORT lpDirect3DViewport)
1522 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport);
1523 return IDirect3DDevice3_DeleteViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1524 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */);
1527 HRESULT WINAPI
1528 Thunk_IDirect3DDeviceImpl_2_NextViewport(LPDIRECT3DDEVICE3 iface,
1529 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2,
1530 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2,
1531 DWORD dwFlags)
1533 TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2, lplpDirect3DViewport2, dwFlags);
1534 return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1535 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */,
1536 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2,
1537 dwFlags);
1540 HRESULT WINAPI
1541 Thunk_IDirect3DDeviceImpl_1_NextViewport(LPDIRECT3DDEVICE3 iface,
1542 LPDIRECT3DVIEWPORT lpDirect3DViewport,
1543 LPDIRECT3DVIEWPORT* lplpDirect3DViewport,
1544 DWORD dwFlags)
1546 TRACE("(%p)->(%p,%p,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport, lplpDirect3DViewport, dwFlags);
1547 return IDirect3DDevice3_NextViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1548 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport /* No need to cast here as all interfaces are equivalent */,
1549 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport,
1550 dwFlags);
1553 HRESULT WINAPI
1554 Thunk_IDirect3DDeviceImpl_3_GetDirect3D(LPDIRECT3DDEVICE3 iface,
1555 LPDIRECT3D3* lplpDirect3D3)
1557 HRESULT ret;
1558 LPDIRECT3D7 ret_ptr;
1560 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D3);
1561 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1562 &ret_ptr);
1563 *lplpDirect3D3 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D3, ret_ptr);
1564 TRACE(" returning interface %p\n", *lplpDirect3D3);
1565 return ret;
1568 HRESULT WINAPI
1569 Thunk_IDirect3DDeviceImpl_2_GetDirect3D(LPDIRECT3DDEVICE2 iface,
1570 LPDIRECT3D2* lplpDirect3D2)
1572 HRESULT ret;
1573 LPDIRECT3D7 ret_ptr;
1575 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D2);
1576 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1577 &ret_ptr);
1578 *lplpDirect3D2 = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D2, ret_ptr);
1579 TRACE(" returning interface %p\n", *lplpDirect3D2);
1580 return ret;
1583 HRESULT WINAPI
1584 Thunk_IDirect3DDeviceImpl_1_GetDirect3D(LPDIRECT3DDEVICE iface,
1585 LPDIRECT3D* lplpDirect3D)
1587 HRESULT ret;
1588 LPDIRECT3D7 ret_ptr;
1590 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpDirect3D);
1591 ret = IDirect3DDevice7_GetDirect3D(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface),
1592 &ret_ptr);
1593 *lplpDirect3D = COM_INTERFACE_CAST(IDirectDrawImpl, IDirect3D7, IDirect3D, ret_ptr);
1594 TRACE(" returning interface %p\n", *lplpDirect3D);
1595 return ret;
1598 HRESULT WINAPI
1599 Thunk_IDirect3DDeviceImpl_2_SetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1600 LPDIRECT3DVIEWPORT2 lpDirect3DViewport2)
1602 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpDirect3DViewport2);
1603 return IDirect3DDevice3_SetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1604 (LPDIRECT3DVIEWPORT3) lpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1607 HRESULT WINAPI
1608 Thunk_IDirect3DDeviceImpl_2_GetCurrentViewport(LPDIRECT3DDEVICE2 iface,
1609 LPDIRECT3DVIEWPORT2* lplpDirect3DViewport2)
1611 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lplpDirect3DViewport2);
1612 return IDirect3DDevice3_GetCurrentViewport(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1613 (LPDIRECT3DVIEWPORT3*) lplpDirect3DViewport2 /* No need to cast here as all interfaces are equivalent */);
1616 HRESULT WINAPI
1617 Thunk_IDirect3DDeviceImpl_3_EnumTextureFormats(LPDIRECT3DDEVICE3 iface,
1618 LPD3DENUMPIXELFORMATSCALLBACK lpD3DEnumPixelProc,
1619 LPVOID lpArg)
1621 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DEnumPixelProc, lpArg);
1622 return IDirect3DDevice7_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1623 lpD3DEnumPixelProc,
1624 lpArg);
1627 HRESULT WINAPI
1628 Thunk_IDirect3DDeviceImpl_3_BeginScene(LPDIRECT3DDEVICE3 iface)
1630 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1631 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1634 HRESULT WINAPI
1635 Thunk_IDirect3DDeviceImpl_2_BeginScene(LPDIRECT3DDEVICE2 iface)
1637 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1638 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1641 HRESULT WINAPI
1642 Thunk_IDirect3DDeviceImpl_1_BeginScene(LPDIRECT3DDEVICE iface)
1644 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1645 return IDirect3DDevice7_BeginScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1648 HRESULT WINAPI
1649 Thunk_IDirect3DDeviceImpl_3_EndScene(LPDIRECT3DDEVICE3 iface)
1651 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1652 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface));
1655 HRESULT WINAPI
1656 Thunk_IDirect3DDeviceImpl_2_EndScene(LPDIRECT3DDEVICE2 iface)
1658 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1659 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface));
1662 HRESULT WINAPI
1663 Thunk_IDirect3DDeviceImpl_1_EndScene(LPDIRECT3DDEVICE iface)
1665 TRACE("(%p)->() thunking to IDirect3DDevice7 interface.\n", iface);
1666 return IDirect3DDevice7_EndScene(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice7, iface));
1669 HRESULT WINAPI
1670 Thunk_IDirect3DDeviceImpl_3_SetTransform(LPDIRECT3DDEVICE3 iface,
1671 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1672 LPD3DMATRIX lpD3DMatrix)
1674 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1675 return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1676 dtstTransformStateType,
1677 lpD3DMatrix);
1680 HRESULT WINAPI
1681 Thunk_IDirect3DDeviceImpl_2_SetTransform(LPDIRECT3DDEVICE2 iface,
1682 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1683 LPD3DMATRIX lpD3DMatrix)
1685 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1686 return IDirect3DDevice7_SetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1687 dtstTransformStateType,
1688 lpD3DMatrix);
1691 HRESULT WINAPI
1692 Thunk_IDirect3DDeviceImpl_3_GetTransform(LPDIRECT3DDEVICE3 iface,
1693 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1694 LPD3DMATRIX lpD3DMatrix)
1696 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1697 return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1698 dtstTransformStateType,
1699 lpD3DMatrix);
1702 HRESULT WINAPI
1703 Thunk_IDirect3DDeviceImpl_2_GetTransform(LPDIRECT3DDEVICE2 iface,
1704 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1705 LPD3DMATRIX lpD3DMatrix)
1707 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1708 return IDirect3DDevice7_GetTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1709 dtstTransformStateType,
1710 lpD3DMatrix);
1713 HRESULT WINAPI
1714 Thunk_IDirect3DDeviceImpl_3_MultiplyTransform(LPDIRECT3DDEVICE3 iface,
1715 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1716 LPD3DMATRIX lpD3DMatrix)
1718 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1719 return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1720 dtstTransformStateType,
1721 lpD3DMatrix);
1724 HRESULT WINAPI
1725 Thunk_IDirect3DDeviceImpl_2_MultiplyTransform(LPDIRECT3DDEVICE2 iface,
1726 D3DTRANSFORMSTATETYPE dtstTransformStateType,
1727 LPD3DMATRIX lpD3DMatrix)
1729 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dtstTransformStateType, lpD3DMatrix);
1730 return IDirect3DDevice7_MultiplyTransform(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1731 dtstTransformStateType,
1732 lpD3DMatrix);
1735 HRESULT WINAPI
1736 Thunk_IDirect3DDeviceImpl_3_SetRenderState(LPDIRECT3DDEVICE3 iface,
1737 D3DRENDERSTATETYPE dwRenderStateType,
1738 DWORD dwRenderState)
1740 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1741 return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1742 dwRenderStateType,
1743 dwRenderState);
1746 HRESULT WINAPI
1747 Thunk_IDirect3DDeviceImpl_2_SetRenderState(LPDIRECT3DDEVICE2 iface,
1748 D3DRENDERSTATETYPE dwRenderStateType,
1749 DWORD dwRenderState)
1751 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, dwRenderState);
1752 return IDirect3DDevice7_SetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1753 dwRenderStateType,
1754 dwRenderState);
1757 HRESULT WINAPI
1758 Thunk_IDirect3DDeviceImpl_3_GetRenderState(LPDIRECT3DDEVICE3 iface,
1759 D3DRENDERSTATETYPE dwRenderStateType,
1760 LPDWORD lpdwRenderState)
1762 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1763 return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1764 dwRenderStateType,
1765 lpdwRenderState);
1768 HRESULT WINAPI
1769 Thunk_IDirect3DDeviceImpl_2_GetRenderState(LPDIRECT3DDEVICE2 iface,
1770 D3DRENDERSTATETYPE dwRenderStateType,
1771 LPDWORD lpdwRenderState)
1773 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwRenderStateType, lpdwRenderState);
1774 return IDirect3DDevice7_GetRenderState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1775 dwRenderStateType,
1776 lpdwRenderState);
1779 HRESULT WINAPI
1780 Thunk_IDirect3DDeviceImpl_3_DrawPrimitive(LPDIRECT3DDEVICE3 iface,
1781 D3DPRIMITIVETYPE d3dptPrimitiveType,
1782 DWORD d3dvtVertexType,
1783 LPVOID lpvVertices,
1784 DWORD dwVertexCount,
1785 DWORD dwFlags)
1787 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwFlags);
1788 return IDirect3DDevice7_DrawPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1789 d3dptPrimitiveType,
1790 d3dvtVertexType,
1791 lpvVertices,
1792 dwVertexCount,
1793 dwFlags);
1796 HRESULT WINAPI
1797 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitive(LPDIRECT3DDEVICE3 iface,
1798 D3DPRIMITIVETYPE d3dptPrimitiveType,
1799 DWORD d3dvtVertexType,
1800 LPVOID lpvVertices,
1801 DWORD dwVertexCount,
1802 LPWORD dwIndices,
1803 DWORD dwIndexCount,
1804 DWORD dwFlags)
1806 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, d3dvtVertexType, lpvVertices, dwVertexCount, dwIndices, dwIndexCount, dwFlags);
1807 return IDirect3DDevice7_DrawIndexedPrimitive(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1808 d3dptPrimitiveType,
1809 d3dvtVertexType,
1810 lpvVertices,
1811 dwVertexCount,
1812 dwIndices,
1813 dwIndexCount,
1814 dwFlags);
1817 HRESULT WINAPI
1818 Thunk_IDirect3DDeviceImpl_3_SetClipStatus(LPDIRECT3DDEVICE3 iface,
1819 LPD3DCLIPSTATUS lpD3DClipStatus)
1821 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1822 return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1823 lpD3DClipStatus);
1826 HRESULT WINAPI
1827 Thunk_IDirect3DDeviceImpl_2_SetClipStatus(LPDIRECT3DDEVICE2 iface,
1828 LPD3DCLIPSTATUS lpD3DClipStatus)
1830 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1831 return IDirect3DDevice7_SetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1832 lpD3DClipStatus);
1835 HRESULT WINAPI
1836 Thunk_IDirect3DDeviceImpl_3_GetClipStatus(LPDIRECT3DDEVICE3 iface,
1837 LPD3DCLIPSTATUS lpD3DClipStatus)
1839 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1840 return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1841 lpD3DClipStatus);
1844 HRESULT WINAPI
1845 Thunk_IDirect3DDeviceImpl_2_GetClipStatus(LPDIRECT3DDEVICE2 iface,
1846 LPD3DCLIPSTATUS lpD3DClipStatus)
1848 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpD3DClipStatus);
1849 return IDirect3DDevice7_GetClipStatus(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
1850 lpD3DClipStatus);
1853 HRESULT WINAPI
1854 Thunk_IDirect3DDeviceImpl_3_DrawPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1855 D3DPRIMITIVETYPE d3dptPrimitiveType,
1856 DWORD dwVertexType,
1857 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1858 DWORD dwVertexCount,
1859 DWORD dwFlags)
1861 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, dwFlags);
1862 return IDirect3DDevice7_DrawPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1863 d3dptPrimitiveType,
1864 dwVertexType,
1865 lpD3DDrawPrimStrideData,
1866 dwVertexCount,
1867 dwFlags);
1870 HRESULT WINAPI
1871 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveStrided(LPDIRECT3DDEVICE3 iface,
1872 D3DPRIMITIVETYPE d3dptPrimitiveType,
1873 DWORD dwVertexType,
1874 LPD3DDRAWPRIMITIVESTRIDEDDATA lpD3DDrawPrimStrideData,
1875 DWORD dwVertexCount,
1876 LPWORD lpIndex,
1877 DWORD dwIndexCount,
1878 DWORD dwFlags)
1880 TRACE("(%p)->(%08x,%08lx,%p,%08lx,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, d3dptPrimitiveType, dwVertexType, lpD3DDrawPrimStrideData, dwVertexCount, lpIndex, dwIndexCount, dwFlags);
1881 return IDirect3DDevice7_DrawIndexedPrimitiveStrided(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1882 d3dptPrimitiveType,
1883 dwVertexType,
1884 lpD3DDrawPrimStrideData,
1885 dwVertexCount,
1886 lpIndex,
1887 dwIndexCount,
1888 dwFlags);
1891 HRESULT WINAPI
1892 Thunk_IDirect3DDeviceImpl_3_ComputeSphereVisibility(LPDIRECT3DDEVICE3 iface,
1893 LPD3DVECTOR lpCenters,
1894 LPD3DVALUE lpRadii,
1895 DWORD dwNumSpheres,
1896 DWORD dwFlags,
1897 LPDWORD lpdwReturnValues)
1899 TRACE("(%p)->(%p,%p,%08lx,%08lx,%p) thunking to IDirect3DDevice7 interface.\n", iface, lpCenters, lpRadii, dwNumSpheres, dwFlags, lpdwReturnValues);
1900 return IDirect3DDevice7_ComputeSphereVisibility(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1901 lpCenters,
1902 lpRadii,
1903 dwNumSpheres,
1904 dwFlags,
1905 lpdwReturnValues);
1908 HRESULT WINAPI
1909 Thunk_IDirect3DDeviceImpl_3_GetTextureStageState(LPDIRECT3DDEVICE3 iface,
1910 DWORD dwStage,
1911 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1912 LPDWORD lpdwState)
1914 TRACE("(%p)->(%08lx,%08x,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, lpdwState);
1915 return IDirect3DDevice7_GetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1916 dwStage,
1917 d3dTexStageStateType,
1918 lpdwState);
1921 HRESULT WINAPI
1922 Thunk_IDirect3DDeviceImpl_3_SetTextureStageState(LPDIRECT3DDEVICE3 iface,
1923 DWORD dwStage,
1924 D3DTEXTURESTAGESTATETYPE d3dTexStageStateType,
1925 DWORD dwState)
1927 TRACE("(%p)->(%08lx,%08x,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, d3dTexStageStateType, dwState);
1928 return IDirect3DDevice7_SetTextureStageState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1929 dwStage,
1930 d3dTexStageStateType,
1931 dwState);
1934 HRESULT WINAPI
1935 Thunk_IDirect3DDeviceImpl_3_ValidateDevice(LPDIRECT3DDEVICE3 iface,
1936 LPDWORD lpdwPasses)
1938 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lpdwPasses);
1939 return IDirect3DDevice7_ValidateDevice(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
1940 lpdwPasses);
1943 HRESULT WINAPI
1944 Thunk_IDirect3DDeviceImpl_2_GetCaps(LPDIRECT3DDEVICE2 iface,
1945 LPD3DDEVICEDESC lpD3DHWDevDesc,
1946 LPD3DDEVICEDESC lpD3DHELDevDesc)
1948 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1949 return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1950 lpD3DHWDevDesc,
1951 lpD3DHELDevDesc);
1954 HRESULT WINAPI
1955 Thunk_IDirect3DDeviceImpl_1_GetCaps(LPDIRECT3DDEVICE iface,
1956 LPD3DDEVICEDESC lpD3DHWDevDesc,
1957 LPD3DDEVICEDESC lpD3DHELDevDesc)
1959 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DHWDevDesc, lpD3DHELDevDesc);
1960 return IDirect3DDevice3_GetCaps(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1961 lpD3DHWDevDesc,
1962 lpD3DHELDevDesc);
1965 HRESULT WINAPI
1966 Thunk_IDirect3DDeviceImpl_1_SwapTextureHandles(LPDIRECT3DDEVICE iface,
1967 LPDIRECT3DTEXTURE lpD3DTex1,
1968 LPDIRECT3DTEXTURE lpD3DTex2)
1970 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice2 interface.\n", iface, lpD3DTex1, lpD3DTex2);
1971 return IDirect3DDevice2_SwapTextureHandles(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice2, iface),
1972 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture, IDirect3DTexture2, lpD3DTex1),
1973 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture, IDirect3DTexture2, lpD3DTex2));
1976 HRESULT WINAPI
1977 Thunk_IDirect3DDeviceImpl_2_GetStats(LPDIRECT3DDEVICE2 iface,
1978 LPD3DSTATS lpD3DStats)
1980 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
1981 return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
1982 lpD3DStats);
1985 HRESULT WINAPI
1986 Thunk_IDirect3DDeviceImpl_1_GetStats(LPDIRECT3DDEVICE iface,
1987 LPD3DSTATS lpD3DStats)
1989 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpD3DStats);
1990 return IDirect3DDevice3_GetStats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice3, iface),
1991 lpD3DStats);
1994 HRESULT WINAPI
1995 Thunk_IDirect3DDeviceImpl_3_SetRenderTarget(LPDIRECT3DDEVICE3 iface,
1996 LPDIRECTDRAWSURFACE4 lpNewRenderTarget,
1997 DWORD dwFlags)
1999 TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
2000 return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2001 (LPDIRECTDRAWSURFACE7) lpNewRenderTarget /* No cast needed as DSurf4 == DSurf7 */,
2002 dwFlags);
2005 HRESULT WINAPI
2006 Thunk_IDirect3DDeviceImpl_3_GetRenderTarget(LPDIRECT3DDEVICE3 iface,
2007 LPDIRECTDRAWSURFACE4* lplpRenderTarget)
2009 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
2010 return IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2011 (LPDIRECTDRAWSURFACE7*) lplpRenderTarget /* No cast needed as DSurf4 == DSurf7 */);
2014 HRESULT WINAPI
2015 Thunk_IDirect3DDeviceImpl_2_SetRenderTarget(LPDIRECT3DDEVICE2 iface,
2016 LPDIRECTDRAWSURFACE lpNewRenderTarget,
2017 DWORD dwFlags)
2019 TRACE("(%p)->(%p,%08lx) thunking to IDirect3DDevice7 interface.\n", iface, lpNewRenderTarget, dwFlags);
2020 return IDirect3DDevice7_SetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
2021 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface3, IDirectDrawSurface7, lpNewRenderTarget),
2022 dwFlags);
2025 HRESULT WINAPI
2026 Thunk_IDirect3DDeviceImpl_2_GetRenderTarget(LPDIRECT3DDEVICE2 iface,
2027 LPDIRECTDRAWSURFACE* lplpRenderTarget)
2029 HRESULT ret;
2030 LPDIRECTDRAWSURFACE7 ret_val;
2032 TRACE("(%p)->(%p) thunking to IDirect3DDevice7 interface.\n", iface, lplpRenderTarget);
2033 ret = IDirect3DDevice7_GetRenderTarget(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice7, iface),
2034 &ret_val);
2035 *lplpRenderTarget = (LPDIRECTDRAWSURFACE) COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirectDrawSurface3, ret_val);
2036 TRACE(" returning interface %p\n", *lplpRenderTarget);
2037 return ret;
2040 HRESULT WINAPI
2041 Thunk_IDirect3DDeviceImpl_2_Vertex(LPDIRECT3DDEVICE2 iface,
2042 LPVOID lpVertexType)
2044 TRACE("(%p)->(%p) thunking to IDirect3DDevice3 interface.\n", iface, lpVertexType);
2045 return IDirect3DDevice3_Vertex(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2046 lpVertexType);
2049 HRESULT WINAPI
2050 Thunk_IDirect3DDeviceImpl_2_Index(LPDIRECT3DDEVICE2 iface,
2051 WORD wVertexIndex)
2053 TRACE("(%p)->(%04x) thunking to IDirect3DDevice3 interface.\n", iface, wVertexIndex);
2054 return IDirect3DDevice3_Index(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2055 wVertexIndex);
2058 HRESULT WINAPI
2059 Thunk_IDirect3DDeviceImpl_2_End(LPDIRECT3DDEVICE2 iface,
2060 DWORD dwFlags)
2062 TRACE("(%p)->(%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwFlags);
2063 return IDirect3DDevice3_End(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2064 dwFlags);
2067 HRESULT WINAPI
2068 Thunk_IDirect3DDeviceImpl_2_GetLightState(LPDIRECT3DDEVICE2 iface,
2069 D3DLIGHTSTATETYPE dwLightStateType,
2070 LPDWORD lpdwLightState)
2072 TRACE("(%p)->(%08x,%p) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, lpdwLightState);
2073 return IDirect3DDevice3_GetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2074 dwLightStateType,
2075 lpdwLightState);
2078 HRESULT WINAPI
2079 Thunk_IDirect3DDeviceImpl_2_SetLightState(LPDIRECT3DDEVICE2 iface,
2080 D3DLIGHTSTATETYPE dwLightStateType,
2081 DWORD dwLightState)
2083 TRACE("(%p)->(%08x,%08lx) thunking to IDirect3DDevice3 interface.\n", iface, dwLightStateType, dwLightState);
2084 return IDirect3DDevice3_SetLightState(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice2, IDirect3DDevice3, iface),
2085 dwLightStateType,
2086 dwLightState);
2089 HRESULT WINAPI
2090 Thunk_IDirect3DDeviceImpl_1_EnumTextureFormats(LPDIRECT3DDEVICE iface,
2091 LPD3DENUMTEXTUREFORMATSCALLBACK lpD3DEnumTextureProc,
2092 LPVOID lpArg)
2094 TRACE("(%p)->(%p,%p) thunking to IDirect3DDevice2 interface.\n", iface, lpD3DEnumTextureProc, lpArg);
2095 return IDirect3DDevice2_EnumTextureFormats(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice, IDirect3DDevice2, iface),
2096 lpD3DEnumTextureProc,
2097 lpArg);
2100 HRESULT WINAPI
2101 Thunk_IDirect3DDeviceImpl_3_SetTexture(LPDIRECT3DDEVICE3 iface,
2102 DWORD dwStage,
2103 LPDIRECT3DTEXTURE2 lpTexture2)
2105 TRACE("(%p)->(%ld,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, lpTexture2);
2106 return IDirect3DDevice7_SetTexture(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2107 dwStage,
2108 COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirect3DTexture2, IDirectDrawSurface7, lpTexture2));
2111 HRESULT WINAPI
2112 Thunk_IDirect3DDeviceImpl_3_DrawPrimitiveVB(LPDIRECT3DDEVICE3 iface,
2113 D3DPRIMITIVETYPE d3dptPrimitiveType,
2114 LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
2115 DWORD dwStartVertex,
2116 DWORD dwNumVertices,
2117 DWORD dwFlags)
2119 TRACE("(%p)->(%08x,%p,%08lx,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface,
2120 d3dptPrimitiveType, lpD3DVertexBuf, dwStartVertex, dwNumVertices, dwFlags);
2121 return IDirect3DDevice7_DrawPrimitiveVB(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2122 d3dptPrimitiveType,
2123 COM_INTERFACE_CAST(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer, IDirect3DVertexBuffer7, lpD3DVertexBuf),
2124 dwStartVertex,
2125 dwNumVertices,
2126 dwFlags);
2129 HRESULT WINAPI
2130 Thunk_IDirect3DDeviceImpl_3_DrawIndexedPrimitiveVB(LPDIRECT3DDEVICE3 iface,
2131 D3DPRIMITIVETYPE d3dptPrimitiveType,
2132 LPDIRECT3DVERTEXBUFFER lpD3DVertexBuf,
2133 LPWORD lpwIndices,
2134 DWORD dwIndexCount,
2135 DWORD dwFlags)
2137 TRACE("(%p)->(%08x,%p,%p,%08lx,%08lx) thunking to IDirect3DDevice7 interface.\n", iface,
2138 d3dptPrimitiveType, lpD3DVertexBuf, lpwIndices, dwIndexCount, dwFlags);
2139 return IDirect3DDevice7_DrawIndexedPrimitiveVB(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2140 d3dptPrimitiveType,
2141 COM_INTERFACE_CAST(IDirect3DVertexBufferImpl, IDirect3DVertexBuffer, IDirect3DVertexBuffer7, lpD3DVertexBuf),
2143 dwIndexCount,
2144 lpwIndices,
2145 dwIndexCount,
2146 dwFlags);
2149 HRESULT WINAPI
2150 Thunk_IDirect3DDeviceImpl_3_GetTexture(LPDIRECT3DDEVICE3 iface,
2151 DWORD dwStage,
2152 LPDIRECT3DTEXTURE2* lplpTexture2)
2154 HRESULT ret;
2155 LPDIRECTDRAWSURFACE7 ret_val;
2157 TRACE("(%p)->(%ld,%p) thunking to IDirect3DDevice7 interface.\n", iface, dwStage, lplpTexture2);
2158 ret = IDirect3DDevice7_GetTexture(COM_INTERFACE_CAST(IDirect3DDeviceImpl, IDirect3DDevice3, IDirect3DDevice7, iface),
2159 dwStage,
2160 &ret_val);
2162 *lplpTexture2 = COM_INTERFACE_CAST(IDirectDrawSurfaceImpl, IDirectDrawSurface7, IDirect3DTexture2, ret_val);
2164 TRACE(" returning interface %p.\n", *lplpTexture2);
2166 return ret;