[Bf-blender-cvs] [6bd4c56] depsgraph_refactor: Depsgraph: Add dedicated file for all possible object update callbacks

Sergey Sharybin noreply at git.blender.org
Thu Nov 6 14:12:21 CET 2014


Commit: 6bd4c566bf5ef95a2fc4903179b8e8b2ec68fffb
Author: Sergey Sharybin
Date:   Thu Nov 6 14:11:19 2014 +0100
Branches: depsgraph_refactor
https://developer.blender.org/rB6bd4c566bf5ef95a2fc4903179b8e8b2ec68fffb

Depsgraph: Add dedicated file for all possible object update callbacks

Currently it's quite small, but in the future we'll have all possible depsgraph
update callbacks in there.

===================================================================

M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/object.c
A	source/blender/blenkernel/intern/object_update.c
M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M	source/blender/depsgraph/intern/depsgraph_type_defines.cpp
M	source/blender/depsgraph/intern/stubs.h

===================================================================

diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index a9591b6..752f480 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -170,9 +170,12 @@ void BKE_object_tfm_protected_restore(struct Object *ob,
                                       const ObjectTfmProtectedChannels *obtfm,
                                       const short protectflag);
 
+void BKE_object_eval_local_transform(struct EvaluationContext *eval_ctx,
+                                     struct Scene *scene,
+                                     struct Object *ob);
 void BKE_object_eval_geometry(struct EvaluationContext *eval_ctx,
-                                  struct Scene *scene,
-                                  struct Object *ob);
+                              struct Scene *scene,
+                              struct Object *ob);
 void BKE_object_handle_update(struct EvaluationContext *eval_ctx, struct Scene *scene, struct Object *ob);
 void BKE_object_handle_update_ex(struct EvaluationContext *eval_ctx,
                                  struct Scene *scene, struct Object *ob,
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index a720b21..f384e44 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -130,6 +130,7 @@ set(SRC
 	intern/object.c
 	intern/object_deform.c
 	intern/object_dupli.c
+	intern/object_update.c
 	intern/ocean.c
 	intern/packedFile.c
 	intern/paint.c
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index f442bb2..74dc5d4 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2942,150 +2942,6 @@ bool BKE_object_parent_loop_check(const Object *par, const Object *ob)
 	return BKE_object_parent_loop_check(par->parent, ob);
 }
 
-void BKE_object_eval_geometry(EvaluationContext *eval_ctx,
-                                  Scene *scene,
-                                  Object *ob)
-{
-	ID *data_id = (ID *)ob->data;
-	AnimData *adt = BKE_animdata_from_id(data_id);
-	Key *key;
-	float ctime = BKE_scene_frame_get(scene);
-
-	if (G.debug & G_DEBUG_DEPSGRAPH)
-		printf("recalcdata %s\n", ob->id.name + 2);
-
-	if (adt) {
-		/* evaluate drivers - datalevel */
-		/* XXX: for mesh types, should we push this to derivedmesh instead? */
-		BKE_animsys_evaluate_animdata(scene, data_id, adt, ctime, ADT_RECALC_DRIVERS);
-	}
-
-	key = BKE_key_from_object(ob);
-	if (key && key->block.first) {
-		if (!(ob->shapeflag & OB_SHAPE_LOCK))
-			BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS);
-	}
-
-	/* includes all keys and modifiers */
-	switch (ob->type) {
-	case OB_MESH:
-		{
-			BMEditMesh *em = (ob == scene->obedit) ? BKE_editmesh_from_object(ob) : NULL;
-			uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH;
-#ifdef WITH_FREESTYLE
-			/* make sure Freestyle edge/face marks appear in DM for render (see T40315) */
-			if (eval_ctx->mode != DAG_EVAL_VIEWPORT) {
-				data_mask |= CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE;
-			}
-#endif
-			if (em) {
-				makeDerivedMesh(scene, ob, em,  data_mask, 0); /* was CD_MASK_BAREMESH */
-			}
-			else {
-				makeDerivedMesh(scene, ob, NULL, data_mask, 0);
-			}
-			break;
-		}
-	case OB_ARMATURE:
-		if (ob->id.lib && ob->proxy_from) {
-			if (BKE_pose_copy_result(ob->pose, ob->proxy_from->pose) == false) {
-				printf("Proxy copy error, lib Object: %s proxy Object: %s\n",
-				       ob->id.name + 2, ob->proxy_from->id.name + 2);
-			}
-		}
-		else {
-			BKE_pose_where_is(scene, ob);
-		}
-		break;
-
-	case OB_MBALL:
-		BKE_displist_make_mball(eval_ctx, scene, ob);
-		break;
-
-	case OB_CURVE:
-	case OB_SURF:
-	case OB_FONT:
-		BKE_displist_make_curveTypes(scene, ob, 0);
-		break;
-
-	case OB_LATTICE:
-		BKE_lattice_modifiers_calc(scene, ob);
-		break;
-
-	case OB_EMPTY:
-		if (ob->empty_drawtype == OB_EMPTY_IMAGE && ob->data)
-			if (BKE_image_is_animated(ob->data))
-				BKE_image_user_check_frame_calc(ob->iuser, (int)ctime, 0);
-		break;
-	}
-
-	/* related materials */
-	/* XXX: without depsgraph tagging, this will always need to be run, which will be slow!
-	 * However, not doing anything (or trying to hack around this lack) is not an option
-	 * anymore, especially due to Cycles [#31834]
-	 */
-	if (ob->totcol) {
-		int a;
-		for (a = 1; a <= ob->totcol; a++) {
-			Material *ma = give_current_material(ob, a);
-			if (ma) {
-				/* recursively update drivers for this material */
-				material_drivers_update(scene, ma, ctime);
-			}
-		}
-	}
-	else if (ob->type == OB_LAMP)
-		lamp_drivers_update(scene, ob->data, ctime);
-
-	/* particles */
-	if (ob != scene->obedit && ob->particlesystem.first) {
-		ParticleSystem *tpsys, *psys;
-		DerivedMesh *dm;
-		ob->transflag &= ~OB_DUPLIPARTS;
-		psys = ob->particlesystem.first;
-		while (psys) {
-			/* ensure this update always happens even if psys is disabled */
-			if (psys->recalc & PSYS_RECALC_TYPE) {
-				psys_changed_type(ob, psys);
-			}
-
-			if (psys_check_enabled(ob, psys)) {
-				/* check use of dupli objects here */
-				if (psys->part && (psys->part->draw_as == PART_DRAW_REND || eval_ctx->mode == DAG_EVAL_RENDER) &&
-				    ((psys->part->ren_as == PART_DRAW_OB && psys->part->dup_ob) ||
-				     (psys->part->ren_as == PART_DRAW_GR && psys->part->dup_group)))
-					{
-						ob->transflag |= OB_DUPLIPARTS;
-					}
-
-				particle_system_update(scene, ob, psys);
-				psys = psys->next;
-			}
-			else if (psys->flag & PSYS_DELETE) {
-				tpsys = psys->next;
-				BLI_remlink(&ob->particlesystem, psys);
-				psys_free(ob, psys);
-				psys = tpsys;
-			}
-			else
-				psys = psys->next;
-		}
-
-		if (eval_ctx->mode == DAG_EVAL_RENDER && ob->transflag & OB_DUPLIPARTS) {
-			/* this is to make sure we get render level duplis in groups:
-			 * the derivedmesh must be created before init_render_mesh,
-			 * since object_duplilist does dupliparticles before that */
-			dm = mesh_create_derived_render(scene, ob, CD_MASK_BAREMESH | CD_MASK_MTFACE | CD_MASK_MCOL);
-			dm->release(dm);
-
-			for (psys = ob->particlesystem.first; psys; psys = psys->next)
-				psys_get_modifier(ob, psys)->flag &= ~eParticleSystemFlag_psys_updated;
-		}
-	}
-
-	/* quick cache removed */
-}
-
 /* proxy rule: lib_object->proxy_from == the one we borrow from, only set temporal and cleared here */
 /*           local_object->proxy      == pointer to library object, saved in files and read */
 
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
new file mode 100644
index 0000000..b8fd0a5
--- /dev/null
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -0,0 +1,214 @@
+/*
+ * ***** 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) 20014 by Blender Foundation.
+ * All rights reserved.
+ *
+ * Contributor(s): Sergey Sharybin.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/object_update.c
+ *  \ingroup bke
+ */
+
+#include "DNA_anim_types.h"
+#include "DNA_constraint_types.h"
+#include "DNA_group_types.h"
+#include "DNA_key_types.h"
+#include "DNA_material_types.h"
+#include "DNA_scene_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_global.h"
+#include "BKE_armature.h"
+#include "BKE_action.h"
+#include "BKE_depsgraph.h"
+#include "BKE_DerivedMesh.h"
+#include "BKE_animsys.h"
+#include "BKE_displist.h"
+#include "BKE_effect.h"
+#include "BKE_key.h"
+#include "BKE_lamp.h"
+#include "BKE_lattice.h"
+#include "BKE_editmesh.h"
+#include "BKE_object.h"
+#include "BKE_particle.h"
+#include "BKE_scene.h"
+#include "BKE_material.h"
+#include "BKE_image.h"
+
+#include "DEG_depsgraph.h"
+
+void BKE_object_eval_local_transform(EvaluationContext *UNUSED(eval_ctx),
+                                     Scene *scene,
+                                     Object *ob)
+{
+	printf("%s on %s\n", __func__, ob->id.name);
+	BKE_object_where_is_calc_ex(scene, NULL, ob, NULL);
+}
+
+void BKE_object_eval_geometry(EvaluationContext *eval_ctx,
+                              Scene *scene,
+                              Object *ob)
+{
+	ID *data_id = (ID *)ob->data;
+	AnimData *adt = BKE_animdata_from_id(data_id);
+	Key *key;
+	float ctime = BKE_scene_frame_get(scene);
+
+	if (DEG_get_eval_mode() == DEG_EVAL_MODE_NEW) {
+		printf("%s on %s\n", __func__, ob->id.name);
+	}
+
+	if (G.debug & G_DEBUG_DEPSGRAPH)
+		printf("recalcdata %s\n", ob->id.name + 2);
+
+	if (adt) {
+		/* evaluate drivers - datalevel */
+		/* XXX: for mesh types, should we push this to derivedmesh instead? */
+		BKE_animsys_evaluate_animdata(scene, data_id, adt, ctime, ADT_RECALC_DRIVERS);
+	}
+
+	key = BKE_key_from_object(ob);
+	if (key && key->block.first) {
+		if (!(ob->shapeflag & OB_SHAPE_LOCK))
+			BKE_animsys_evaluate_animdata(scene, &key->id, key->adt, ctime, ADT_RECALC_DRIVERS);
+	}
+
+	/* includes all keys and modifiers */
+	switch (ob->type) {
+	case OB_MESH:
+		{
+			BMEditMesh *em = (ob == scene->obedit) ? BKE_editmesh_from_object(ob) : NULL;
+			uint64_t data_mask = scene->customdata_mask | CD_MASK_BAREMESH;
+#ifdef WITH_FREESTYLE
+			/* make sure Freestyle edge/face marks appear in DM for render (see T40315) */
+			if (eval_ctx->mode != DAG_EVAL_VIEWPORT) {
+				data_mask |= CD_MASK_FREESTYLE_EDGE | CD_MASK_FREESTYLE_FACE;
+			}
+#endif
+			if

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list