--- dlls/wined3d/surface.c | 25 +++++++++++++++---------- 1 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 4b91d1f..48e13fe 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -3276,6 +3276,17 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * SourceRectangle.top = 0; SourceRectangle.bottom = Src->currentDesc.Height; } + + /* When blitting from an offscreen surface to a rendertarget, the source + * surface is not required to have a palette. Our rendering / conversion + * code further down the road retrieves the palette from the surface, so + * it must have a palette set. */ + if((Src->resource.format == WINED3DFMT_P8) && (Src->palette == NULL)) { + paletteOverride = TRUE; + TRACE("Source surface (%p) lacks palette, overriding palette with palette %p of destination surface (%p)\n", Src, This->palette, This); + Src->palette = This->palette; + } + if (wined3d_settings.offscreen_rendering_mode == ORM_FBO && GL_SUPPORT(EXT_FRAMEBUFFER_BLIT) && (Flags & (WINEDDBLT_KEYSRC | WINEDDBLT_KEYSRCOVERRIDE)) == 0) { TRACE("Using stretch_rect_fbo\n"); @@ -3284,6 +3295,10 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * */ stretch_rect_fbo((IWineD3DDevice *)myDevice, SrcSurface, (WINED3DRECT *) &SourceRectangle, (IWineD3DSurface *)This, &rect, Filter, FALSE); + + /* Clear the palette as the surface didn't have a palette attached, it would confuse GetPalette and other calls */ + if(paletteOverride) + Src->palette = NULL; return WINED3D_OK; } @@ -3313,16 +3328,6 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, RECT * Src->CKeyFlags &= ~WINEDDSD_CKSRCBLT; } - /* When blitting from an offscreen surface to a rendertarget, the source - * surface is not required to have a palette. Our rendering / conversion - * code further down the road retrieves the palette from the surface, so - * it must have a palette set. */ - if((Src->resource.format == WINED3DFMT_P8) && (Src->palette == NULL)) { - paletteOverride = TRUE; - TRACE("Source surface (%p) lacks palette, overriding palette with palette %p of destination surface (%p)\n", Src, This->palette, This); - Src->palette = This->palette; - } - /* Now load the surface */ IWineD3DSurface_PreLoad((IWineD3DSurface *) Src);