Depsgraph: Introduce ID recalc flag for COW component
Currently unused, but will become handy to check whether ID needs to have COW update to be run.
This commit is contained in:
@@ -155,6 +155,7 @@ BLI_INLINE void flush_handle_component_node(Depsgraph *graph,
|
|||||||
ComponentDepsNode *cow_comp =
|
ComponentDepsNode *cow_comp =
|
||||||
id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE);
|
id_node->find_component(DEG_NODE_TYPE_COPY_ON_WRITE);
|
||||||
cow_comp->tag_update(graph);
|
cow_comp->tag_update(graph);
|
||||||
|
id_node->id_orig->recalc |= ID_RECALC_COPY_ON_WRITE;
|
||||||
}
|
}
|
||||||
/* Tag all required operations in component for update. */
|
/* Tag all required operations in component for update. */
|
||||||
foreach (OperationDepsNode *op, comp_node->operations) {
|
foreach (OperationDepsNode *op, comp_node->operations) {
|
||||||
@@ -168,7 +169,7 @@ BLI_INLINE void flush_handle_component_node(Depsgraph *graph,
|
|||||||
}
|
}
|
||||||
op->flag |= DEPSOP_FLAG_NEEDS_UPDATE;
|
op->flag |= DEPSOP_FLAG_NEEDS_UPDATE;
|
||||||
}
|
}
|
||||||
/* When some target changes bone, we might need to re-run the
|
/* when some target changes bone, we might need to re-run the
|
||||||
* whole IK solver, otherwise result might be unpredictable.
|
* whole IK solver, otherwise result might be unpredictable.
|
||||||
*/
|
*/
|
||||||
if (comp_node->type == DEG_NODE_TYPE_BONE) {
|
if (comp_node->type == DEG_NODE_TYPE_BONE) {
|
||||||
|
|||||||
@@ -381,7 +381,7 @@ DEG_COMPONENT_NODE_DEFINE(Animation, ANIMATION, ID_RECALC_ANIMA
|
|||||||
DEG_COMPONENT_NODE_DEFINE(BatchCache, BATCH_CACHE, ID_RECALC_DRAW_CACHE);
|
DEG_COMPONENT_NODE_DEFINE(BatchCache, BATCH_CACHE, ID_RECALC_DRAW_CACHE);
|
||||||
DEG_COMPONENT_NODE_DEFINE(Bone, BONE, ID_RECALC_GEOMETRY);
|
DEG_COMPONENT_NODE_DEFINE(Bone, BONE, ID_RECALC_GEOMETRY);
|
||||||
DEG_COMPONENT_NODE_DEFINE(Cache, CACHE, ID_RECALC);
|
DEG_COMPONENT_NODE_DEFINE(Cache, CACHE, ID_RECALC);
|
||||||
DEG_COMPONENT_NODE_DEFINE(CopyOnWrite, COPY_ON_WRITE, ID_RECALC);
|
DEG_COMPONENT_NODE_DEFINE(CopyOnWrite, COPY_ON_WRITE, ID_RECALC_COPY_ON_WRITE);
|
||||||
DEG_COMPONENT_NODE_DEFINE(Geometry, GEOMETRY, ID_RECALC_GEOMETRY);
|
DEG_COMPONENT_NODE_DEFINE(Geometry, GEOMETRY, ID_RECALC_GEOMETRY);
|
||||||
DEG_COMPONENT_NODE_DEFINE(LayerCollections, LAYER_COLLECTIONS, ID_RECALC_COLLECTIONS);
|
DEG_COMPONENT_NODE_DEFINE(LayerCollections, LAYER_COLLECTIONS, ID_RECALC_COLLECTIONS);
|
||||||
DEG_COMPONENT_NODE_DEFINE(Parameters, PARAMETERS, ID_RECALC);
|
DEG_COMPONENT_NODE_DEFINE(Parameters, PARAMETERS, ID_RECALC);
|
||||||
|
|||||||
@@ -472,6 +472,7 @@ enum {
|
|||||||
ID_RECALC_GEOMETRY = 1 << 4,
|
ID_RECALC_GEOMETRY = 1 << 4,
|
||||||
ID_RECALC_TRANSFORM = 1 << 5,
|
ID_RECALC_TRANSFORM = 1 << 5,
|
||||||
ID_RECALC_COLLECTIONS = 1 << 6,
|
ID_RECALC_COLLECTIONS = 1 << 6,
|
||||||
|
ID_RECALC_COPY_ON_WRITE = 1 << 7,
|
||||||
/* Special flag to check if SOMETHING was changed. */
|
/* Special flag to check if SOMETHING was changed. */
|
||||||
ID_RECALC_ALL = (~(int)0),
|
ID_RECALC_ALL = (~(int)0),
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user