Merging r48810 through r48812 from trunk into soc-2011-tomato
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 10 Jul 2012 15:47:39 +0000 (15:47 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 10 Jul 2012 15:47:39 +0000 (15:47 +0000)
1  2 
source/blender/blenloader/intern/readfile.c

index 366099a98a51025c7f662018f73bd63389a4b606,14860509d81002285b39e870d0a6c7b758171754..8779e99b635fcc30329e31d3afbd8e659cca982d
@@@ -1090,10 -1090,6 +1090,10 @@@ void blo_freefiledata(FileData *fd
                        oldnewmap_free(fd->imamap);
                if (fd->movieclipmap)
                        oldnewmap_free(fd->movieclipmap);
 +#ifdef USE_MANGO_MASK_CACHE_HACK
 +              if (fd->maskmap)
 +                      oldnewmap_free(fd->maskmap);
 +#endif
                if (fd->libmap && !(fd->flags & FD_FLAGS_NOT_MY_LIBMAP))
                        oldnewmap_free(fd->libmap);
                if (fd->bheadmap)
@@@ -1178,15 -1174,6 +1178,15 @@@ static void *newmclipadr(FileData *fd, 
        return NULL;
  }
  
 +#ifdef USE_MANGO_MASK_CACHE_HACK
 +static void *newmaskadr(FileData *fd, void *adr)              /* used to restore mask data after undo */
 +{
 +      if (fd->maskmap && adr)
 +              return oldnewmap_lookup_and_inc(fd->maskmap, adr);
 +      return NULL;
 +}
 +#endif
 +
  
  static void *newlibadr(FileData *fd, void *lib, void *adr)            /* only lib data */
  {
@@@ -1382,38 -1369,6 +1382,38 @@@ void blo_end_movieclip_pointer_map(File
        }
  }
  
 +#ifdef USE_MANGO_MASK_CACHE_HACK
 +void blo_make_mask_pointer_map(FileData *fd, Main *oldmain)
 +{
 +      Mask *mask;
 +
 +      fd->maskmap = oldnewmap_new();
 +
 +      for (mask = oldmain->mask.first; mask; mask = mask->id.next) {
 +              if (mask->raster_cache)
 +                      oldnewmap_insert(fd->maskmap, mask->raster_cache, mask->raster_cache, 0);
 +      }
 +}
 +
 +/* set old main mask caches to zero if it has been restored */
 +/* this works because freeing old main only happens after this call */
 +void blo_end_mask_pointer_map(FileData *fd, Main *oldmain)
 +{
 +      OldNew *entry = fd->maskmap->entries;
 +      Mask *mask;
 +      int i;
 +
 +      /* used entries were restored, so we put them to zero */
 +      for (i = 0; i < fd->maskmap->nentries; i++, entry++) {
 +              if (entry->nr > 0)
 +                      entry->newp = NULL;
 +      }
 +
 +      for (mask = oldmain->mask.first; mask; mask = mask->id.next) {
 +              mask->raster_cache = newmclipadr(fd, mask->raster_cache);
 +      }
 +}
 +#endif
  
  /* undo file support: add all library pointers in lookup */
  void blo_add_library_pointer_map(ListBase *mainlist, FileData *fd)
@@@ -6297,11 -6252,6 +6297,11 @@@ static void direct_link_mask(FileData *
  {
        MaskLayer *masklay;
  
 +#ifdef USE_MANGO_MASK_CACHE_HACK
 +      if (fd->maskmap) mask->raster_cache = newmaskadr(fd, mask->raster_cache);
 +      else mask->raster_cache = NULL;
 +#endif
 +
        mask->adt = newdataadr(fd, mask->adt);
  
        link_list(fd, &mask->masklayers);
@@@ -7890,7 -7840,7 +7890,7 @@@ static void do_versions(FileData *fd, L
                        ntreetype->foreach_nodetree(main, NULL, do_version_ntree_dilateerode_264);
        }
  
-       {
+       if (main->versionfile < 263 || (main->versionfile == 263 && main->subversionfile < 14)) {
                bNodeTreeType *ntreetype = ntreeGetType(NTREE_COMPOSIT);
  
                if (ntreetype && ntreetype->foreach_nodetree)
@@@ -8093,7 -8043,7 +8093,7 @@@ BlendFileData *blo_read_file_internal(F
        fix_relpaths_library(fd->relabase, bfd->main); /* make all relative paths, relative to the open blend file */
        
        link_global(fd, bfd);   /* as last */
 -      
 +
        return bfd;
  }