Stefan Doesinger : wined3d: Properly free srgb textures.

Alexandre Julliard julliard at winehq.org
Thu Jun 18 09:11:33 CDT 2009


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

Author: Stefan Doesinger <stefan at codeweavers.com>
Date:   Tue Jun  9 23:01:02 2009 -0700

wined3d: Properly free srgb textures.

---

 dlls/wined3d/basetexture.c |   22 ++++++++--------------
 dlls/wined3d/surface.c     |    2 ++
 2 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/dlls/wined3d/basetexture.c b/dlls/wined3d/basetexture.c
index aeec963..547ed1e 100644
--- a/dlls/wined3d/basetexture.c
+++ b/dlls/wined3d/basetexture.c
@@ -53,19 +53,7 @@ HRESULT basetexture_init(IWineD3DBaseTextureImpl *texture, UINT levels, WINED3DR
 
 void basetexture_cleanup(IWineD3DBaseTexture *iface)
 {
-    IWineD3DBaseTextureImpl *This = (IWineD3DBaseTextureImpl *)iface;
-    IWineD3DDeviceImpl *device = This->resource.wineD3DDevice;
-
-    TRACE("(%p) : textureName(%d)\n", This, This->baseTexture.textureName);
-    if (This->baseTexture.textureName != 0) {
-        ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
-        ENTER_GL();
-        TRACE("(%p) : Deleting texture %d\n", This, This->baseTexture.textureName);
-        glDeleteTextures(1, &This->baseTexture.textureName);
-        glDeleteTextures(1, &This->baseTexture.srgbTextureName);
-        LEAVE_GL();
-    }
-
+    basetexture_unload(iface);
     resource_cleanup((IWineD3DResource *)iface);
 }
 
@@ -78,8 +66,14 @@ void basetexture_unload(IWineD3DBaseTexture *iface)
         ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
         ENTER_GL();
         glDeleteTextures(1, &This->baseTexture.textureName);
-        glDeleteTextures(1, &This->baseTexture.srgbTextureName);
         This->baseTexture.textureName = 0;
+        LEAVE_GL();
+    }
+
+    if(This->baseTexture.srgbTextureName) {
+        ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD);
+        ENTER_GL();
+        glDeleteTextures(1, &This->baseTexture.srgbTextureName);
         This->baseTexture.srgbTextureName = 0;
         LEAVE_GL();
     }
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 400a652..58893f2 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -892,6 +892,8 @@ static void WINAPI IWineD3DSurfaceImpl_UnLoad(IWineD3DSurface *iface) {
         ENTER_GL();
         glDeleteTextures(1, &This->glDescription.textureName);
         This->glDescription.textureName = 0;
+        glDeleteTextures(1, &This->glDescription.srgbTextureName);
+        This->glDescription.srgbTextureName = 0;
         LEAVE_GL();
     } else {
         IWineD3DBaseTexture_Release(texture);




More information about the wine-cvs mailing list