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