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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to