SDL_BlitSurface causes memory leak on MacOS X

When I use SDL_BlitSurface on Mac OS X it seems to cause a memory leak, it’s probably in some way related to the way I’m using Blit but anyway I needed a quick hack to get round the problem, performance is not really an issue so I just wrote a function to write the points to the screen one by one:

There are a bunch of things this version doesn’t do that SDL_BlitSurface does, so beware. It ignores src_rec (just like SDL_BlitSurface would if it were NULL), and it does no conversion to insure source and dest are the same format (so you’ll have to convert the surfaces first).

void SlowBlitSurface(SDL_Surface *source,SDL_Rect *src_rec,SDL_Surface *dest,SDL_Rect *dest_rec) {

  int sbpp = source->format->BytesPerPixel;
  int dbpp = dest->format->BytesPerPixel;
  for(size_t x=0;x<source->w;x++) {
    for(size_t y=0;y<source->h;y++) {
      Uint8 *p = (Uint8 *)source->pixels + (((y * source->w) + x) * sbpp);
      Uint32 pval = *(Uint32 *) p;
      Uint8 *d = (Uint8 *)dest->pixels   + ((((dest_rec->y+y) * (dest->w)) + (dest_rec->x+x)) * dbpp);
      *((Uint32 *) d) = pval;
    }
  }
}

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>