296
296
*****************************************************************************/
297
297
static HRESULT WINAPI IDirect3DMaterialImpl_GetHandle(IDirect3DMaterial3 *iface,
298
IDirect3DDevice3 *lpDirect3DDevice3, D3DMATERIALHANDLE *lpHandle)
298
IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle)
300
300
IDirect3DMaterialImpl *This = impl_from_IDirect3DMaterial3(iface);
301
IDirect3DDeviceImpl *device = device_from_device3(lpDirect3DDevice3);
303
TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice3, lpHandle);
305
EnterCriticalSection(&ddraw_cs);
306
This->active_device = device;
301
IDirect3DDeviceImpl *device_impl = unsafe_impl_from_IDirect3DDevice3(device);
303
TRACE("iface %p, device %p, handle %p.\n", iface, device, handle);
305
wined3d_mutex_lock();
306
This->active_device = device_impl;
307
307
if(!This->Handle)
309
DWORD h = ddraw_allocate_handle(&device->handle_table, This, DDRAW_HANDLE_MATERIAL);
309
DWORD h = ddraw_allocate_handle(&device_impl->handle_table, This, DDRAW_HANDLE_MATERIAL);
310
310
if (h == DDRAW_INVALID_HANDLE)
312
312
ERR("Failed to allocate a material handle.\n");
313
LeaveCriticalSection(&ddraw_cs);
313
wined3d_mutex_unlock();
314
314
return DDERR_INVALIDPARAMS; /* Unchecked */
317
317
This->Handle = h + 1;
319
*lpHandle = This->Handle;
320
TRACE(" returning handle %08x.\n", *lpHandle);
321
LeaveCriticalSection(&ddraw_cs);
319
*handle = This->Handle;
320
TRACE(" returning handle %08x.\n", *handle);
321
wined3d_mutex_unlock();
326
326
static HRESULT WINAPI IDirect3DMaterialImpl_2_GetHandle(IDirect3DMaterial2 *iface,
327
IDirect3DDevice2 *lpDirect3DDevice2, D3DMATERIALHANDLE *lpHandle)
327
IDirect3DDevice2 *device, D3DMATERIALHANDLE *handle)
329
329
IDirect3DMaterialImpl *This = impl_from_IDirect3DMaterial2(iface);
331
TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice2, lpHandle);
333
return IDirect3DMaterial3_GetHandle(&This->IDirect3DMaterial3_iface, lpDirect3DDevice2 ?
334
(IDirect3DDevice3 *)&device_from_device2(lpDirect3DDevice2)->IDirect3DDevice3_vtbl : NULL, lpHandle);
330
IDirect3DDeviceImpl *device_impl = unsafe_impl_from_IDirect3DDevice2(device);
332
TRACE("iface %p, device %p, handle %p.\n", iface, device, handle);
334
return IDirect3DMaterial3_GetHandle(&This->IDirect3DMaterial3_iface, device_impl ?
335
&device_impl->IDirect3DDevice3_iface : NULL, handle);
337
338
static HRESULT WINAPI IDirect3DMaterialImpl_1_GetHandle(IDirect3DMaterial *iface,
338
IDirect3DDevice *lpDirect3DDevice, D3DMATERIALHANDLE *lpHandle)
339
IDirect3DDevice *device, D3DMATERIALHANDLE *handle)
340
341
IDirect3DMaterialImpl *This = impl_from_IDirect3DMaterial(iface);
342
TRACE("iface %p, device %p, handle %p.\n", iface, lpDirect3DDevice, lpHandle);
344
return IDirect3DMaterial3_GetHandle(&This->IDirect3DMaterial3_iface, lpDirect3DDevice ?
345
(IDirect3DDevice3 *)&device_from_device1(lpDirect3DDevice)->IDirect3DDevice3_vtbl : NULL, lpHandle);
342
IDirect3DDeviceImpl *device_impl = unsafe_impl_from_IDirect3DDevice(device);
344
TRACE("iface %p, device %p, handle %p.\n", iface, device, handle);
346
return IDirect3DMaterial3_GetHandle(&This->IDirect3DMaterial3_iface, device_impl ?
347
&device_impl->IDirect3DDevice3_iface : NULL, handle);
348
350
static HRESULT WINAPI IDirect3DMaterialImpl_2_QueryInterface(IDirect3DMaterial2 *iface, REFIID riid,