Ignore:
Timestamp:
Jul 19, 2009, 10:37:12 PM (10 years ago)
Author:
Pascal Terjan
Message:
  • When blitting, only add dirty rectangles on changed lines, or on changed chars if we have a mask
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/string.c

    r3554 r3556  
    449449                    continue;
    450450
    451                 dst->chars[dstix + i] = src->chars[srcix + i];
    452                 dst->attrs[dstix + i] = src->attrs[srcix + i];
     451                if(dst->chars[dstix + i] != src->chars[srcix + i] ||
     452                   dst->attrs[dstix + i] != src->attrs[srcix + i])
     453                {
     454                    dst->chars[dstix + i] = src->chars[srcix + i];
     455                    dst->attrs[dstix + i] = src->attrs[srcix + i];
     456                    caca_add_dirty_rect(dst, x + starti + i, y + j, 1, 1);
     457                }
    453458            }
    454459        }
    455460        else
    456461        {
    457             memcpy(dst->chars + dstix, src->chars + srcix, stride * 4);
    458             memcpy(dst->attrs + dstix, src->attrs + srcix, stride * 4);
     462            if(memcmp(dst->chars + dstix, src->chars + srcix, stride * 4) ||
     463               memcmp(dst->attrs + dstix, src->attrs + srcix, stride * 4))
     464            {
     465                /* FIXME be more precise ? */
     466                memcpy(dst->chars + dstix, src->chars + srcix, stride * 4);
     467                memcpy(dst->attrs + dstix, src->attrs + srcix, stride * 4);
     468                caca_add_dirty_rect(dst, x + starti, y + j, stride, 1);
     469            }
    459470        }
    460471
     
    467478    }
    468479
    469     caca_add_dirty_rect(dst, starti + x - bleed_left, startj + y,
    470                         endi - starti + bleed_left + bleed_right,
    471                         endj - startj);
    472480
    473481    return 0;
Note: See TracChangeset for help on using the changeset viewer.