> Change log: added support for 24bpp when  the flags 
> DDBLT_KEYSRC/DDBLT_KEYDEST and company are set.

Well, I have the following comment :

> +         case 3: {
> +             int last_sy = -1;
> +             for (y = sy = 0; y < dstheight; y++, sy += yinc) {
> +                 sbuf = sbase + (sy >> 16) * sdesc.u1.lPitch;
> +                 if ((sy >> 16) == (last_sy >> 16)) {
> +                     /* this sourcerow is the same as last sourcerow -
> +                      * copy already stretched row
> +                      */
> +                     memcpy(dbuf, dbuf - ddesc.u1.lPitch, width);

Are you sure that this works ? If you have pixels in the destination surface
that are NOT overwritten by the source surface (due to color-keying) you
should not copy these from one line to the other.

> +                 } else {
> +                     LPBYTE s,d = dbuf;
> +                     for (x = sx = 0; x < dstwidth; x++, sx+= xinc) {
> +                         DWORD pixel;
> +
> +                         s = sbuf+3*(sx>>16);
> +                         pixel = (s[0]<<16)|(s[1]<<8)|s[2];
> +                            if (pixel < keylow || pixel > keyhigh){
> +                            d[0] = (pixel>>16)&0xff;
> +                            d[1] = (pixel>> 8)&0xff;
> +                            d[2] = (pixel    )&0xff;
> +                            d+=3;

Why only increase the destination pixel when the color is not keyed off ?

> +                            }
> +                     }
> +                 }
> +                 dbuf += ddesc.u1.lPitch;
> +                 last_sy = sy;
> +                }
> +                break;}

The rest of the patch looks OK :)

By the way, which game uses 24 bpp ? It's *EVIL* :-)

                           Lionel

-- 
                 Lionel Ulmer - http://www.bbrox.org/

Reply via email to