diff --git a/dlls/wined3d/basetexture.c b/dlls/wined3d/basetexture.c index 26940f4340b..ffc01e8fa7a 100644 --- a/dlls/wined3d/basetexture.c +++ b/dlls/wined3d/basetexture.c @@ -389,7 +389,7 @@ void WINAPI IWineD3DBaseTextureImpl_ApplyStateChanges(IWineD3DBaseTexture *iface GLint textureDimensions = IWineD3DBaseTexture_GetTextureDimensions(iface); BOOL cond_np2 = IWineD3DBaseTexture_IsCondNP2(iface); - IWineD3DBaseTexture_PreLoad(iface); + /* ApplyStateChanges relies on the correct texture being bound and loaded. */ if(samplerStates[WINED3DSAMP_ADDRESSU] != This->baseTexture.states[WINED3DTEXSTA_ADDRESSU]) { state = samplerStates[WINED3DSAMP_ADDRESSU]; diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 9e0cf4f70ca..1c05dc9ab98 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -5875,6 +5875,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_UpdateSurface(IWineD3DDevice *iface, /* Make sure the surface is loaded and up to date */ IWineD3DSurface_PreLoad(pDestinationSurface); + IWineD3DSurface_BindTexture(pDestinationSurface); IWineD3DSurface_GetGlDesc(pDestinationSurface, &glDescription); diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 358ad141d8b..355996bb9bc 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -3487,6 +3487,7 @@ static void sampler(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCont if(stateblock->textures[sampler]) { IWineD3DBaseTexture_PreLoad(stateblock->textures[sampler]); + IWineD3DBaseTexture_BindTexture(stateblock->textures[sampler]); IWineD3DBaseTexture_ApplyStateChanges(stateblock->textures[sampler], stateblock->textureState[sampler], stateblock->samplerState[sampler]); if (GL_SUPPORT(EXT_TEXTURE_LOD_BIAS)) { diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 49e5c12555b..7b522f831c6 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -2452,6 +2452,7 @@ HRESULT WINAPI IWineD3DSurfaceImpl_SaveSnapshot(IWineD3DSurface *iface, const ch } else { /* bind the real texture, and make sure it up to date */ IWineD3DSurface_PreLoad(iface); + surface_bind_and_dirtify(This); } allocatedMemory = HeapAlloc(GetProcessHeap(), 0, width * height * 4); ENTER_GL();