Depsgraph: Pass base to build_object()
This commit is contained in:
@@ -127,7 +127,9 @@ static void modifier_walk(void *user_data,
|
||||
{
|
||||
BuilderWalkUserData *data = (BuilderWalkUserData *)user_data;
|
||||
if (*obpoin) {
|
||||
data->builder->build_object(*obpoin, DEG_ID_LINKED_INDIRECTLY);
|
||||
data->builder->build_object(NULL,
|
||||
*obpoin,
|
||||
DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +142,9 @@ void constraint_walk(bConstraint * /*con*/,
|
||||
if (*idpoin) {
|
||||
ID *id = *idpoin;
|
||||
if (GS(id->name) == ID_OB) {
|
||||
data->builder->build_object((Object *)id, DEG_ID_LINKED_INDIRECTLY);
|
||||
data->builder->build_object(NULL,
|
||||
(Object *)id,
|
||||
DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -392,13 +396,15 @@ void DepsgraphNodeBuilder::build_group(Group *group)
|
||||
group_id->tag |= LIB_TAG_DOIT;
|
||||
|
||||
LINKLIST_FOREACH (GroupObject *, go, &group->gobject) {
|
||||
build_object(go->ob, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, go->ob, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
}
|
||||
|
||||
void DepsgraphNodeBuilder::build_object(Object *object,
|
||||
void DepsgraphNodeBuilder::build_object(Base *base,
|
||||
Object *object,
|
||||
eDepsNode_LinkedState_Type linked_state)
|
||||
{
|
||||
(void)base;
|
||||
/* Skip rest of components if the ID node was already there. */
|
||||
if (object->id.tag & LIB_TAG_DOIT) {
|
||||
IDDepsNode *id_node = find_id_node(&object->id);
|
||||
@@ -406,17 +412,15 @@ void DepsgraphNodeBuilder::build_object(Object *object,
|
||||
return;
|
||||
}
|
||||
object->id.tag |= LIB_TAG_DOIT;
|
||||
|
||||
/* Create ID node for object and begin init. */
|
||||
IDDepsNode *id_node = add_id_node(&object->id);
|
||||
id_node->linked_state = linked_state;
|
||||
|
||||
object->customdata_mask = 0;
|
||||
/* Transform. */
|
||||
build_object_transform(object);
|
||||
/* Parent. */
|
||||
if (object->parent != NULL) {
|
||||
build_object(object->parent, linked_state);
|
||||
build_object(NULL, object->parent, linked_state);
|
||||
}
|
||||
/* Modifiers. */
|
||||
if (object->modifiers.first != NULL) {
|
||||
@@ -450,7 +454,7 @@ void DepsgraphNodeBuilder::build_object(Object *object,
|
||||
/* Object that this is a proxy for. */
|
||||
if (object->proxy) {
|
||||
object->proxy->proxy_from = object;
|
||||
build_object(object->proxy, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, object->proxy, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
/* Object dupligroup. */
|
||||
if (object->dup_group != NULL) {
|
||||
@@ -1025,13 +1029,13 @@ void DepsgraphNodeBuilder::build_obdata_geom(Object *object)
|
||||
*/
|
||||
Curve *cu = (Curve *)obdata;
|
||||
if (cu->bevobj != NULL) {
|
||||
build_object(cu->bevobj, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, cu->bevobj, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
if (cu->taperobj != NULL) {
|
||||
build_object(cu->taperobj, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, cu->taperobj, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
if (object->type == OB_FONT && cu->textoncurve != NULL) {
|
||||
build_object(cu->textoncurve, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, cu->textoncurve, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1172,7 +1176,7 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
|
||||
build_image((Image *)id);
|
||||
}
|
||||
else if (id_type == ID_OB) {
|
||||
build_object((Object *)id, DEG_ID_LINKED_INDIRECTLY);
|
||||
build_object(NULL, (Object *)id, DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
else if (id_type == ID_SCE) {
|
||||
/* Scenes are used by compositor trees, and handled by render
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
|
||||
#include "DEG_depsgraph.h" /* used for DEG_depsgraph_use_copy_on_write() */
|
||||
|
||||
struct Base;
|
||||
struct CacheFile;
|
||||
struct bGPdata;
|
||||
struct ListBase;
|
||||
@@ -161,7 +162,8 @@ struct DepsgraphNodeBuilder {
|
||||
ViewLayer *view_layer,
|
||||
eDepsNode_LinkedState_Type linked_state);
|
||||
void build_group(Group *group);
|
||||
void build_object(Object *object,
|
||||
void build_object(Base *base,
|
||||
Object *object,
|
||||
eDepsNode_LinkedState_Type linked_state);
|
||||
void build_object_data(Object *object);
|
||||
void build_object_transform(Object *object);
|
||||
|
||||
@@ -302,7 +302,8 @@ void DepsgraphNodeBuilder::build_rig(Object *object)
|
||||
/* Custom shape. */
|
||||
/* NOTE: Custom shape datablock is already remapped to CoW version. */
|
||||
if (pchan->custom != NULL) {
|
||||
build_object(get_orig_datablock(pchan->custom),
|
||||
build_object(NULL,
|
||||
get_orig_datablock(pchan->custom),
|
||||
DEG_ID_LINKED_INDIRECTLY);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,13 +104,13 @@ void DepsgraphNodeBuilder::build_view_layer(Scene *scene,
|
||||
|
||||
/* scene objects */
|
||||
int select_color = 1;
|
||||
LINKLIST_FOREACH(Base *, base, &view_layer->object_bases) {
|
||||
LINKLIST_FOREACH(Base *, base, &view_layer_cow->object_bases) {
|
||||
/* object itself */
|
||||
build_object(base->object, linked_state);
|
||||
build_object(base, base->object, linked_state);
|
||||
base->object->select_color = select_color++;
|
||||
}
|
||||
if (scene->camera != NULL) {
|
||||
build_object(scene->camera, linked_state);
|
||||
build_object(NULL, scene->camera, linked_state);
|
||||
}
|
||||
|
||||
/* rigidbody */
|
||||
|
||||
Reference in New Issue
Block a user