From 2944d233b8174fc27ba8e039959a95c9572cd3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Tue, 1 May 2012 22:16:10 +0200 Subject: [PATCH] d3drm: Implement IDirect3DRMFrameX_DeleteLight. --- dlls/d3drm/frame.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c index 5a9ff728f63..8e74264ad07 100644 --- a/dlls/d3drm/frame.c +++ b/dlls/d3drm/frame.c @@ -501,13 +501,13 @@ static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteChild(IDirect3DRMFrame2* iface } static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteLight(IDirect3DRMFrame2* iface, - LPDIRECT3DRMLIGHT light) + LPDIRECT3DRMLIGHT light) { IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame2(iface); - FIXME("(%p/%p)->(%p): stub\n", iface, This, light); + TRACE("(%p/%p)->(%p)\n", iface, This, light); - return E_NOTIMPL; + return IDirect3DRMFrame3_DeleteLight(&This->IDirect3DRMFrame3_iface, light); } static HRESULT WINAPI IDirect3DRMFrame2Impl_DeleteMoveCallback(IDirect3DRMFrame2* iface, @@ -1463,13 +1463,29 @@ static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteChild(IDirect3DRMFrame3* iface } static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteLight(IDirect3DRMFrame3* iface, - LPDIRECT3DRMLIGHT light) + LPDIRECT3DRMLIGHT light) { IDirect3DRMFrameImpl *This = impl_from_IDirect3DRMFrame3(iface); + ULONG i; - FIXME("(%p/%p)->(%p): stub\n", iface, This, light); + TRACE("(%p/%p)->(%p)\n", iface, This, light); - return E_NOTIMPL; + if (!light) + return D3DRMERR_BADOBJECT; + + /* Check if visual exists */ + for (i = 0; i < This->nb_lights; i++) + if (This->lights[i] == light) + break; + + if (i == This->nb_lights) + return D3DRMERR_BADVALUE; + + memmove(This->lights + i, This->lights + i + 1, sizeof(IDirect3DRMLight*) * (This->nb_lights - 1 - i)); + IDirect3DRMLight_Release(light); + This->nb_lights--; + + return D3DRM_OK; } static HRESULT WINAPI IDirect3DRMFrame3Impl_DeleteMoveCallback(IDirect3DRMFrame3* iface,