svn merge ^/trunk/blender -r49118:49143
authorCampbell Barton <ideasman42@gmail.com>
Mon, 23 Jul 2012 15:03:54 +0000 (15:03 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 23 Jul 2012 15:03:54 +0000 (15:03 +0000)
1  2 
intern/cycles/blender/blender_sync.cpp
intern/cycles/blender/blender_sync.h
source/blender/blenkernel/intern/scene.c
source/blender/blenloader/intern/readfile.c
source/blender/makesrna/intern/rna_userdef.c

index bc35e6dc5c94e37755aa36ba8971da58469499ce,ae28453a69684858ac2db3d63718c2f338f54a70..bab467746c782c5aff80828c94d55b7b0a757885
@@@ -40,9 -40,8 +40,9 @@@ CCL_NAMESPACE_BEGI
  
  /* Constructor */
  
 -BlenderSync::BlenderSync(BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_)
 -: b_data(b_data_), b_scene(b_scene_),
 +BlenderSync::BlenderSync(BL::RenderEngine b_engine_, BL::BlendData b_data_, BL::Scene b_scene_, Scene *scene_, bool preview_)
 +: b_engine(b_engine_),
 +  b_data(b_data_), b_scene(b_scene_),
    shader_map(&scene_->shaders),
    object_map(&scene_->objects),
    mesh_map(&scene_->meshes),
@@@ -220,7 -219,9 +220,9 @@@ void BlenderSync::sync_render_layers(BL
                        layer = layername.c_str();
                }
                else {
+                       render_layer.use_localview = (b_v3d.local_view() ? true : false);
                        render_layer.scene_layer = get_layer(b_v3d.layers(), b_v3d.layers_local_view());
+                       CYCLES_LOCAL_LAYER_HACK(render_layer.use_localview, render_layer.scene_layer);
                        render_layer.layer = render_layer.scene_layer;
                        render_layer.holdout_layer = 0;
                        render_layer.material_override = PointerRNA_NULL;
                        render_layer.material_override = b_rlay->material_override();
                        render_layer.use_background = b_rlay->use_sky();
                        render_layer.use_viewport_visibility = false;
+                       render_layer.use_localview = false;
                        render_layer.samples = b_rlay->samples();
                }
  
@@@ -285,7 -287,7 +288,7 @@@ bool BlenderSync::get_session_pause(BL:
        return (background)? false: get_boolean(cscene, "preview_pause");
  }
  
 -SessionParams BlenderSync::get_session_params(BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
 +SessionParams BlenderSync::get_session_params(BL::RenderEngine b_engine, BL::UserPreferences b_userpref, BL::Scene b_scene, bool background)
  {
        SessionParams params;
        PointerRNA cscene = RNA_pointer_get(&b_scene.ptr, "cycles");
                }
        }
  
 +      /* tiles */
 +      int tile_x = b_engine.tile_x();
 +      int tile_y = b_engine.tile_y();
 +
 +      if(tile_x == 0 || tile_y == 0) {
 +              tile_x = get_int(cscene, "debug_tile_size");
 +              tile_y = tile_x;
 +
 +              params.tile_size = make_int2(tile_x, tile_y);
 +              params.min_size = get_int(cscene, "debug_min_size");
 +      }
 +      else {
 +              params.tile_size = make_int2(tile_x, tile_y);
 +              params.min_size = min(tile_x, tile_y);
 +      }
 +
        /* other parameters */
        params.threads = b_scene.render().threads();
 -      params.tile_size = get_int(cscene, "debug_tile_size");
 -      params.min_size = get_int(cscene, "debug_min_size");
 +
        params.cancel_timeout = get_float(cscene, "debug_cancel_timeout");
        params.reset_timeout = get_float(cscene, "debug_reset_timeout");
        params.text_timeout = get_float(cscene, "debug_text_timeout");
  
        if(background) {
 -              params.progressive = true;
 +              params.progressive = false;
                params.min_size = INT_MAX;
        }
        else
                params.progressive = true;
        
 -      /* todo: multi device only works with single tiles now */
 -      if(params.device.type == DEVICE_MULTI)
 -              params.tile_size = INT_MAX;
 -
        return params;
  }
  
index dcfb7c6d6227e56412866cd8d103701cc1b4607c,1a6c04db10c184f9c09c8658ce006cca1a67d012..8a8452b75d9dda689341460a637e2ee461e5c6ca
@@@ -49,7 -49,7 +49,7 @@@ class ShaderNode
  
  class BlenderSync {
  public:
 -      BlenderSync(BL::BlendData b_data, BL::Scene b_scene, Scene *scene_, bool preview_);
 +      BlenderSync(BL::RenderEngine b_engine_, BL::BlendData b_data, BL::Scene b_scene, Scene *scene_, bool preview_);
        ~BlenderSync();
  
        /* sync */
@@@ -61,7 -61,7 +61,7 @@@
  
        /* get parameters */
        static SceneParams get_scene_params(BL::Scene b_scene, bool background);
 -      static SessionParams get_session_params(BL::UserPreferences b_userpref, BL::Scene b_scene, bool background);
 +      static SessionParams get_session_params(BL::RenderEngine b_engine, BL::UserPreferences b_userpref, BL::Scene b_scene, bool background);
        static bool get_session_pause(BL::Scene b_scene, bool background);
        static BufferParams get_buffer_params(BL::Scene b_scene, Camera *cam, int width, int height);
  
@@@ -96,7 -96,6 +96,7 @@@ private
        int object_count_particles(BL::Object b_ob);
  
        /* variables */
 +      BL::RenderEngine b_engine;
        BL::BlendData b_data;
        BL::Scene b_scene;
  
                BL::Material material_override;
                bool use_background;
                bool use_viewport_visibility;
+               bool use_localview;
                int samples;
        } render_layer;
  };
  
+ /* we don't have spare bits for localview (normally 20-28)
+  * because PATH_RAY_LAYER_SHIFT uses 20-32.
+  * So - check if we have localview and if so, shift local
+  * view bits down to 1-8, since this is done for the view
+  * port only - it should be OK and not conflict with
+  * render layers. - Campbell.
+  *
+  * ... as an alternative we could use uint64_t
+  */
+ #define CYCLES_LOCAL_LAYER_HACK(use_localview, layer)   \
+       if (use_localview) {                                \
+               layer >>= 20;                                   \
+       } (void)0
  CCL_NAMESPACE_END
  
  #endif /* __BLENDER_SYNC_H__ */
index 960713fd5d198427625fd52fd43c56d83f59df16,185bee86f694a868cd7b671f6b798aef8ed0435f..a9ae1b81d96496aa656365d9edb3d68c0c67aa45
@@@ -57,7 -57,6 +57,7 @@@
  
  #include "BKE_anim.h"
  #include "BKE_animsys.h"
 +#include "BKE_colortools.h"
  #include "BKE_depsgraph.h"
  #include "BKE_global.h"
  #include "BKE_group.h"
@@@ -133,8 -132,6 +133,8 @@@ Scene *BKE_scene_copy(Scene *sce, int t
                MEM_freeN(scen->toolsettings);
        }
        else {
 +              ImageFormatData *im_format, *im_formatn;
 +
                scen = BKE_libblock_copy(&sce->id);
                BLI_duplicatelist(&(scen->base), &(sce->base));
                
                        obase = obase->next;
                        base = base->next;
                }
 +
 +              /* copy color management settings */
 +              im_format = &sce->r.im_format;
 +              im_formatn = &scen->r.im_format;
 +
 +              BKE_color_managed_display_settings_copy(&im_formatn->display_settings, &im_format->display_settings);
 +              BKE_color_managed_view_settings_copy(&im_formatn->view_settings, &im_format->view_settings);
        }
  
        /* tool settings */
@@@ -555,9 -545,6 +555,9 @@@ Scene *BKE_scene_add(const char *name
  
        sound_create_scene(sce);
  
 +      BKE_color_managed_display_settings_init(&sce->r.im_format.display_settings);
 +      BKE_color_managed_view_settings_init(&sce->r.im_format.view_settings);
 +
        return sce;
  }
  
@@@ -1031,6 -1018,11 +1031,11 @@@ void BKE_scene_update_tagged(Main *bmai
        DAG_ids_flush_tagged(bmain);
  
        scene->physics_settings.quick_cache_step = 0;
+       
+       /* clear "LIB_DOIT" flag from all materials, to prevent infinite recursion problems later 
+        * when trying to find materials with drivers that need evaluating [#32017] 
+        */
+       tag_main_idcode(bmain, ID_MA, FALSE);
  
        /* update all objects: drivers, matrices, displists, etc. flags set
         * by depgraph or manual, no layer check here, gets correct flushed
index 37fccfebe822e7377381aef879f8331f76e6843f,ffc62135607ee1cc0d2f75e72a4f6c68c6e4e44a..fbeab9c6d3f878cba9d77888ce837da27e52e568
@@@ -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)
@@@ -1958,14 -1913,25 +1958,25 @@@ static void direct_link_fcurves(FileDat
                /* group */
                fcu->grp = newdataadr(fd, fcu->grp);
                
+               /* clear disabled flag - allows disabled drivers to be tried again ([#32155]),
+                * but also means that another method for "reviving disabled F-Curves" exists
+                */
+               fcu->flag &= ~FCURVE_DISABLED;
+               
                /* driver */
                fcu->driver= newdataadr(fd, fcu->driver);
                if (fcu->driver) {
                        ChannelDriver *driver= fcu->driver;
                        DriverVar *dvar;
                        
+                       /* compiled expression data will need to be regenerated (old pointer may still be set here) */
                        driver->expr_comp = NULL;
                        
+                       /* give the driver a fresh chance - the operating environment may be different now 
+                        * (addons, etc. may be different) so the driver namespace may be sane now [#32155]
+                        */
+                       driver->flag &= ~DRIVER_FLAG_INVALID;
+                       
                        /* relink variables, targets and their paths */
                        link_list(fd, &driver->variables);
                        for (dvar= driver->variables.first; dvar; dvar= dvar->next) {
@@@ -6301,11 -6267,6 +6312,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);
@@@ -8097,7 -8058,7 +8108,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;
  }
  
index c8784aa997131160fbbbffb879f95ca5cabe074a,aa239db459bf81f9d8acb994abe5ee1218a0ce7d..53a8616cb85f15e27deaf6c7f11d2e80e2f102de
@@@ -2981,6 -2981,7 +2981,7 @@@ static void rna_def_userdef_system(Blen
                { 8, "FRENCH", 0, "French (Français)", "fr_FR"},
                { 4, "ITALIAN", 0, "Italian (Italiano)", "it_IT"},
                { 2, "JAPANESE", 0, "Japanese (日本語)", "ja_JP"},
+               {12, "PORTUGUESE", 0, "Portuguese (Português)", "pt"},
                {15, "RUSSIAN", 0, "Russian (Русский)", "ru_RU"},
                {13, "SIMPLIFIED_CHINESE", 0, "Simplified Chinese (简体中文)", "zh_CN"},
                { 9, "SPANISH", 0, "Spanish (Español)", "es"},
                /* using the utf8 flipped form of Persian (فارسی) */
                {26, "PERSIAN", 0, "Persian (ﯽﺳﺭﺎﻓ)", "fa_IR"},
                {19, "POLISH", 0, "Polish (Polski)", "pl_PL"},
-               {12, "BRAZILIAN_PORTUGUESE", 0, "Portuguese (Português)", "pt"},
  /*            {20, "ROMANIAN", 0, "Romanian (Român)", "ro_RO"}, */ /* XXX No po's yet. */
                {17, "SERBIAN", 0, "Serbian (Српски)", "sr_RS"},
                {28, "SERBIAN_LATIN", 0, "Serbian latin (Srpski latinica)", "sr_RS@latin"},
@@@ -3445,7 -3445,7 +3445,7 @@@ static void rna_def_userdef_filepaths(B
        StructRNA *srna;
        
        static EnumPropertyItem anim_player_presets[] = {
 -              /*{0, "INTERNAL", 0, "Internal", "Built-in animation player"},   *//* doesn't work yet! */
 +              {0, "INTERNAL", 0, "Internal", "Built-in animation player"}, /* doesn't work yet! */
                {1, "BLENDER24", 0, "Blender 2.4", "Blender command line animation playback - path to Blender 2.4"},
                {2, "DJV", 0, "Djv", "Open source frame player: http://djv.sourceforge.net"},
                {3, "FRAMECYCLER", 0, "FrameCycler", "Frame player from IRIDAS"},