Henri Verbeet : wined3d: Create a texture_cleanup() function.

Alexandre Julliard julliard at winehq.org
Tue Jun 2 08:44:33 CDT 2009


Module: wine
Branch: master
Commit: 22022cf8b322c050fe60bedc472555876091e040
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=22022cf8b322c050fe60bedc472555876091e040

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Tue Jun  2 09:01:17 2009 +0200

wined3d: Create a texture_cleanup() function.

---

 dlls/wined3d/texture.c |   39 +++++++++++++++++++++++++--------------
 1 files changed, 25 insertions(+), 14 deletions(-)

diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index 5981a33..5e50e26 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -27,6 +27,30 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d_texture);
 #define GLINFO_LOCATION This->resource.wineD3DDevice->adapter->gl_info
 
+static void texture_cleanup(IWineD3DTextureImpl *This, D3DCB_DESTROYSURFACEFN surface_destroy_cb)
+{
+    unsigned int i;
+
+    TRACE("(%p) : Cleaning up\n", This);
+
+    for (i = 0; i < This->baseTexture.levels; ++i)
+    {
+        if (This->surfaces[i])
+        {
+            /* Clean out the texture name we gave to the surface so that the
+             * surface doesn't try and release it */
+            surface_set_texture_name(This->surfaces[i], 0, TRUE);
+            surface_set_texture_name(This->surfaces[i], 0, FALSE);
+            surface_set_texture_target(This->surfaces[i], 0);
+            IWineD3DSurface_SetContainer(This->surfaces[i], 0);
+            surface_destroy_cb(This->surfaces[i]);
+        }
+    }
+
+    TRACE("(%p) : Cleaning up base texture\n", This);
+    basetexture_cleanup((IWineD3DBaseTexture *)This);
+}
+
 /* *******************************************
    IWineD3DTexture IUnknown parts follow
    ******************************************* */
@@ -276,21 +300,8 @@ static BOOL WINAPI IWineD3DTextureImpl_IsCondNP2(IWineD3DTexture *iface) {
    ******************************************* */
 static void WINAPI IWineD3DTextureImpl_Destroy(IWineD3DTexture *iface, D3DCB_DESTROYSURFACEFN D3DCB_DestroySurface) {
     IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
-    unsigned int i;
 
-    TRACE("(%p) : Cleaning up\n",This);
-    for (i = 0; i < This->baseTexture.levels; i++) {
-        if (This->surfaces[i] != NULL) {
-            /* Clean out the texture name we gave to the surface so that the surface doesn't try and release it */
-            surface_set_texture_name(This->surfaces[i], 0, TRUE);
-            surface_set_texture_name(This->surfaces[i], 0, FALSE);
-            surface_set_texture_target(This->surfaces[i], 0);
-            IWineD3DSurface_SetContainer(This->surfaces[i], 0);
-            D3DCB_DestroySurface(This->surfaces[i]);
-        }
-    }
-    TRACE("(%p) : cleaning up base texture\n", This);
-    basetexture_cleanup((IWineD3DBaseTexture *)iface);
+    texture_cleanup(This, D3DCB_DestroySurface);
     /* free the object */
     HeapFree(GetProcessHeap(), 0, This);
 }




More information about the wine-cvs mailing list