[PATCH 7/8] d3dx9_36: COM cleanup for the ID3DXMesh iface.

Michael Stefaniuc mstefani at redhat.de
Wed Jan 26 17:34:55 CST 2011


---
 dlls/d3dx9_36/d3dx9_36_private.h |   18 --------
 dlls/d3dx9_36/mesh.c             |   83 +++++++++++++++++++++++--------------
 2 files changed, 51 insertions(+), 50 deletions(-)

diff --git a/dlls/d3dx9_36/d3dx9_36_private.h b/dlls/d3dx9_36/d3dx9_36_private.h
index 5632ae1..f93317a 100644
--- a/dlls/d3dx9_36/d3dx9_36_private.h
+++ b/dlls/d3dx9_36/d3dx9_36_private.h
@@ -50,24 +50,6 @@ HRESULT load_resource_into_memory(HMODULE module, HRSRC resinfo, LPVOID *buffer,
 const PixelFormatDesc *get_format_info(D3DFORMAT format);
 const PixelFormatDesc *get_format_info_idx(int idx);
 
-/* ID3DXMesh */
-typedef struct ID3DXMeshImpl
-{
-    /* IUnknown fields */
-    const ID3DXMeshVtbl *lpVtbl;
-    LONG ref;
-
-    /* ID3DXMesh fields */
-    DWORD numfaces;
-    DWORD numvertices;
-    DWORD options;
-    DWORD fvf;
-    IDirect3DDevice9 *device;
-    IDirect3DVertexDeclaration9 *vertex_declaration;
-    IDirect3DVertexBuffer9 *vertex_buffer;
-    IDirect3DIndexBuffer9 *index_buffer;
-} ID3DXMeshImpl;
-
 /*ID3DXSprite */
 typedef struct _SPRITE {
     LPDIRECT3DTEXTURE9 texture;
diff --git a/dlls/d3dx9_36/mesh.c b/dlls/d3dx9_36/mesh.c
index bbcbf13..6a74442 100644
--- a/dlls/d3dx9_36/mesh.c
+++ b/dlls/d3dx9_36/mesh.c
@@ -33,10 +33,29 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
 
-/*** IUnknown methods ***/
+typedef struct ID3DXMeshImpl
+{
+    ID3DXMesh ID3DXMesh_iface;
+    LONG ref;
+
+    DWORD numfaces;
+    DWORD numvertices;
+    DWORD options;
+    DWORD fvf;
+    IDirect3DDevice9 *device;
+    IDirect3DVertexDeclaration9 *vertex_declaration;
+    IDirect3DVertexBuffer9 *vertex_buffer;
+    IDirect3DIndexBuffer9 *index_buffer;
+} ID3DXMeshImpl;
+
+static inline ID3DXMeshImpl *impl_from_ID3DXMesh(ID3DXMesh *iface)
+{
+    return CONTAINING_RECORD(iface, ID3DXMeshImpl, ID3DXMesh_iface);
+}
+
 static HRESULT WINAPI ID3DXMeshImpl_QueryInterface(ID3DXMesh *iface, REFIID riid, LPVOID *object)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), object);
 
@@ -56,7 +75,7 @@ static HRESULT WINAPI ID3DXMeshImpl_QueryInterface(ID3DXMesh *iface, REFIID riid
 
 static ULONG WINAPI ID3DXMeshImpl_AddRef(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(): AddRef from %d\n", This, This->ref);
 
@@ -65,7 +84,7 @@ static ULONG WINAPI ID3DXMeshImpl_AddRef(ID3DXMesh *iface)
 
 static ULONG WINAPI ID3DXMeshImpl_Release(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
 
     TRACE("(%p)->(): Release from %d\n", This, ref + 1);
@@ -85,7 +104,7 @@ static ULONG WINAPI ID3DXMeshImpl_Release(ID3DXMesh *iface)
 /*** ID3DXBaseMesh ***/
 static HRESULT WINAPI ID3DXMeshImpl_DrawSubset(ID3DXMesh *iface, DWORD attrib_id)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u): stub\n", This, attrib_id);
 
@@ -94,7 +113,7 @@ static HRESULT WINAPI ID3DXMeshImpl_DrawSubset(ID3DXMesh *iface, DWORD attrib_id
 
 static DWORD WINAPI ID3DXMeshImpl_GetNumFaces(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -103,7 +122,7 @@ static DWORD WINAPI ID3DXMeshImpl_GetNumFaces(ID3DXMesh *iface)
 
 static DWORD WINAPI ID3DXMeshImpl_GetNumVertices(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -112,7 +131,7 @@ static DWORD WINAPI ID3DXMeshImpl_GetNumVertices(ID3DXMesh *iface)
 
 static DWORD WINAPI ID3DXMeshImpl_GetFVF(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -121,7 +140,7 @@ static DWORD WINAPI ID3DXMeshImpl_GetFVF(ID3DXMesh *iface)
 
 static HRESULT WINAPI ID3DXMeshImpl_GetDeclaration(ID3DXMesh *iface, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
     UINT numelements;
 
     TRACE("(%p)\n", This);
@@ -135,7 +154,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GetDeclaration(ID3DXMesh *iface, D3DVERTEXEL
 
 static DWORD WINAPI ID3DXMeshImpl_GetNumBytesPerVertex(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p): stub\n", This);
 
@@ -144,7 +163,7 @@ static DWORD WINAPI ID3DXMeshImpl_GetNumBytesPerVertex(ID3DXMesh *iface)
 
 static DWORD WINAPI ID3DXMeshImpl_GetOptions(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -153,7 +172,7 @@ static DWORD WINAPI ID3DXMeshImpl_GetOptions(ID3DXMesh *iface)
 
 static HRESULT WINAPI ID3DXMeshImpl_GetDevice(ID3DXMesh *iface, LPDIRECT3DDEVICE9 *device)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%p)\n", This, device);
 
@@ -166,7 +185,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GetDevice(ID3DXMesh *iface, LPDIRECT3DDEVICE
 
 static HRESULT WINAPI ID3DXMeshImpl_CloneMeshFVF(ID3DXMesh *iface, DWORD options, DWORD fvf, LPDIRECT3DDEVICE9 device, LPD3DXMESH *clone_mesh)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u,%u,%p,%p): stub\n", This, options, fvf, device, clone_mesh);
 
@@ -176,7 +195,7 @@ static HRESULT WINAPI ID3DXMeshImpl_CloneMeshFVF(ID3DXMesh *iface, DWORD options
 static HRESULT WINAPI ID3DXMeshImpl_CloneMesh(ID3DXMesh *iface, DWORD options, CONST D3DVERTEXELEMENT9 *declaration, LPDIRECT3DDEVICE9 device,
                                               LPD3DXMESH *clone_mesh)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u,%p,%p,%p): stub\n", This, options, declaration, device, clone_mesh);
 
@@ -185,7 +204,7 @@ static HRESULT WINAPI ID3DXMeshImpl_CloneMesh(ID3DXMesh *iface, DWORD options, C
 
 static HRESULT WINAPI ID3DXMeshImpl_GetVertexBuffer(ID3DXMesh *iface, LPDIRECT3DVERTEXBUFFER9 *vertex_buffer)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%p)\n", This, vertex_buffer);
 
@@ -198,7 +217,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GetVertexBuffer(ID3DXMesh *iface, LPDIRECT3D
 
 static HRESULT WINAPI ID3DXMeshImpl_GetIndexBuffer(ID3DXMesh *iface, LPDIRECT3DINDEXBUFFER9 *index_buffer)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%p)\n", This, index_buffer);
 
@@ -211,7 +230,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GetIndexBuffer(ID3DXMesh *iface, LPDIRECT3DI
 
 static HRESULT WINAPI ID3DXMeshImpl_LockVertexBuffer(ID3DXMesh *iface, DWORD flags, LPVOID *data)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%u,%p)\n", This, flags, data);
 
@@ -220,7 +239,7 @@ static HRESULT WINAPI ID3DXMeshImpl_LockVertexBuffer(ID3DXMesh *iface, DWORD fla
 
 static HRESULT WINAPI ID3DXMeshImpl_UnlockVertexBuffer(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -229,7 +248,7 @@ static HRESULT WINAPI ID3DXMeshImpl_UnlockVertexBuffer(ID3DXMesh *iface)
 
 static HRESULT WINAPI ID3DXMeshImpl_LockIndexBuffer(ID3DXMesh *iface, DWORD flags, LPVOID *data)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)->(%u,%p)\n", This, flags, data);
 
@@ -238,7 +257,7 @@ static HRESULT WINAPI ID3DXMeshImpl_LockIndexBuffer(ID3DXMesh *iface, DWORD flag
 
 static HRESULT WINAPI ID3DXMeshImpl_UnlockIndexBuffer(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     TRACE("(%p)\n", This);
 
@@ -247,7 +266,7 @@ static HRESULT WINAPI ID3DXMeshImpl_UnlockIndexBuffer(ID3DXMesh *iface)
 
 static HRESULT WINAPI ID3DXMeshImpl_GetAttributeTable(ID3DXMesh *iface, D3DXATTRIBUTERANGE *attrib_table, DWORD *attrib_table_size)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%p,%p): stub\n", This, attrib_table, attrib_table_size);
 
@@ -256,7 +275,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GetAttributeTable(ID3DXMesh *iface, D3DXATTR
 
 static HRESULT WINAPI ID3DXMeshImpl_ConvertPointRepsToAdjacency(ID3DXMesh *iface, CONST DWORD *point_reps, DWORD *adjacency)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%p,%p): stub\n", This, point_reps, adjacency);
 
@@ -265,7 +284,7 @@ static HRESULT WINAPI ID3DXMeshImpl_ConvertPointRepsToAdjacency(ID3DXMesh *iface
 
 static HRESULT WINAPI ID3DXMeshImpl_ConvertAdjacencyToPointReps(ID3DXMesh *iface, CONST DWORD *adjacency, DWORD *point_reps)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%p,%p): stub\n", This, adjacency, point_reps);
 
@@ -274,7 +293,7 @@ static HRESULT WINAPI ID3DXMeshImpl_ConvertAdjacencyToPointReps(ID3DXMesh *iface
 
 static HRESULT WINAPI ID3DXMeshImpl_GenerateAdjacency(ID3DXMesh *iface, FLOAT epsilon, DWORD *adjacency)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%f,%p): stub\n", This, epsilon, adjacency);
 
@@ -283,7 +302,7 @@ static HRESULT WINAPI ID3DXMeshImpl_GenerateAdjacency(ID3DXMesh *iface, FLOAT ep
 
 static HRESULT WINAPI ID3DXMeshImpl_UpdateSemantics(ID3DXMesh *iface, D3DVERTEXELEMENT9 declaration[MAX_FVF_DECL_SIZE])
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%p): stub\n", This, declaration);
 
@@ -293,7 +312,7 @@ static HRESULT WINAPI ID3DXMeshImpl_UpdateSemantics(ID3DXMesh *iface, D3DVERTEXE
 /*** ID3DXMesh ***/
 static HRESULT WINAPI ID3DXMeshImpl_LockAttributeBuffer(ID3DXMesh *iface, DWORD flags, DWORD **data)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u,%p): stub\n", This, flags, data);
 
@@ -302,7 +321,7 @@ static HRESULT WINAPI ID3DXMeshImpl_LockAttributeBuffer(ID3DXMesh *iface, DWORD
 
 static HRESULT WINAPI ID3DXMeshImpl_UnlockAttributeBuffer(ID3DXMesh *iface)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p): stub\n", This);
 
@@ -312,7 +331,7 @@ static HRESULT WINAPI ID3DXMeshImpl_UnlockAttributeBuffer(ID3DXMesh *iface)
 static HRESULT WINAPI ID3DXMeshImpl_Optimize(ID3DXMesh *iface, DWORD flags, CONST DWORD *adjacency_in, DWORD *adjacency_out,
                                              DWORD *face_remap, LPD3DXBUFFER *vertex_remap, LPD3DXMESH *opt_mesh)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u,%p,%p,%p,%p,%p): stub\n", This, flags, adjacency_in, adjacency_out, face_remap, vertex_remap, opt_mesh);
 
@@ -322,7 +341,7 @@ static HRESULT WINAPI ID3DXMeshImpl_Optimize(ID3DXMesh *iface, DWORD flags, CONS
 static HRESULT WINAPI ID3DXMeshImpl_OptimizeInplace(ID3DXMesh *iface, DWORD flags, CONST DWORD *adjacency_in, DWORD *adjacency_out,
                                                     DWORD *face_remap, LPD3DXBUFFER *vertex_remap)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%u,%p,%p,%p,%p): stub\n", This, flags, adjacency_in, adjacency_out, face_remap, vertex_remap);
 
@@ -331,7 +350,7 @@ static HRESULT WINAPI ID3DXMeshImpl_OptimizeInplace(ID3DXMesh *iface, DWORD flag
 
 static HRESULT WINAPI ID3DXMeshImpl_SetAttributeTable(ID3DXMesh *iface, CONST D3DXATTRIBUTERANGE *attrib_table, DWORD attrib_table_size)
 {
-    ID3DXMeshImpl *This = (ID3DXMeshImpl *)iface;
+    ID3DXMeshImpl *This = impl_from_ID3DXMesh(iface);
 
     FIXME("(%p)->(%p,%u): stub\n", This, attrib_table, attrib_table_size);
 
@@ -1019,7 +1038,7 @@ HRESULT WINAPI D3DXCreateMesh(DWORD numfaces, DWORD numvertices, DWORD options,
         *mesh = NULL;
         return E_OUTOFMEMORY;
     }
-    object->lpVtbl = &D3DXMesh_Vtbl;
+    object->ID3DXMesh_iface.lpVtbl = &D3DXMesh_Vtbl;
     object->ref = 1;
 
     object->numfaces = numfaces;
@@ -1033,7 +1052,7 @@ HRESULT WINAPI D3DXCreateMesh(DWORD numfaces, DWORD numvertices, DWORD options,
     object->vertex_buffer = vertex_buffer;
     object->index_buffer = index_buffer;
 
-    *mesh = (ID3DXMesh*)object;
+    *mesh = &object->ID3DXMesh_iface;
 
     return D3D_OK;
 }
-- 
1.7.3.5



More information about the wine-patches mailing list