From 7d5285acc12c5b5f52fdaababd9d4e2ab60b3a85 Mon Sep 17 00:00:00 2001 From: Stefan Doesinger Date: Tue, 9 Jun 2009 23:01:02 -0700 Subject: [PATCH] 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 aeec963e170..547ed1e1bb1 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 400a652d4ac..58893f2e28b 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);