Merge branch 'master' into blender2.8
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 20 Mar 2018 15:55:16 +0000 (16:55 +0100)
committerSergey Sharybin <sergey.vfx@gmail.com>
Tue, 20 Mar 2018 15:55:16 +0000 (16:55 +0100)
1  2 
source/blender/blenkernel/intern/cachefile.c
source/blender/depsgraph/intern/depsgraph_types.h
source/blender/depsgraph/util/deg_util_function.h

index f8215668034be3add7946591ef25392448465c71,8b7118db151b2bb641e749450e41aebf43198192..aebec3dfeedd3b58ea8a76ad694f2fdda1d0b5dc
@@@ -176,12 -176,11 +176,11 @@@ void BKE_cachefile_update_frame(Main *b
                const float time = BKE_cachefile_time_offset(cache_file, ctime, fps);
  
                if (BKE_cachefile_filepath_get(bmain, cache_file, time, filename)) {
 -                      BKE_cachefile_clean(scene, cache_file);
 +                      BKE_cachefile_clean(bmain, cache_file);
  #ifdef WITH_ALEMBIC
                        ABC_free_handle(cache_file->handle);
                        cache_file->handle = ABC_create_handle(filename, NULL);
  #endif
-                       break;
                }
        }
  }
@@@ -217,9 -216,11 +216,9 @@@ float BKE_cachefile_time_offset(CacheFi
  }
  
  /* TODO(kevin): replace this with some depsgraph mechanism, or something similar. */
 -void BKE_cachefile_clean(Scene *scene, CacheFile *cache_file)
 +void BKE_cachefile_clean(struct Main *bmain, CacheFile *cache_file)
  {
 -      for (Base *base = scene->base.first; base; base = base->next) {
 -              Object *ob = base->object;
 -
 +      for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
                ModifierData *md = modifiers_findByType(ob, eModifierType_MeshSequenceCache);
  
                if (md) {
index f8699186866f2c2a83a84ec38ee39086c98ae97c,0e48be6b1e2633578d49acfecfa5d155e040a24e..b4a0dde1f350ee4322177631ed552edc80afa0c3
@@@ -43,6 -43,7 +43,7 @@@
   */
  #include <string>
  #include <vector>
+ #include <algorithm>
  
  struct bAction;
  struct ChannelDriver;
@@@ -53,10 -54,8 +54,10 @@@ struct FCurve
  
  namespace DEG {
  
 +/* TODO(sergey): Find a better place for this. */
  using std::string;
  using std::vector;
 +using std::max;
  
  /* Evaluation Operation for atomic operation */
  // XXX: move this to another header that can be exposed?
@@@ -81,18 -80,6 +82,18 @@@ typedef enum eDepsNode_Class 
        DEG_NODE_CLASS_OPERATION       = 2,
  } eDepsNode_Class;
  
 +/* Note: We use max comparison to mark an id node that is linked more than once
 + * So keep this enum ordered accordingly.
 + */
 +typedef enum eDepsNode_LinkedState_Type {
 +      /* Generic indirectly linked id node. */
 +      DEG_ID_LINKED_INDIRECTLY       = 0,
 +      /* Id node present in the set (background) only. */
 +      DEG_ID_LINKED_VIA_SET          = 1,
 +      /* Id node directly linked via the ScenLayer. */
 +      DEG_ID_LINKED_DIRECTLY         = 2,
 +} eDepsNode_LinkedState_Type;
 +
  /* Types of Nodes */
  typedef enum eDepsNode_Type {
        /* Fallback type for invalid return value */
        DEG_NODE_TYPE_GEOMETRY,
        /* Sequencer Component (Scene Only) */
        DEG_NODE_TYPE_SEQUENCER,
 +      /* Component which contains all operations needed for layer collections
 +       * evaluation.
 +       */
 +      DEG_NODE_TYPE_LAYER_COLLECTIONS,
 +      /* Entry component of majority of ID nodes: prepares CoW pointers for
 +       * execution.
 +       */
 +      DEG_NODE_TYPE_COPY_ON_WRITE,
  
        /* **** Evaluation-Related Outer Types (with Subdata) **** */
  
        DEG_NODE_TYPE_EVAL_PARTICLES,
        /* Material Shading Component */
        DEG_NODE_TYPE_SHADING,
 +      DEG_NODE_TYPE_SHADING_PARAMETERS,
        /* Cache Component */
        DEG_NODE_TYPE_CACHE,
 +      /* Batch Cache Component */
 +      DEG_NODE_TYPE_BATCH_CACHE,
  
        /* Total number of meaningful node types. */
        NUM_DEG_NODE_TYPES,
@@@ -174,9 -150,6 +175,9 @@@ typedef enum eDepsOperation_Code 
        /* Driver */
        DEG_OPCODE_DRIVER,
  
 +      /* Object related. --------------------------------- */
 +      DEG_OPCODE_OBJECT_BASE_FLAGS,
 +
        /* Transform. -------------------------------------- */
        /* Transform entry point - local transforms only */
        DEG_OPCODE_TRANSFORM_LOCAL,
        /* Particle System evaluation. */
        DEG_OPCODE_PARTICLE_SYSTEM_EVAL_INIT,
        DEG_OPCODE_PARTICLE_SYSTEM_EVAL,
 +      DEG_OPCODE_PARTICLE_SETTINGS_EVAL,
 +      DEG_OPCODE_PARTICLE_SETTINGS_RECALC_CLEAR,
 +
 +      /* Point Cache. ------------------------------------- */
 +      DEG_OPCODE_POINT_CACHE_RESET,
 +
 +      /* Collections. ------------------------------------- */
 +      DEG_OPCODE_VIEW_LAYER_INIT,
 +      DEG_OPCODE_VIEW_LAYER_EVAL,
 +      DEG_OPCODE_VIEW_LAYER_DONE,
 +
 +      /* Copy on Write. ------------------------------------ */
 +      DEG_OPCODE_COPY_ON_WRITE,
  
        /* Shading. ------------------------------------------- */
        DEG_OPCODE_SHADING,
 +      DEG_OPCODE_MATERIAL_UPDATE,
 +      DEG_OPCODE_WORLD_UPDATE,
 +
 +      /* Batch caches. -------------------------------------- */
 +      DEG_OPCODE_GEOMETRY_SELECT_UPDATE,
  
        /* Masks. ------------------------------------------ */
        DEG_OPCODE_MASK_ANIMATION,
index da31bb037f9b0269e90684daec60576adb07de5e,63cd1d6f5eb960e735f2f6ef4564cb5cb86b76c0..96f52147fe760bef2ae338dfacec99ba3b98afef
@@@ -30,7 -30,7 +30,7 @@@
  
  #pragma once
  
- #if (__cplusplus > 199711L)
+ #if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800)
  
  #include <functional>
  
@@@ -47,5 -47,64 +47,5 @@@ using boost::function
  #define function_bind boost::bind
  
  #else
 -
 -#pragma message("No available function binding implementation. Using stub instead, disabling new depsgraph")
 -
 -#ifndef WITH_LEGACY_DEPSGRAPH
 -#  error "Unable to build new depsgraph and legacy one is disabled."
 -#endif
 -
 -#define DISABLE_NEW_DEPSGRAPH
 -
 -#include "BLI_utildefines.h"
 -#include <cstdlib>
 -
 -template<typename T>
 -class function {
 -public:
 -      function() {};
 -      function(void *) {}
 -      operator bool() const { return false; }
 -      bool operator== (void *) { return false; }
 -
 -      template<typename T1>
 -      void operator() (T1) {
 -              BLI_assert(!"Should not be used");
 -      }
 -};
 -
 -class Wrap {
 -public:
 -      Wrap() {}
 -      template <typename T>
 -      Wrap(T /*arg*/) {}
 -};
 -
 -template <typename T>
 -void *function_bind(T func,
 -                    Wrap arg1 = Wrap(),
 -                    Wrap arg2 = Wrap(),
 -                    Wrap arg3 = Wrap(),
 -                    Wrap arg4 = Wrap(),
 -                    Wrap arg5 = Wrap(),
 -                    Wrap arg6 = Wrap(),
 -                    Wrap arg7 = Wrap())
 -{
 -      BLI_assert(!"Should not be used");
 -      (void)func;
 -      (void)arg1;
 -      (void)arg2;
 -      (void)arg3;
 -      (void)arg4;
 -      (void)arg5;
 -      (void)arg6;
 -      (void)arg7;
 -      return NULL;
 -}
 -
 -#define _1 Wrap()
 -#define _2 Wrap()
 -#define _3 Wrap()
 -#define _4 Wrap()
 -
 +#  error "Depsgraph requires either Boost or C++11 for function bindings."
  #endif