Module: wine Branch: refs/heads/master Commit: b0c7bee2ef4f64279dfd03367629f084444f83fa URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=b0c7bee2ef4f64279dfd0336...
Author: Stefan Dösinger stefandoesinger@gmx.at Date: Thu Jun 29 14:20:39 2006 +0200
ddraw: Fix some material related bugs.
---
dlls/ddraw/device.c | 20 ++++++++++++++++++-- dlls/ddraw/material.c | 1 + dlls/ddraw/viewport.c | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c index 8417340..63f272b 100644 --- a/dlls/ddraw/device.c +++ b/dlls/ddraw/device.c @@ -1639,7 +1639,7 @@ IDirect3DDeviceImpl_3_GetCurrentViewport *Direct3DViewport3 = ICOM_INTERFACE(This->current_viewport, IDirect3DViewport3);
/* AddRef the returned viewport */ - IDirect3DViewport3_AddRef(*Direct3DViewport3); + if(*Direct3DViewport3) IDirect3DViewport3_AddRef(*Direct3DViewport3);
TRACE(" returning interface %p\n", *Direct3DViewport3);
@@ -2279,7 +2279,23 @@ IDirect3DDeviceImpl_3_SetLightState(IDir
if (LightStateType == D3DLIGHTSTATE_MATERIAL /* 1 */) { - IDirect3DMaterialImpl *mat = (IDirect3DMaterialImpl *) Value; + IDirect3DMaterialImpl *mat; + + if(Value == 0) mat = NULL; + else if(Value > This->numHandles) + { + ERR("Material handle out of range(%ld)\n", Value); + return DDERR_INVALIDPARAMS; + } + else if(This->Handles[Value - 1].type != DDrawHandle_Material) + { + ERR("Invalid handle %ld\n", Value); + return DDERR_INVALIDPARAMS; + } + else + { + mat = (IDirect3DMaterialImpl *) This->Handles[Value - 1].ptr; + }
if (mat != NULL) { diff --git a/dlls/ddraw/material.c b/dlls/ddraw/material.c index c2acce1..3483c72 100644 --- a/dlls/ddraw/material.c +++ b/dlls/ddraw/material.c @@ -311,6 +311,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3 IDirect3DDeviceImpl *device = ICOM_OBJECT(IDirect3DDeviceImpl, IDirect3DDevice3, lpDirect3DDevice3); TRACE("(%p/%p)->(%p,%p)\n", This, iface, device, lpHandle);
+ This->active_device = device; if(!This->Handle) { This->Handle = IDirect3DDeviceImpl_CreateHandle(device); diff --git a/dlls/ddraw/viewport.c b/dlls/ddraw/viewport.c index 29acebf..71c426b 100644 --- a/dlls/ddraw/viewport.c +++ b/dlls/ddraw/viewport.c @@ -310,7 +310,7 @@ IDirect3DViewportImpl_SetViewport(IDirec IDirect3DDevice3_GetCurrentViewport(ICOM_INTERFACE(This->active_device, IDirect3DDevice3), ¤t_viewport); if (ICOM_OBJECT(IDirect3DViewportImpl, IDirect3DViewport3, current_viewport) == This) This->activate(This); - IDirect3DViewport3_Release(current_viewport); + if(current_viewport) IDirect3DViewport3_Release(current_viewport); }
return DD_OK;