[1/4] d3drm: Add IDirect3DRMLight interface
André Hentschel
nerv at dawncrow.de
Tue May 1 15:15:39 CDT 2012
After this patchset my choosen sample app is quite happy with the provided interfaces, but it needs more stubs to be really implemented
---
dlls/d3drm/Makefile.in | 1 +
dlls/d3drm/d3drm.c | 61 ++++---
dlls/d3drm/d3drm_private.h | 1 +
dlls/d3drm/light.c | 405 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 448 insertions(+), 20 deletions(-)
create mode 100644 dlls/d3drm/light.c
diff --git a/dlls/d3drm/Makefile.in b/dlls/d3drm/Makefile.in
index 59d4b8c..895afc7 100644
--- a/dlls/d3drm/Makefile.in
+++ b/dlls/d3drm/Makefile.in
@@ -7,6 +7,7 @@ C_SRCS = \
d3drm_main.c \
device.c \
frame.c \
+ light.c \
math.c \
meshbuilder.c \
viewport.c
diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c
index ba29e6e..401cccd 100644
--- a/dlls/d3drm/d3drm.c
+++ b/dlls/d3drm/d3drm.c
@@ -203,22 +203,25 @@ static HRESULT WINAPI IDirect3DRMImpl_CreateTexture(IDirect3DRM* iface, LPD3DRMI
return E_NOTIMPL;
}
-static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
+static HRESULT WINAPI IDirect3DRMImpl_CreateLight(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
+ D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
- FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
+ TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
- return E_NOTIMPL;
+ return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
}
-static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type, D3DVALUE red, D3DVALUE green, D3DVALUE blue, LPDIRECT3DRMLIGHT * ppLight)
+static HRESULT WINAPI IDirect3DRMImpl_CreateLightRGB(IDirect3DRM* iface, D3DRMLIGHTTYPE type,
+ D3DVALUE red, D3DVALUE green, D3DVALUE blue,
+ LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM(iface);
- FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
+ TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
- return E_NOTIMPL;
+ return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
}
static HRESULT WINAPI IDirect3DRMImpl_Material(IDirect3DRM* iface, D3DVALUE m, LPDIRECT3DRMMATERIAL * ppMaterial)
@@ -577,24 +580,24 @@ static HRESULT WINAPI IDirect3DRM2Impl_CreateTexture(IDirect3DRM2* iface, LPD3DR
}
static HRESULT WINAPI IDirect3DRM2Impl_CreateLight(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
- D3DCOLOR color, LPDIRECT3DRMLIGHT * ppLight)
+ D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
- FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, ppLight);
+ TRACE("(%p/%p)->(%d,%d,%p)\n", iface, This, type, color, Light);
- return E_NOTIMPL;
+ return IDirect3DRM3_CreateLight(&This->IDirect3DRM3_iface, type, color, Light);
}
static HRESULT WINAPI IDirect3DRM2Impl_CreateLightRGB(IDirect3DRM2* iface, D3DRMLIGHTTYPE type,
- D3DVALUE red, D3DVALUE green, D3DVALUE blue,
- LPDIRECT3DRMLIGHT * ppLight)
+ D3DVALUE red, D3DVALUE green, D3DVALUE blue,
+ LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM2(iface);
- FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, ppLight);
+ TRACE("(%p/%p)->(%d,%f,%f,%f,%p)\n", iface, This, type, red, green, blue, Light);
- return E_NOTIMPL;
+ return IDirect3DRM3_CreateLightRGB(&This->IDirect3DRM3_iface, type, red, green, blue, Light);
}
static HRESULT WINAPI IDirect3DRM2Impl_Material(IDirect3DRM2* iface, D3DVALUE m,
@@ -1006,24 +1009,42 @@ static HRESULT WINAPI IDirect3DRM3Impl_CreateTexture(IDirect3DRM3* iface, LPD3DR
}
static HRESULT WINAPI IDirect3DRM3Impl_CreateLight(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
- D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
+ D3DCOLOR color, LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
+ HRESULT ret;
- FIXME("(%p/%p)->(%d,%d,%p): stub\n", iface, This, type, color, Light);
+ FIXME("(%p/%p)->(%d,%d,%p): partial stub\n", iface, This, type, color, Light);
- return E_NOTIMPL;
+ ret = Direct3DRMLight_create((IUnknown**)Light);
+
+ if (SUCCEEDED(ret))
+ {
+ IDirect3DRMLight_SetType(*Light, type);
+ IDirect3DRMLight_SetColor(*Light, color);
+ }
+
+ return ret;
}
static HRESULT WINAPI IDirect3DRM3Impl_CreateLightRGB(IDirect3DRM3* iface, D3DRMLIGHTTYPE type,
- D3DVALUE red, D3DVALUE green, D3DVALUE blue,
- LPDIRECT3DRMLIGHT* Light)
+ D3DVALUE red, D3DVALUE green, D3DVALUE blue,
+ LPDIRECT3DRMLIGHT* Light)
{
IDirect3DRMImpl *This = impl_from_IDirect3DRM3(iface);
+ HRESULT ret;
- FIXME("(%p/%p)->(%d,%f,%f,%f,%p): stub\n", iface, This, type, red, green, blue, Light);
+ FIXME("(%p/%p)->(%d,%f,%f,%f,%p): partial stub\n", iface, This, type, red, green, blue, Light);
- return E_NOTIMPL;
+ ret = Direct3DRMLight_create((IUnknown**)Light);
+
+ if (SUCCEEDED(ret))
+ {
+ IDirect3DRMLight_SetType(*Light, type);
+ IDirect3DRMLight_SetColorRGB(*Light, red, green, blue);
+ }
+
+ return ret;
}
static HRESULT WINAPI IDirect3DRM3Impl_Material(IDirect3DRM3* iface, D3DVALUE m,
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index 8a74ee0..18d8e0a 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -27,6 +27,7 @@
HRESULT Direct3DRM_create(IUnknown** ppObj) DECLSPEC_HIDDEN;
HRESULT Direct3DRMDevice_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN;
HRESULT Direct3DRMFrame_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN;
+HRESULT Direct3DRMLight_create(IUnknown** ppObj) DECLSPEC_HIDDEN;
HRESULT Direct3DRMMeshBuilder_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN;
HRESULT Direct3DRMViewport_create(REFIID riid, IUnknown** ppObj) DECLSPEC_HIDDEN;
diff --git a/dlls/d3drm/light.c b/dlls/d3drm/light.c
new file mode 100644
index 0000000..7247763
--- /dev/null
+++ b/dlls/d3drm/light.c
@@ -0,0 +1,405 @@
+/*
+ * 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;
+} 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);
+
+ TRACE("(%p)\n", This);
+
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI IDirect3DRMLightImpl_Release(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)\n", This);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+/*** IDirect3DRMObject methods ***/
+static HRESULT WINAPI IDirect3DRMLightImpl_Clone(IDirect3DRMLight* iface,
+ LPUNKNOWN unkwn, REFIID riid,
+ LPVOID* object)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p, %s, %p): stub\n", iface, This, unkwn, debugstr_guid(riid), object);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_AddDestroyCallback(IDirect3DRMLight* iface,
+ D3DRMOBJECTCALLBACK cb,
+ LPVOID argument)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_DeleteDestroyCallback(IDirect3DRMLight* iface,
+ D3DRMOBJECTCALLBACK cb,
+ LPVOID argument)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, cb, argument);
+
+ 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, LPCSTR name)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%s): stub\n", iface, This, name);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_GetName(IDirect3DRMLight* iface,
+ LPDWORD size, LPSTR name)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_GetClassName(IDirect3DRMLight* iface,
+ LPDWORD size, LPSTR name)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p, %p): stub\n", iface, This, size, name);
+
+ return E_NOTIMPL;
+}
+
+/*** IDirect3DRMLight methods ***/
+static HRESULT WINAPI IDirect3DRMLightImpl_SetType(IDirect3DRMLight* iface, D3DRMLIGHTTYPE type)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%u): stub\n", iface, This, type);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetColor(IDirect3DRMLight* iface, D3DCOLOR color)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%u): stub\n", iface, This, color);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetColorRGB(IDirect3DRMLight* iface,
+ D3DVALUE red, D3DVALUE green, D3DVALUE blue)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f,%f,%f): stub\n", iface, This, red, green, blue);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetRange(IDirect3DRMLight* iface, D3DVALUE range)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, range);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetUmbra(IDirect3DRMLight* iface, D3DVALUE umbra)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, umbra);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetPenumbra(IDirect3DRMLight* iface, D3DVALUE penumbra)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, penumbra);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetConstantAttenuation(IDirect3DRMLight* iface,
+ D3DVALUE cattenuation)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, cattenuation);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetLinearAttenuation(IDirect3DRMLight* iface,
+ D3DVALUE lattenuation)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, lattenuation);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetQuadraticAttenuation(IDirect3DRMLight* iface,
+ D3DVALUE qattenuation)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%f): stub\n", iface, This, qattenuation);
+
+ return E_NOTIMPL;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetRange(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetUmbra(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetPenumbra(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetConstantAttenuation(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetLinearAttenuation(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DVALUE WINAPI IDirect3DRMLightImpl_GetQuadraticAttenuation(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DCOLOR WINAPI IDirect3DRMLightImpl_GetColor(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return 0;
+}
+
+static D3DRMLIGHTTYPE WINAPI IDirect3DRMLightImpl_GetType(IDirect3DRMLight* iface)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(): stub\n", iface, This);
+
+ return D3DRMLIGHT_AMBIENT;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_SetEnableFrame(IDirect3DRMLight* iface,
+ LPDIRECT3DRMFRAME frame)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", iface, This, frame);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMLightImpl_GetEnableFrame(IDirect3DRMLight* iface,
+ LPDIRECT3DRMFRAME* frame)
+{
+ IDirect3DRMLightImpl *This = impl_from_IDirect3DRMLight(iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", iface, This, 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)
+ {
+ ERR("Out of memory\n");
+ return E_OUTOFMEMORY;
+ }
+
+ object->IDirect3DRMLight_iface.lpVtbl = &Direct3DRMLight_Vtbl;
+ object->ref = 1;
+
+ *ppObj = (IUnknown*)&object->IDirect3DRMLight_iface;
+
+ return S_OK;
+}
--
Best Regards, André Hentschel
More information about the wine-patches
mailing list