[Bf-blender-cvs] [08fe885d06a] blender2.8: Merge branch 'master' into blender2.8
Campbell Barton
noreply at git.blender.org
Fri Jan 19 11:38:04 CET 2018
Commit: 08fe885d06a011e2d1613be7e3a41b56a8b0e880
Author: Campbell Barton
Date: Fri Jan 19 21:44:03 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB08fe885d06a011e2d1613be7e3a41b56a8b0e880
Merge branch 'master' into blender2.8
===================================================================
===================================================================
diff --cc source/blender/blenkernel/intern/group.c
index 8295fafba56,6dc8cc5aff1..ca6d92efa80
--- a/source/blender/blenkernel/intern/group.c
+++ b/source/blender/blenkernel/intern/group.c
@@@ -369,45 -367,12 +369,45 @@@ void BKE_group_handle_recalc_and_update
#endif
{
/* only do existing tags, as set by regular depsgraph */
- for (go = group->gobject.first; go; go = go->next) {
- if (go->ob) {
- if (go->ob->recalc) {
- BKE_object_handle_update(eval_ctx, scene, go->ob);
- }
+ FOREACH_GROUP_OBJECT(group, object)
+ {
+ if (object->id.recalc & ID_RECALC_ALL) {
+ BKE_object_handle_update(eval_ctx, scene, object);
}
}
+ FOREACH_GROUP_OBJECT_END
+ }
+}
+
+/* ******** Dependency graph evaluation ******** */
+
+static void group_eval_layer_collections(
+ const struct EvaluationContext *eval_ctx,
+ Group *group,
+ ListBase *layer_collections,
+ LayerCollection *parent_layer_collection)
+{
- LINKLIST_FOREACH (LayerCollection *, layer_collection, layer_collections) {
++ BLI_LISTBASE_FOREACH (LayerCollection *, layer_collection, layer_collections) {
+ /* Evaluate layer collection itself. */
+ BKE_layer_eval_layer_collection(eval_ctx,
+ layer_collection,
+ parent_layer_collection);
+ /* Evaluate nested collections. */
+ group_eval_layer_collections(eval_ctx,
+ group,
+ &layer_collection->layer_collections,
+ layer_collection);
}
}
+
+void BKE_group_eval_view_layers(const struct EvaluationContext *eval_ctx,
+ Group *group)
+{
+ DEBUG_PRINT("%s on %s (%p)\n", __func__, group->id.name, group);
+ BKE_layer_eval_layer_collection_pre(eval_ctx, &group->id, group->view_layer);
+ group_eval_layer_collections(eval_ctx,
+ group,
+ &group->view_layer->layer_collections,
+ NULL);
+ BKE_layer_eval_layer_collection_post(eval_ctx, group->view_layer);
+}
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 3502ca69414,8d20a671202..ddae761cea0
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@@ -428,40 -304,34 +428,40 @@@ void DepsgraphNodeBuilder::build_group(
return;
}
group_id->tag |= LIB_TAG_DOIT;
-
- BLI_LISTBASE_FOREACH (GroupObject *, go, &group->gobject) {
- build_object(base, go->ob);
+ /* Build group objects. */
- LINKLIST_FOREACH(Base *, base, &group->view_layer->object_bases) {
++ BLI_LISTBASE_FOREACH (Base *, base, &group->view_layer->object_bases) {
+ build_object(NULL, base->object, DEG_ID_LINKED_INDIRECTLY);
}
+ /* Operation to evaluate the whole view layer.
+ *
+ * NOTE: We re-use DONE opcode even though the function does everything.
+ * This way we wouldn't need to worry about possible relations from DONE,
+ * regardless whether it's a group or scene or something else.
+ */
+ add_id_node(group_id);
+ Group *group_cow = get_cow_datablock(group);
+ add_operation_node(group_id,
+ DEG_NODE_TYPE_LAYER_COLLECTIONS,
+ function_bind(BKE_group_eval_view_layers,
+ _1,
+ group_cow),
+ DEG_OPCODE_VIEW_LAYER_DONE);
}
-void DepsgraphNodeBuilder::build_object(Base *base, Object *object)
+void DepsgraphNodeBuilder::build_object(Base *base,
+ Object *object,
+ eDepsNode_LinkedState_Type linked_state)
{
- const bool has_object = (object->id.tag & LIB_TAG_DOIT);
- IDDepsNode *id_node = (has_object)
- ? graph_->find_id_node(&object->id)
- : add_id_node(&object->id);
- /* Update node layers.
- * Do it for both new and existing ID nodes. This is so because several
- * bases might be sharing same object.
- */
- if (base != NULL) {
- id_node->layers |= base->lay;
- }
- if (object->type == OB_CAMERA) {
- /* Camera should always be updated, it used directly by viewport.
- *
- * TODO(sergey): Make it only for active scene camera.
- */
- id_node->layers |= (unsigned int)(-1);
- }
/* Skip rest of components if the ID node was already there. */
- if (has_object) {
+ if (object->id.tag & LIB_TAG_DOIT) {
+ IDDepsNode *id_node = find_id_node(&object->id);
+ /* We need to build some extra stuff if object becomes linked
+ * directly.
+ */
+ if (id_node->linked_state == DEG_ID_LINKED_INDIRECTLY) {
+ build_object_flags(base, object, linked_state);
+ }
+ id_node->linked_state = max(id_node->linked_state, linked_state);
return;
}
object->id.tag |= LIB_TAG_DOIT;
@@@ -815,10 -627,11 +815,10 @@@ void DepsgraphNodeBuilder::build_rigidb
sim_node->owner->entry_operation = sim_node;
sim_node->owner->exit_operation = sim_node;
-
/* objects - simulation participants */
if (rbw->group) {
- LINKLIST_FOREACH (Base *, base, &rbw->group->view_layer->object_bases) {
- BLI_LISTBASE_FOREACH (GroupObject *, go, &rbw->group->gobject) {
- Object *object = go->ob;
++ BLI_LISTBASE_FOREACH (Base *, base, &rbw->group->view_layer->object_bases) {
+ Object *object = base->object;
if (!object || (object->type != OB_MESH))
continue;
@@@ -870,24 -674,15 +870,24 @@@ void DepsgraphNodeBuilder::build_partic
DEG_OPCODE_PARTICLE_SYSTEM_EVAL_INIT);
/* particle systems */
- LINKLIST_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
+ BLI_LISTBASE_FOREACH (ParticleSystem *, psys, &object->particlesystem) {
ParticleSettings *part = psys->part;
- /* particle settings */
- // XXX: what if this is used more than once!
- build_animdata(&part->id);
+ /* Build particle settings operations.
+ *
+ * NOTE: The call itself ensures settings are only build once.
+ */
+ build_particle_settings(part);
+
+ /* Update on particle settings change. */
+ add_operation_node(psys_comp,
+ function_bind(BKE_particle_system_settings_eval,
+ _1,
+ psys),
+ DEG_OPCODE_PARTICLE_SETTINGS_EVAL,
+ psys->name);
- /* this particle system */
- // TODO: for now, this will just be a placeholder "ubereval" node
+ /* Particle system evaluation. */
add_operation_node(psys_comp,
NULL,
DEG_OPCODE_PARTICLE_SYSTEM_EVAL,
@@@ -1206,32 -945,24 +1206,32 @@@ void DepsgraphNodeBuilder::build_lamp(O
void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
{
- if (!ntree)
+ if (ntree == NULL) {
return;
-
+ }
/* nodetree itself */
ID *ntree_id = &ntree->id;
- OperationDepsNode *op_node;
-
+ add_id_node(ntree_id);
+ bNodeTree *ntree_cow = get_cow_datablock(ntree);
+ /* Animation, */
build_animdata(ntree_id);
-
- /* Parameters for drivers. */
- op_node = add_operation_node(ntree_id,
- DEG_NODE_TYPE_PARAMETERS,
- NULL,
- DEG_OPCODE_PARAMETERS_EVAL);
- op_node->set_as_exit();
-
+ /* Shading update. */
+ add_operation_node(ntree_id,
+ DEG_NODE_TYPE_SHADING,
+ NULL,
+ DEG_OPCODE_MATERIAL_UPDATE);
+ /* NOTE: We really pass original and CoW node trees here, this is how the
+ * callback works. Ideally we need to find a better way for that.
+ */
+ add_operation_node(ntree_id,
+ DEG_NODE_TYPE_SHADING_PARAMETERS,
+ function_bind(BKE_nodetree_shading_params_eval,
+ _1,
+ ntree_cow,
+ ntree),
+ DEG_OPCODE_MATERIAL_UPDATE);
/* nodetree's nodes... */
- LINKLIST_FOREACH (bNode *, bnode, &ntree->nodes) {
+ BLI_LISTBASE_FOREACH (bNode *, bnode, &ntree->nodes) {
ID *id = bnode->id;
if (id == NULL) {
continue;
diff --cc source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
index 79316e47022,00000000000..137a79e7276
mode 100644,000000..100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
@@@ -1,126 -1,0 +1,126 @@@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2013 Blender Foundation.
+ * All rights reserved.
+ *
+ * Original Author: Joshua Leung
+ * Contributor(s): Based on original depsgraph.c code - Blender Foundation (2005-2013)
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/depsgraph/intern/builder/deg_builder_nodes_layer_collection.cc
+ * \ingroup depsgraph
+ *
+ * Methods for constructing depsgraph's nodes
+ */
+
+#include "intern/builder/deg_builder_nodes.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "MEM_guardedalloc.h"
+
+extern "C" {
+#include "BLI_utildefines.h"
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "BKE_layer.h"
+
+#include "DNA_scene_types.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list