[PATCH] d3drm: Implement CreateMesh method and stubbed IDirect3DRMMesh interface. (try 2)
Christian Costa
titan.costa at gmail.com
Thu Mar 29 17:50:33 CDT 2012
Try 2: Make constrcutor static, remove interface argument and pass directly a IDirect3DRMesh** argument.
---
dlls/d3drm/meshbuilder.c | 399 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 395 insertions(+), 4 deletions(-)
diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 33d6600..47685f5 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -32,6 +32,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(d3drm);
+static HRESULT Direct3DRMMesh_create(IDirect3DRMMesh** obj);
+
+typedef struct {
+ IDirect3DRMMesh IDirect3DRMMesh_iface;
+ LONG ref;
+} IDirect3DRMMeshImpl;
+
typedef struct {
D3DVALUE u;
D3DVALUE v;
@@ -274,6 +281,11 @@ char templates[] = {
"}"
};
+static inline IDirect3DRMMeshImpl *impl_from_IDirect3DRMMesh(IDirect3DRMMesh *iface)
+{
+ return CONTAINING_RECORD(iface, IDirect3DRMMeshImpl, IDirect3DRMMesh_iface);
+}
+
static inline IDirect3DRMMeshBuilderImpl *impl_from_IDirect3DRMMeshBuilder2(IDirect3DRMMeshBuilder2 *iface)
{
return CONTAINING_RECORD(iface, IDirect3DRMMeshBuilderImpl, IDirect3DRMMeshBuilder2_iface);
@@ -839,9 +851,9 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_CreateMesh(IDirect3DRMMeshBuil
{
IDirect3DRMMeshBuilderImpl *This = impl_from_IDirect3DRMMeshBuilder2(iface);
- FIXME("(%p)->(%p): stub\n", This, ppMesh);
+ TRACE("(%p)->(%p)\n", This, ppMesh);
- return E_NOTIMPL;
+ return Direct3DRMMesh_create(ppMesh);
}
static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_GenerateNormals2(IDirect3DRMMeshBuilder2* iface,
@@ -1745,9 +1757,9 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_CreateMesh(IDirect3DRMMeshBuil
{
IDirect3DRMMeshBuilderImpl *This = impl_from_IDirect3DRMMeshBuilder3(iface);
- FIXME("(%p)->(%p): stub\n", This, Mesh);
+ TRACE("(%p)->(%p)\n", This, Mesh);
- return E_NOTIMPL;
+ return Direct3DRMMesh_create(Mesh);
}
static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_GetFace(IDirect3DRMMeshBuilder3* iface,
@@ -2071,3 +2083,382 @@ HRESULT Direct3DRMMeshBuilder_create(REFIID riid, IUnknown** ppObj)
return S_OK;
}
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI IDirect3DRMMeshImpl_QueryInterface(IDirect3DRMMesh* iface,
+ REFIID riid, void** ppvObject)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppvObject);
+
+ *ppvObject = NULL;
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IDirect3DRMMesh))
+ {
+ *ppvObject = &This->IDirect3DRMMesh_iface;
+ }
+ else
+ {
+ FIXME("interface %s not implemented\n", debugstr_guid(riid));
+ return E_NOINTERFACE;
+ }
+
+ IDirect3DRMMesh_AddRef(iface);
+ return S_OK;
+}
+
+static ULONG WINAPI IDirect3DRMMeshImpl_AddRef(IDirect3DRMMesh* iface)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+
+ TRACE("(%p): AddRef from %d\n", This, ref - 1);
+
+ return ref;
+}
+
+static ULONG WINAPI IDirect3DRMMeshImpl_Release(IDirect3DRMMesh* iface)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p): ReleaseRef to %d\n", This, ref);
+
+ if (!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+/*** IDirect3DRMObject methods ***/
+static HRESULT WINAPI IDirect3DRMMeshImpl_Clone(IDirect3DRMMesh* iface,
+ LPUNKNOWN pUnkOuter, REFIID riid,
+ LPVOID *ppvObj)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p,%s,%p): stub\n", This, pUnkOuter, debugstr_guid(riid), ppvObj);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_AddDestroyCallback(IDirect3DRMMesh* iface,
+ D3DRMOBJECTCALLBACK cb,
+ LPVOID argument)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p,%p): stub\n", This, cb, argument);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_DeleteDestroyCallback(IDirect3DRMMesh* iface,
+ D3DRMOBJECTCALLBACK cb,
+ LPVOID argument)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p,%p): stub\n", This, cb, argument);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetAppData(IDirect3DRMMesh* iface,
+ DWORD data)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u): stub\n", This, data);
+
+ return E_NOTIMPL;
+}
+
+static DWORD WINAPI IDirect3DRMMeshImpl_GetAppData(IDirect3DRMMesh* iface)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(): stub\n", This);
+
+ return 0;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetName(IDirect3DRMMesh* iface,
+ LPCSTR pName)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%s): stub\n", This, pName);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetName(IDirect3DRMMesh* iface,
+ LPDWORD lpdwSize, LPSTR lpName)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p,%p): stub\n", This, lpdwSize, lpName);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetClassName(IDirect3DRMMesh* iface,
+ LPDWORD lpdwSize, LPSTR lpName)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p,%p): stub\n", This, lpdwSize, lpName);
+
+ return E_NOTIMPL;
+}
+
+/*** IDirect3DRMMesh methods ***/
+static HRESULT WINAPI IDirect3DRMMeshImpl_Scale(IDirect3DRMMesh* iface,
+ D3DVALUE sx, D3DVALUE sy, D3DVALUE sz)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%f,%f,%f): stub\n", This, sx, sy,sz);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_Translate(IDirect3DRMMesh* iface,
+ D3DVALUE tx, D3DVALUE ty, D3DVALUE tz)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%f,%f,%f): stub\n", This, tx, ty,tz);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetBox(IDirect3DRMMesh* iface,
+ D3DRMBOX * box)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%p): stub\n", This, box);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_AddGroup(IDirect3DRMMesh* iface,
+ unsigned vCount, unsigned fCount, unsigned vPerFace,
+ unsigned *fData, D3DRMGROUPINDEX *returnId)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%u,%u,%p,%p): stub\n", This, vCount, fCount, vPerFace, fData, returnId);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetVertices(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, unsigned index, unsigned count,
+ D3DRMVERTEX *values)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%u,%u,%p): stub\n", This, id, index, count, values);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupColor(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, D3DCOLOR value)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%x): stub\n", This, id, value);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupColorRGB(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, D3DVALUE red, D3DVALUE green, D3DVALUE blue)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%f,%f,%f): stub\n", This, id, red, green, blue);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupMapping(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, D3DRMMAPPING value)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%u): stub\n", This, id, value);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupQuality(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, D3DRMRENDERQUALITY value)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%u): stub\n", This, id, value);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupMaterial(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL value)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%p): stub\n", This, id, value);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_SetGroupTexture(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE value)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%p): stub\n", This, id, value);
+
+ return E_NOTIMPL;
+}
+
+static DWORD WINAPI IDirect3DRMMeshImpl_GetGroupCount(IDirect3DRMMesh* iface)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(): stub\n", This);
+
+ return 0;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetGroup(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, unsigned *vCount, unsigned *fCount, unsigned *vPerFace,
+ DWORD *fDataSize, unsigned *fData)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%p,%p,%p,%p,%p): stub\n", This, id, vCount, fCount, vPerFace, fDataSize, fData);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetVertices(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, DWORD index, DWORD count, D3DRMVERTEX *returnPtr)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%u,%u,%p): stub\n", This, id, index, count, returnPtr);
+
+ return E_NOTIMPL;
+}
+
+static D3DCOLOR WINAPI IDirect3DRMMeshImpl_GetGroupColor(IDirect3DRMMesh* iface, D3DRMGROUPINDEX id)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u): stub\n", This, id);
+
+ return 0;
+}
+
+static D3DRMMAPPING WINAPI IDirect3DRMMeshImpl_GetGroupMapping(IDirect3DRMMesh* iface, D3DRMGROUPINDEX id)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u): stub\n", This, id);
+
+ return 0;
+}
+static D3DRMRENDERQUALITY WINAPI IDirect3DRMMeshImpl_GetGroupQuality(IDirect3DRMMesh* iface, D3DRMGROUPINDEX id)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u): stub\n", This, id);
+
+ return 0;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetGroupMaterial(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, LPDIRECT3DRMMATERIAL *returnPtr)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%p): stub\n", This, id, returnPtr);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IDirect3DRMMeshImpl_GetGroupTexture(IDirect3DRMMesh* iface,
+ D3DRMGROUPINDEX id, LPDIRECT3DRMTEXTURE *returnPtr)
+{
+ IDirect3DRMMeshImpl *This = impl_from_IDirect3DRMMesh(iface);
+
+ FIXME("(%p)->(%u,%p): stub\n", This, id, returnPtr);
+
+ return E_NOTIMPL;
+}
+
+static const struct IDirect3DRMMeshVtbl Direct3DRMMesh_Vtbl =
+{
+ /*** IUnknown methods ***/
+ IDirect3DRMMeshImpl_QueryInterface,
+ IDirect3DRMMeshImpl_AddRef,
+ IDirect3DRMMeshImpl_Release,
+ /*** IDirect3DRMObject methods ***/
+ IDirect3DRMMeshImpl_Clone,
+ IDirect3DRMMeshImpl_AddDestroyCallback,
+ IDirect3DRMMeshImpl_DeleteDestroyCallback,
+ IDirect3DRMMeshImpl_SetAppData,
+ IDirect3DRMMeshImpl_GetAppData,
+ IDirect3DRMMeshImpl_SetName,
+ IDirect3DRMMeshImpl_GetName,
+ IDirect3DRMMeshImpl_GetClassName,
+ /*** IDirect3DRMMesh methods ***/
+ IDirect3DRMMeshImpl_Scale,
+ IDirect3DRMMeshImpl_Translate,
+ IDirect3DRMMeshImpl_GetBox,
+ IDirect3DRMMeshImpl_AddGroup,
+ IDirect3DRMMeshImpl_SetVertices,
+ IDirect3DRMMeshImpl_SetGroupColor,
+ IDirect3DRMMeshImpl_SetGroupColorRGB,
+ IDirect3DRMMeshImpl_SetGroupMapping,
+ IDirect3DRMMeshImpl_SetGroupQuality,
+ IDirect3DRMMeshImpl_SetGroupMaterial,
+ IDirect3DRMMeshImpl_SetGroupTexture,
+ IDirect3DRMMeshImpl_GetGroupCount,
+ IDirect3DRMMeshImpl_GetGroup,
+ IDirect3DRMMeshImpl_GetVertices,
+ IDirect3DRMMeshImpl_GetGroupColor,
+ IDirect3DRMMeshImpl_GetGroupMapping,
+ IDirect3DRMMeshImpl_GetGroupQuality,
+ IDirect3DRMMeshImpl_GetGroupMaterial,
+ IDirect3DRMMeshImpl_GetGroupTexture
+};
+
+static HRESULT Direct3DRMMesh_create(IDirect3DRMMesh** obj)
+{
+ IDirect3DRMMeshImpl* object;
+
+ TRACE("(%p)\n", obj);
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DRMMeshImpl));
+ if (!object)
+ {
+ ERR("Out of memory\n");
+ return E_OUTOFMEMORY;
+ }
+
+ object->IDirect3DRMMesh_iface.lpVtbl = &Direct3DRMMesh_Vtbl;
+ object->ref = 1;
+
+ *obj = &object->IDirect3DRMMesh_iface;
+
+ return S_OK;
+}
+
More information about the wine-patches
mailing list