From 38a4f6339b75528334abb808c426555d0f29b9d4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Stefan=20D=C3=B6singer?= Date: Tue, 8 Jan 2008 15:40:35 +0100 Subject: [PATCH] wined3d: Implement IWineD3DCubeTexture::UnLoad. --- dlls/wined3d/cubetexture.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/dlls/wined3d/cubetexture.c b/dlls/wined3d/cubetexture.c index 8560ab0d58b..6704b1737d0 100644 --- a/dlls/wined3d/cubetexture.c +++ b/dlls/wined3d/cubetexture.c @@ -159,7 +159,29 @@ static void WINAPI IWineD3DCubeTextureImpl_PreLoad(IWineD3DCubeTexture *iface) { } static void WINAPI IWineD3DCubeTextureImpl_UnLoad(IWineD3DCubeTexture *iface) { - IWineD3DResourceImpl_UnLoad((IWineD3DResource *)iface); + unsigned int i, j; + IWineD3DCubeTextureImpl *This = (IWineD3DCubeTextureImpl *)iface; + IWineD3DDeviceImpl *device = This->resource.wineD3DDevice; + TRACE("(%p)\n", This); + + /* Unload all the surfaces and reset the texture name. If UnLoad was called on the + * surface before, this one will be a NOP and vice versa. Unloading an unloaded + * surface is fine + */ + for (i = 0; i < This->baseTexture.levels; i++) { + for (j = WINED3DCUBEMAP_FACE_POSITIVE_X; j <= WINED3DCUBEMAP_FACE_NEGATIVE_Z ; j++) { + IWineD3DSurface_UnLoad(This->surfaces[j][i]); + IWineD3DSurface_SetGlTextureDesc(This->surfaces[j][i], 0, IWineD3DTexture_GetTextureDimensions(iface)); + } + } + + if(This->baseTexture.textureName) { + ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + ENTER_GL(); + glDeleteTextures(1, &This->baseTexture.textureName); + This->baseTexture.textureName = 0; + LEAVE_GL(); + } } static WINED3DRESOURCETYPE WINAPI IWineD3DCubeTextureImpl_GetType(IWineD3DCubeTexture *iface) { -- 2.11.4.GIT