Changeset 671 for libcaca


Ignore:
Timestamp:
Mar 22, 2006, 9:10:14 PM (15 years ago)
Author:
Sam Hocevar
Message:
  • Optimise cucul_blit() by using memcpy() if there is no mask.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/canvas.c

    r670 r671  
    276276    int i, j, starti, startj, endi, endj;
    277277
    278     if(src->width != mask->width || src->height != mask->height)
     278    if(mask && (src->width != mask->width || src->height != mask->height))
    279279        return;
    280280
     
    284284    endj = (y + src->height >= dst->height) ? dst->height - y : src->height;
    285285
     286    if(starti >= endi || startj >= endj)
     287        return;
     288
    286289    for(j = startj; j < endj; j++)
    287290    {
    288         for(i = starti; i < endi; i++)
     291        if(mask)
    289292        {
    290             if(mask && mask->chars[j * src->width + i] == (uint32_t)' ')
    291                 continue;
    292 
    293             dst->chars[(j + y) * dst->width + (i + x)]
    294                                            = src->chars[j * src->width + i];
    295             dst->attr[(j + y) * dst->width + (i + x)]
    296                                            = src->attr[j * src->width + i];
     293            for(i = starti; i < endi; i++)
     294            {
     295                if(mask->chars[j * src->width + i] == (uint32_t)' ')
     296                    continue;
     297
     298                dst->chars[(j + y) * dst->width + (i + x)]
     299                                             = src->chars[j * src->width + i];
     300                dst->attr[(j + y) * dst->width + (i + x)]
     301                                             = src->attr[j * src->width + i];
     302            }
     303        }
     304        else
     305        {
     306            memcpy(dst->chars + (j + y) * dst->width + starti + x,
     307                   src->chars + j * src->width + starti,
     308                   (endi - starti) * 4);
     309            memcpy(dst->attr + (j + y) * dst->width + starti + x,
     310                   src->attr + j * src->width + starti,
     311                   (endi - starti) * 1);
    297312        }
    298313    }
Note: See TracChangeset for help on using the changeset viewer.