Christian Costa : d3drm: Move mesh builder data cleaning code into a separate function.
Alexandre Julliard
julliard at winehq.org
Wed Oct 31 17:17:21 CDT 2012
Module: wine
Branch: master
Commit: de690b8dae171ceb893f1a0873fb59a6670be14d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=de690b8dae171ceb893f1a0873fb59a6670be14d
Author: Christian Costa <titan.costa at gmail.com>
Date: Wed Oct 31 09:56:15 2012 +0100
d3drm: Move mesh builder data cleaning code into a separate function.
---
dlls/d3drm/meshbuilder.c | 59 +++++++++++++++++----------------------------
1 files changed, 22 insertions(+), 37 deletions(-)
diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index c28cefd..9d3e67a 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -314,6 +314,25 @@ static inline IDirect3DRMMeshBuilderImpl *impl_from_IDirect3DRMMeshBuilder3(IDir
return CONTAINING_RECORD(iface, IDirect3DRMMeshBuilderImpl, IDirect3DRMMeshBuilder3_iface);
}
+static void clean_mesh_builder_data(IDirect3DRMMeshBuilderImpl *mesh_builder)
+{
+ HeapFree(GetProcessHeap(), 0, mesh_builder->name);
+ mesh_builder->name = NULL;
+ HeapFree(GetProcessHeap(), 0, mesh_builder->pVertices);
+ mesh_builder->pVertices = NULL;
+ mesh_builder->nb_vertices = 0;
+ HeapFree(GetProcessHeap(), 0, mesh_builder->pNormals);
+ mesh_builder->pNormals = NULL;
+ mesh_builder->nb_normals = 0;
+ HeapFree(GetProcessHeap(), 0, mesh_builder->pFaceData);
+ mesh_builder->pFaceData = NULL;
+ mesh_builder->face_data_size = 0;
+ mesh_builder->nb_faces = 0;
+ HeapFree(GetProcessHeap(), 0, mesh_builder->pCoords2d);
+ mesh_builder->pCoords2d = NULL;
+ mesh_builder->nb_coords2d = 0;
+}
+
/*** IUnknown methods ***/
static HRESULT WINAPI IDirect3DRMMeshBuilder2Impl_QueryInterface(IDirect3DRMMeshBuilder2* iface,
REFIID riid, void** ppvObject)
@@ -363,15 +382,11 @@ static ULONG WINAPI IDirect3DRMMeshBuilder2Impl_Release(IDirect3DRMMeshBuilder2*
if (!ref)
{
+ clean_mesh_builder_data(This);
if (This->material)
IDirect3DRMMaterial2_Release(This->material);
if (This->texture)
IDirect3DRMTexture3_Release(This->texture);
- HeapFree(GetProcessHeap(), 0, This->name);
- HeapFree(GetProcessHeap(), 0, This->pVertices);
- HeapFree(GetProcessHeap(), 0, This->pNormals);
- HeapFree(GetProcessHeap(), 0, This->pFaceData);
- HeapFree(GetProcessHeap(), 0, This->pCoords2d);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -1114,9 +1129,6 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3* iface, LPDIRECTXFILEDATA pData)
TRACE("(%p)->(%p)\n", This, pData);
- /* Remove previous name */
- HeapFree(GetProcessHeap(), 0, This->name);
- This->name = NULL;
hr = IDirectXFileData_GetName(pData, NULL, &size);
if (hr != DXFILE_OK)
return hr;
@@ -1128,11 +1140,7 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3* iface, LPDIRECTXFILEDATA pData)
hr = IDirectXFileData_GetName(pData, This->name, &size);
if (hr != DXFILE_OK)
- {
- HeapFree(GetProcessHeap(), 0, This->name);
- This->name = NULL;
return hr;
- }
}
TRACE("Mesh name is '%s'\n", This->name ? This->name : "");
@@ -1518,15 +1526,7 @@ static HRESULT WINAPI IDirect3DRMMeshBuilder3Impl_Load(IDirect3DRMMeshBuilder3*
TRACE("(%p)->(%p,%p,%x,%p,%p)\n", This, filename, name, loadflags, cb, arg);
- /* First free allocated buffers of previous mesh data */
- HeapFree(GetProcessHeap(), 0, This->pVertices);
- This->pVertices = NULL;
- HeapFree(GetProcessHeap(), 0, This->pNormals);
- This->pNormals = NULL;
- HeapFree(GetProcessHeap(), 0, This->pFaceData);
- This->pFaceData = NULL;
- HeapFree(GetProcessHeap(), 0, This->pCoords2d);
- This->pCoords2d = NULL;
+ clean_mesh_builder_data(This);
if (loadflags == D3DRMLOAD_FROMMEMORY)
{
@@ -1622,22 +1622,7 @@ end:
IDirectXFile_Release(pDXFile);
if (ret != D3DRM_OK)
- {
- /* Clean mesh data */
- This->nb_vertices = 0;
- This->nb_normals = 0;
- This->nb_faces = 0;
- This->face_data_size = 0;
- This->nb_coords2d = 0;
- HeapFree(GetProcessHeap(), 0, This->pVertices);
- This->pVertices = NULL;
- HeapFree(GetProcessHeap(), 0, This->pNormals);
- This->pNormals = NULL;
- HeapFree(GetProcessHeap(), 0, This->pFaceData);
- This->pFaceData = NULL;
- HeapFree(GetProcessHeap(), 0, This->pCoords2d);
- This->pCoords2d = NULL;
- }
+ clean_mesh_builder_data(This);
return ret;
}
More information about the wine-cvs
mailing list