4 This files contains the implementation of Direct3DMaterial2. */
9 #include "wine/obj_base.h"
12 #include "debugtools.h"
14 #include "mesa_private.h"
16 DEFAULT_DEBUG_CHANNEL(ddraw
);
18 static ICOM_VTABLE(IDirect3DMaterial2
) material2_vtable
;
19 static ICOM_VTABLE(IDirect3DMaterial
) material_vtable
;
21 /*******************************************************************************
22 * Matrial2 static functions
24 static void activate(IDirect3DMaterial2Impl
* This
) {
25 TRACE("Activating material %p\n", This
);
28 /* First, set the rendering context */
30 This
->device
.active_device2
->set_context(This
->device
.active_device2
);
32 This
->device
.active_device1
->set_context(This
->device
.active_device1
);
34 /* Set the current Material */
35 _dump_colorvalue("Diffuse", This
->mat
.u
.diffuse
);
36 glMaterialfv(GL_FRONT
,
38 (float *) &(This
->mat
.u
.diffuse
));
39 _dump_colorvalue("Ambient", This
->mat
.u1
.ambient
);
40 glMaterialfv(GL_FRONT
,
42 (float *) &(This
->mat
.u1
.ambient
));
43 _dump_colorvalue("Specular", This
->mat
.u2
.specular
);
44 glMaterialfv(GL_FRONT
,
46 (float *) &(This
->mat
.u2
.specular
));
47 _dump_colorvalue("Emissive", This
->mat
.u3
.emissive
);
48 glMaterialfv(GL_FRONT
,
50 (float *) &(This
->mat
.u3
.emissive
));
52 TRACE("Size : %ld\n", This
->mat
.dwSize
);
53 TRACE("Power : %f\n", This
->mat
.u4
.power
);
55 TRACE("Texture handle : %08lx\n", (DWORD
)This
->mat
.hTexture
);
61 /*******************************************************************************
62 * Matrial2 Creation functions
64 LPDIRECT3DMATERIAL2
d3dmaterial2_create(IDirect3D2Impl
* d3d2
)
66 IDirect3DMaterial2Impl
* mat
;
68 mat
= HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY
,sizeof(IDirect3DMaterial2Impl
));
70 ICOM_VTBL(mat
) = &material2_vtable
;
75 mat
->activate
= activate
;
77 return (LPDIRECT3DMATERIAL2
)mat
;
80 LPDIRECT3DMATERIAL
d3dmaterial_create(IDirect3DImpl
* d3d1
)
82 IDirect3DMaterial2Impl
* mat
;
84 mat
= HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY
,sizeof(IDirect3DMaterial2Impl
));
86 ICOM_VTBL(mat
) = (ICOM_VTABLE(IDirect3DMaterial2
)*)&material_vtable
;
91 mat
->activate
= activate
;
93 return (LPDIRECT3DMATERIAL
) mat
;
96 /*******************************************************************************
97 * IDirect3DMaterial2 methods
100 static HRESULT WINAPI
IDirect3DMaterial2Impl_QueryInterface(LPDIRECT3DMATERIAL2 iface
,
104 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
106 FIXME("(%p)->(%s,%p): stub\n", This
, debugstr_guid(riid
),ppvObj
);
113 static ULONG WINAPI
IDirect3DMaterial2Impl_AddRef(LPDIRECT3DMATERIAL2 iface
)
115 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
116 TRACE("(%p)->()incrementing from %lu.\n", This
, This
->ref
);
118 return ++(This
->ref
);
123 static ULONG WINAPI
IDirect3DMaterial2Impl_Release(LPDIRECT3DMATERIAL2 iface
)
125 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
126 FIXME("(%p)->() decrementing from %lu.\n", This
, This
->ref
);
128 if (!--(This
->ref
)) {
129 HeapFree(GetProcessHeap(),0,This
);
136 /*** IDirect3DMaterial2 methods ***/
137 static void dump_material(LPD3DMATERIAL mat
)
139 DPRINTF(" dwSize : %ld\n", mat
->dwSize
);
142 static HRESULT WINAPI
IDirect3DMaterial2Impl_GetMaterial(LPDIRECT3DMATERIAL2 iface
,
145 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
146 TRACE("(%p)->(%p)\n", This
, lpMat
);
148 dump_material(lpMat
);
150 /* Copies the material structure */
156 static HRESULT WINAPI
IDirect3DMaterial2Impl_SetMaterial(LPDIRECT3DMATERIAL2 iface
,
159 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
160 TRACE("(%p)->(%p)\n", This
, lpMat
);
162 dump_material(lpMat
);
164 /* Stores the material */
170 static HRESULT WINAPI
IDirect3DMaterial2Impl_GetHandle(LPDIRECT3DMATERIAL2 iface
,
171 LPDIRECT3DDEVICE2 lpD3DDevice2
,
172 LPD3DMATERIALHANDLE lpMatHandle
)
175 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
176 FIXME("(%p)->(%p,%p): stub\n", This
, lpD3DDevice2
, lpMatHandle
);
179 This
->device
.active_device2
= (IDirect3DDevice2Impl
*)lpD3DDevice2
;
181 This
->device
.active_device1
= (IDirect3DDeviceImpl
*)lpD3DDevice2
;
183 *lpMatHandle
= (DWORD
) This
; /* lpD3DDevice2->store_material(This); */
188 static HRESULT WINAPI
IDirect3DMaterialImpl_Reserve(LPDIRECT3DMATERIAL iface
)
190 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
191 FIXME("(%p)->(): stub\n", This
);
193 return DDERR_INVALIDPARAMS
;
196 static HRESULT WINAPI
IDirect3DMaterialImpl_Unreserve(LPDIRECT3DMATERIAL iface
)
198 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
199 FIXME("(%p)->(): stub\n", This
);
201 return DDERR_INVALIDPARAMS
;
204 static HRESULT WINAPI
IDirect3DMaterialImpl_Initialize(LPDIRECT3DMATERIAL iface
,
205 LPDIRECT3D lpDirect3D
)
208 ICOM_THIS(IDirect3DMaterial2Impl
,iface
);
209 TRACE("(%p)->(%p)\n", This
, lpDirect3D
);
211 return DDERR_ALREADYINITIALIZED
;
215 /*******************************************************************************
216 * IDirect3DMaterial VTable
218 #if !defined(__STRICT_ANSI__) && defined(__GNUC__)
219 # define XCAST(fun) (typeof(material_vtable.fun))
221 # define XCAST(fun) (void*)
224 static ICOM_VTABLE(IDirect3DMaterial
) material_vtable
=
226 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
227 /*** IUnknown methods ***/
228 XCAST(QueryInterface
)IDirect3DMaterial2Impl_QueryInterface
,
229 XCAST(AddRef
)IDirect3DMaterial2Impl_AddRef
,
230 XCAST(Release
)IDirect3DMaterial2Impl_Release
,
231 /*** IDirect3DMaterial methods ***/
232 IDirect3DMaterialImpl_Initialize
,
233 XCAST(SetMaterial
)IDirect3DMaterial2Impl_SetMaterial
,
234 XCAST(GetMaterial
)IDirect3DMaterial2Impl_GetMaterial
,
235 XCAST(GetHandle
)IDirect3DMaterial2Impl_GetHandle
,
236 IDirect3DMaterialImpl_Reserve
,
237 IDirect3DMaterialImpl_Unreserve
240 #if !defined(__STRICT_ANSI__) && defined(__GNUC__)
244 /*******************************************************************************
245 * IDirect3DMaterial2 VTable
247 static ICOM_VTABLE(IDirect3DMaterial2
) material2_vtable
=
249 ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
250 /*** IUnknown methods ***/
251 IDirect3DMaterial2Impl_QueryInterface
,
252 IDirect3DMaterial2Impl_AddRef
,
253 IDirect3DMaterial2Impl_Release
,
254 /*** IDirect3DMaterial methods ***/
255 IDirect3DMaterial2Impl_SetMaterial
,
256 IDirect3DMaterial2Impl_GetMaterial
,
257 IDirect3DMaterial2Impl_GetHandle