--- Lionel Ulmer <[EMAIL PROTECTED]> wrote:

> Hi all,
> 
> AoE2 was rendering to a 8 bit off-screen DSurface using GetDC / ReleaseDC
> and that without having attached a palette to it... Our DIB engine did not
> like this at all which made all fonts come out black.
> 
> The attached patch ('hack' :-) ) simply takes the palette of the front
> buffer (if any) and attach it to the DIB before rendering to it.
> 
> Note that the proper fix would be in the DIB engine itself but I have no
> idea how to (nor the means to) fix it there (if possible using the X11
> engine we currently have).

Hi,

Does this fix bug http://bugs.winehq.org/show_bug.cgi?id=2666 including the 
problems with
warblade?

Oliver.
>         Lionel
> 
> Changelog:
>  - use the front buffer palette for DC operations on off-screen buffers
> 
> -- 
>                Lionel Ulmer - http://www.bbrox.org/
> > Index: dlls/ddraw/surface_main.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/ddraw/surface_main.c,v
> retrieving revision 1.8
> diff -u -r1.8 surface_main.c
> --- dlls/ddraw/surface_main.c 10 Nov 2005 12:14:59 -0000      1.8
> +++ dlls/ddraw/surface_main.c 13 Nov 2005 14:08:56 -0000
> @@ -900,6 +900,31 @@
>      }
>  
>      hr = This->get_dc(This, &This->hDC);
> +
> +    if ((This->surface_desc.u4.ddpfPixelFormat.dwFlags & 
> DDPF_PALETTEINDEXED8) &&
> +     (This->palette == NULL)) {
> +     IDirectDrawImpl *ddraw = This->ddraw_owner;
> +     IDirectDrawSurfaceImpl *surf;
> +     
> +     for (surf = ddraw->surfaces; surf != NULL; surf = surf->next_ddraw) {
> +         if (((surf->surface_desc.ddsCaps.dwCaps & (DDSCAPS_PRIMARYSURFACE | 
> DDSCAPS_FRONTBUFFER))
> == (DDSCAPS_PRIMARYSURFACE | DDSCAPS_FRONTBUFFER)) &&
> +             (surf->palette != NULL)) {
> +             RGBQUAD col[256];
> +             IDirectDrawPaletteImpl *pal = surf->palette;
> +             unsigned int n;
> +             for (n=0; n<256; n++) {
> +                 col[n].rgbRed   = pal->palents[n].peRed;
> +                 col[n].rgbGreen = pal->palents[n].peGreen;
> +                 col[n].rgbBlue  = pal->palents[n].peBlue;
> +                 col[n].rgbReserved = 0;
> +             }
> +             SetDIBColorTable(This->hDC, 0, 256, col);
> +             break;
> +         }
> +     }
> +
> +    }
> +    
>      if (SUCCEEDED(hr))
>      {
>       TRACE("returning %p\n",This->hDC);
> > 
> 



                
___________________________________________________________ 
To help you stay safe and secure online, we've developed the all new Yahoo! 
Security Centre. http://uk.security.yahoo.com


Reply via email to