[PATCH 4/5] d3drm: Get rid of the IDirect3DRMLightImpl typedef.

Henri Verbeet hverbeet at codeweavers.com
Mon Oct 28 05:46:42 CDT 2013


---
 dlls/d3drm/light.c |  804 +++++++++++++++++++++++++---------------------------
 1 file changed, 392 insertions(+), 412 deletions(-)
 rewrite dlls/d3drm/light.c (76%)

diff --git a/dlls/d3drm/light.c b/dlls/d3drm/light.c
dissimilarity index 76%
index 7283b3b..53accbf 100644
--- a/dlls/d3drm/light.c
+++ b/dlls/d3drm/light.c
@@ -1,412 +1,392 @@
-/*
- * Implementation of IDirect3DRMLight Interface
- *
- * Copyright 2012 André Hentschel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "wine/debug.h"
-
-#define COBJMACROS
-
-#include "winbase.h"
-#include "wingdi.h"
-
-#include "d3drm_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
-
-typedef struct {
-    IDirect3DRMLight IDirect3DRMLight_iface;
-    LONG ref;
-    D3DRMLIGHTTYPE type;
-    D3DCOLOR color;
-    D3DVALUE range;
-    D3DVALUE cattenuation;
-    D3DVALUE lattenuation;
-    D3DVALUE qattenuation;
-    D3DVALUE umbra;
-    D3DVALUE penumbra;
-} IDirect3DRMLightImpl;
-
-static inline IDirect3DRMLightImpl *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
-{
-    return CONTAINING_RECORD(iface, IDirect3DRMLightImpl, IDirect3DRMLight_iface);
-}
-
-/*** IUnknown methods ***/
-static HRESULT WINAPI IDirect3DRMLightImpl_QueryInterface(IDirect3DRMLight* iface,
-                                                           REFIID riid, void** object)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%s, %p)\n", iface, This, debugstr_guid(riid), object);
-
-    *object = NULL;
-
-    if(IsEqualGUID(riid, &IID_IUnknown) ||
-       IsEqualGUID(riid, &IID_IDirect3DRMLight))
-    {
-        *object = &This->IDirect3DRMLight_iface;
-    }
-    else
-    {
-        FIXME("interface %s not implemented\n", debugstr_guid(riid));
-        return E_NOINTERFACE;
-    }
-
-    IDirect3DRMLight_AddRef(iface);
-    return S_OK;
-}
-
-static ULONG WINAPI IDirect3DRMLightImpl_AddRef(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-    ULONG ref = InterlockedIncrement(&This->ref);
-
-    TRACE("(%p)->(): new ref = %d\n", iface, ref);
-
-    return ref;
-}
-
-static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-    ULONG ref = InterlockedDecrement(&This->ref);
-
-    TRACE("(%p)->(): new ref = %d\n", iface, ref);
-
-    if (!ref)
-        HeapFree(GetProcessHeap(), 0, This);
-
-    return ref;
-}
-
-/*** IDirect3DRMObject methods ***/
-static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight *iface,
-        IUnknown *outer, REFIID iid, void **out)
-{
-    FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight *iface,
-        D3DRMOBJECTCALLBACK cb, void *ctx)
-{
-    FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight *iface,
-        D3DRMOBJECTCALLBACK cb, void *ctx)
-{
-    FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetAppData(IDirect3DRMLight* iface,
-                                                       DWORD data)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    FIXME("(%p/%p)->(%u): stub\n", iface, This, data);
-
-    return E_NOTIMPL;
-}
-
-static DWORD WINAPI IDirect3DRMLightImpl_GetAppData(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    FIXME("(%p/%p)->(): stub\n", iface, This);
-
-    return 0;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetName(IDirect3DRMLight *iface, const char *name)
-{
-    FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight *iface, DWORD *size, char *name)
-{
-    FIXME("iface %p, size %p, name %p stub!\n", iface, size, name);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight *iface, DWORD *size, char *name)
-{
-    TRACE("iface %p, size %p, name %p.\n", iface, size, name);
-
-    if (!size || *size < strlen("Light") || !name)
-        return E_INVALIDARG;
-
-    strcpy(name, "Light");
-    *size = sizeof("Light");
-
-    return D3DRM_OK;
-}
-
-/*** IDirect3DRMLight methods ***/
-static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%u)\n", iface, This, type);
-
-    This->type = type;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%u)\n", iface, This, color);
-
-    This->color = color;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
-                                                         D3DVALUE red, D3DVALUE green, D3DVALUE blue)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f,%f,%f)\n", iface, This, red, green, blue);
-
-    This->color = RGBA_MAKE((BYTE)(red * 255.0f), (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, range);
-
-    This->range = range;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, umbra);
-
-    This->umbra = umbra;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, penumbra);
-
-    This->penumbra = penumbra;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
-                                                                    D3DVALUE cattenuation)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, cattenuation);
-
-    This->cattenuation = cattenuation;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
-                                                                  D3DVALUE lattenuation)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, lattenuation);
-
-    This->lattenuation = lattenuation;
-
-    return D3DRM_OK;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
-                                                                     D3DVALUE qattenuation)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->(%f)\n", iface, This, qattenuation);
-
-    This->qattenuation = qattenuation;
-
-    return D3DRM_OK;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->range;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->umbra;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->penumbra;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->cattenuation;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->lattenuation;
-}
-
-static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->qattenuation;
-}
-
-static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->color;
-}
-
-static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
-{
-    IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
-
-    TRACE("(%p/%p)->()\n", iface, This);
-
-    return This->type;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight *iface, IDirect3DRMFrame *frame)
-{
-    FIXME("iface %p, frame %p stub!\n", iface, frame);
-
-    return E_NOTIMPL;
-}
-
-static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight *iface, IDirect3DRMFrame **frame)
-{
-    FIXME("iface %p, frame %p stub!\n", iface, frame);
-
-    return E_NOTIMPL;
-}
-
-static const struct IDirect3DRMLightVtbl Direct3DRMLight_Vtbl =
-{
-    /*** IUnknown methods ***/
-    IDirect3DRMLightImpl_QueryInterface,
-    IDirect3DRMLightImpl_AddRef,
-    IDirect3DRMLightImpl_Release,
-    /*** IDirect3DRMObject methods ***/
-    IDirect3DRMLightImpl_Clone,
-    IDirect3DRMLightImpl_AddDestroyCallback,
-    IDirect3DRMLightImpl_DeleteDestroyCallback,
-    IDirect3DRMLightImpl_SetAppData,
-    IDirect3DRMLightImpl_GetAppData,
-    IDirect3DRMLightImpl_SetName,
-    IDirect3DRMLightImpl_GetName,
-    IDirect3DRMLightImpl_GetClassName,
-    /*** IDirect3DRMLight methods ***/
-    IDirect3DRMLightImpl_SetType,
-    IDirect3DRMLightImpl_SetColor,
-    IDirect3DRMLightImpl_SetColorRGB,
-    IDirect3DRMLightImpl_SetRange,
-    IDirect3DRMLightImpl_SetUmbra,
-    IDirect3DRMLightImpl_SetPenumbra,
-    IDirect3DRMLightImpl_SetConstantAttenuation,
-    IDirect3DRMLightImpl_SetLinearAttenuation,
-    IDirect3DRMLightImpl_SetQuadraticAttenuation,
-    IDirect3DRMLightImpl_GetRange,
-    IDirect3DRMLightImpl_GetUmbra,
-    IDirect3DRMLightImpl_GetPenumbra,
-    IDirect3DRMLightImpl_GetConstantAttenuation,
-    IDirect3DRMLightImpl_GetLinearAttenuation,
-    IDirect3DRMLightImpl_GetQuadraticAttenuation,
-    IDirect3DRMLightImpl_GetColor,
-    IDirect3DRMLightImpl_GetType,
-    IDirect3DRMLightImpl_SetEnableFrame,
-    IDirect3DRMLightImpl_GetEnableFrame
-};
-
-HRESULT Direct3DRMLight_create(IUnknown** ppObj)
-{
-    IDirect3DRMLightImpl* object;
-
-    TRACE("(%p)\n", ppObj);
-
-    object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMLightImpl));
-    if (!object)
-        return E_OUTOFMEMORY;
-
-    object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
-    object->ref = 1;
-
-    *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;
-
-    return S_OK;
-}
+/*
+ * Implementation of IDirect3DRMLight Interface
+ *
+ * Copyright 2012 André Hentschel
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/debug.h"
+
+#define COBJMACROS
+
+#include "winbase.h"
+#include "wingdi.h"
+
+#include "d3drm_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
+
+struct d3drm_light
+{
+    IDirect3DRMLight IDirect3DRMLight_iface;
+    LONG ref;
+    D3DRMLIGHTTYPE type;
+    D3DCOLOR color;
+    D3DVALUE range;
+    D3DVALUE cattenuation;
+    D3DVALUE lattenuation;
+    D3DVALUE qattenuation;
+    D3DVALUE umbra;
+    D3DVALUE penumbra;
+};
+
+static inline struct d3drm_light *impl_from_IDirect3DRMLight(IDirect3DRMLight *iface)
+{
+    return CONTAINING_RECORD(iface, struct d3drm_light, IDirect3DRMLight_iface);
+}
+
+static HRESULT WINAPI d3drm_light_QueryInterface(IDirect3DRMLight *iface, REFIID riid, void **out)
+{
+    TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out);
+
+    if (IsEqualGUID(riid, &IID_IDirect3DRMLight)
+            || IsEqualGUID(riid, &IID_IUnknown))
+    {
+        IDirect3DRMLight_AddRef(iface);
+        *out = iface;
+        return S_OK;
+    }
+
+    WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
+
+    *out = NULL;
+    return E_NOINTERFACE;
+}
+
+static ULONG WINAPI d3drm_light_AddRef(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+    ULONG refcount = InterlockedIncrement(&light->ref);
+
+    TRACE("%p increasing refcount to %u.\n", iface, refcount);
+
+    return refcount;
+}
+
+static ULONG WINAPI d3drm_light_Release(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+    ULONG refcount = InterlockedDecrement(&light->ref);
+
+    TRACE("%p decreasing refcount to %u.\n", iface, refcount);
+
+    if (!refcount)
+        HeapFree(GetProcessHeap(), 0, light);
+
+    return refcount;
+}
+
+static HRESULT WINAPI d3drm_light_Clone(IDirect3DRMLight *iface,
+        IUnknown *outer, REFIID iid, void **out)
+{
+    FIXME("iface %p, outer %p, iid %s, out %p stub!\n", iface, outer, debugstr_guid(iid), out);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_AddDestroyCallback(IDirect3DRMLight *iface,
+        D3DRMOBJECTCALLBACK cb, void *ctx)
+{
+    FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_DeleteDestroyCallback(IDirect3DRMLight *iface,
+        D3DRMOBJECTCALLBACK cb, void *ctx)
+{
+    FIXME("iface %p, cb %p, ctx %p stub!\n", iface, cb, ctx);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_SetAppData(IDirect3DRMLight *iface, DWORD data)
+{
+    FIXME("iface %p, data %#x stub!\n", iface, data);
+
+    return E_NOTIMPL;
+}
+
+static DWORD WINAPI d3drm_light_GetAppData(IDirect3DRMLight *iface)
+{
+    FIXME("iface %p stub!\n", iface);
+
+    return 0;
+}
+
+static HRESULT WINAPI d3drm_light_SetName(IDirect3DRMLight *iface, const char *name)
+{
+    FIXME("iface %p, name %s stub!\n", iface, debugstr_a(name));
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_GetName(IDirect3DRMLight *iface, DWORD *size, char *name)
+{
+    FIXME("iface %p, size %p, name %p stub!\n", iface, size, name);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_GetClassName(IDirect3DRMLight *iface, DWORD *size, char *name)
+{
+    TRACE("iface %p, size %p, name %p.\n", iface, size, name);
+
+    if (!size || *size < strlen("Light") || !name)
+        return E_INVALIDARG;
+
+    strcpy(name, "Light");
+    *size = sizeof("Light");
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetType(IDirect3DRMLight *iface, D3DRMLIGHTTYPE type)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, type %#x.\n", iface, type);
+
+    light->type = type;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetColor(IDirect3DRMLight *iface, D3DCOLOR color)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, color 0x%08x.\n", iface, color);
+
+    light->color = color;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetColorRGB(IDirect3DRMLight *iface,
+        D3DVALUE red, D3DVALUE green, D3DVALUE blue)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
+
+    light->color = RGBA_MAKE((BYTE)(red * 255.0f), (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetRange(IDirect3DRMLight *iface, D3DVALUE range)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, range %.8e.\n", iface, range);
+
+    light->range = range;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetUmbra(IDirect3DRMLight *iface, D3DVALUE umbra)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, umbra %.8e.\n", iface, umbra);
+
+    light->umbra = umbra;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetPenumbra(IDirect3DRMLight *iface, D3DVALUE penumbra)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, penumbra %.8e.\n", iface, penumbra);
+
+    light->penumbra = penumbra;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetConstantAttenuation(IDirect3DRMLight *iface, D3DVALUE attenuation)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, attenuation %.8e.\n", iface, attenuation);
+
+    light->cattenuation = attenuation;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetLinearAttenuation(IDirect3DRMLight *iface, D3DVALUE attenuation)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, attenuation %.8e.\n", iface, attenuation);
+
+    light->lattenuation = attenuation;
+
+    return D3DRM_OK;
+}
+
+static HRESULT WINAPI d3drm_light_SetQuadraticAttenuation(IDirect3DRMLight *iface, D3DVALUE attenuation)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p, attenuation %.8e.\n", iface, attenuation);
+
+    light->qattenuation = attenuation;
+
+    return D3DRM_OK;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetRange(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->range;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetUmbra(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", light);
+
+    return light->umbra;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetPenumbra(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->penumbra;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetConstantAttenuation(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->cattenuation;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetLinearAttenuation(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->lattenuation;
+}
+
+static D3DVALUE WINAPI d3drm_light_GetQuadraticAttenuation(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->qattenuation;
+}
+
+static D3DCOLOR WINAPI d3drm_light_GetColor(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->color;
+}
+
+static D3DRMLIGHTTYPE WINAPI d3drm_light_GetType(IDirect3DRMLight *iface)
+{
+    struct d3drm_light *light = impl_from_IDirect3DRMLight(iface);
+
+    TRACE("iface %p.\n", iface);
+
+    return light->type;
+}
+
+static HRESULT WINAPI d3drm_light_SetEnableFrame(IDirect3DRMLight *iface, IDirect3DRMFrame *frame)
+{
+    FIXME("iface %p, frame %p stub!\n", iface, frame);
+
+    return E_NOTIMPL;
+}
+
+static HRESULT WINAPI d3drm_light_GetEnableFrame(IDirect3DRMLight *iface, IDirect3DRMFrame **frame)
+{
+    FIXME("iface %p, frame %p stub!\n", iface, frame);
+
+    return E_NOTIMPL;
+}
+
+static const struct IDirect3DRMLightVtbl d3drm_light_vtbl =
+{
+    d3drm_light_QueryInterface,
+    d3drm_light_AddRef,
+    d3drm_light_Release,
+    d3drm_light_Clone,
+    d3drm_light_AddDestroyCallback,
+    d3drm_light_DeleteDestroyCallback,
+    d3drm_light_SetAppData,
+    d3drm_light_GetAppData,
+    d3drm_light_SetName,
+    d3drm_light_GetName,
+    d3drm_light_GetClassName,
+    d3drm_light_SetType,
+    d3drm_light_SetColor,
+    d3drm_light_SetColorRGB,
+    d3drm_light_SetRange,
+    d3drm_light_SetUmbra,
+    d3drm_light_SetPenumbra,
+    d3drm_light_SetConstantAttenuation,
+    d3drm_light_SetLinearAttenuation,
+    d3drm_light_SetQuadraticAttenuation,
+    d3drm_light_GetRange,
+    d3drm_light_GetUmbra,
+    d3drm_light_GetPenumbra,
+    d3drm_light_GetConstantAttenuation,
+    d3drm_light_GetLinearAttenuation,
+    d3drm_light_GetQuadraticAttenuation,
+    d3drm_light_GetColor,
+    d3drm_light_GetType,
+    d3drm_light_SetEnableFrame,
+    d3drm_light_GetEnableFrame,
+};
+
+HRESULT Direct3DRMLight_create(IUnknown **out)
+{
+    struct d3drm_light *object;
+
+    TRACE("out %p.\n", out);
+
+    if (!(object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object))))
+        return E_OUTOFMEMORY;
+
+    object->IDirect3DRMLight_iface.lpVtbl = &d3drm_light_vtbl;
+    object->ref = 1;
+
+    *out = (IUnknown *)&object->IDirect3DRMLight_iface;
+
+    return S_OK;
+}
-- 
1.7.10.4




More information about the wine-patches mailing list