[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23217] trunk/blender/source/blender: Depsgraph:
Brecht Van Lommel
brecht at blender.org
Mon Sep 14 14:26:34 CEST 2009
Revision: 23217
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23217
Author: blendix
Date: 2009-09-14 14:26:34 +0200 (Mon, 14 Sep 2009)
Log Message:
-----------
Depsgraph:
* Move function to compute visible screen layers to BKE.
* Use this now in the depsgraph, was still using this all layers
to flush. Still missing a way to get the current scene in
background mode..
* Also two more function to not require a scene pointer anymore:
* DAG_object_update_flags is now DAG_id_update_flags.
* DAG_ids_flush_update is now available next to DAG_scene_flush_update.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_depsgraph.h
trunk/blender/source/blender/blenkernel/BKE_screen.h
trunk/blender/source/blender/blenkernel/intern/depsgraph.c
trunk/blender/source/blender/blenkernel/intern/screen.c
trunk/blender/source/blender/editors/animation/anim_deps.c
trunk/blender/source/blender/editors/armature/editarmature_retarget.c
trunk/blender/source/blender/editors/include/ED_screen.h
trunk/blender/source/blender/editors/preview/previewrender.c
trunk/blender/source/blender/editors/screen/screen_edit.c
Modified: trunk/blender/source/blender/blenkernel/BKE_depsgraph.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_depsgraph.h 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/blenkernel/BKE_depsgraph.h 2009-09-14 12:26:34 UTC (rev 23217)
@@ -96,19 +96,24 @@
/* ********** API *************** */
/* Note that the DAG never executes changes in Objects, only sets flags in Objects */
+ /* (re)-create dependency graph for scene */
void DAG_scene_sort(struct Scene *sce);
/* flag all objects that need recalc because they're animated */
void DAG_scene_update_flags(struct Scene *sce, unsigned int lay);
- /* flag all objects that need recalc because they're animated, influencing this object only */
-void DAG_object_update_flags(struct Scene *sce, struct Object *ob, unsigned int lay);
-
/* flushes all recalc flags in objects down the dependency tree */
void DAG_scene_flush_update(struct Scene *sce, unsigned int lay, int time);
+
+ /* flag all IDs that need recalc because they're animated, influencing
+ this ID only. only for objects currently */
+void DAG_id_update_flags(struct ID *id);
/* flushes all recalc flags for this object down the dependency tree,
- but not the DAG only supports objects and object data currently */
+ but note the DAG only supports objects and object data currently */
void DAG_id_flush_update(struct ID *id, short flag);
+ /* when setting manual RECALC flags, call this afterwards */
+void DAG_ids_flush_update(int time);
+ /* (re)-create dependency graph for armature pose */
void DAG_pose_sort(struct Object *ob);
#endif
Modified: trunk/blender/source/blender/blenkernel/BKE_screen.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_screen.h 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/blenkernel/BKE_screen.h 2009-09-14 12:26:34 UTC (rev 23217)
@@ -230,11 +230,11 @@
/* area/regions */
struct ARegion *BKE_area_region_copy(struct SpaceType *st, struct ARegion *ar);
void BKE_area_region_free(struct SpaceType *st, struct ARegion *ar);
+void BKE_screen_area_free(struct ScrArea *sa);
-void BKE_screen_area_free(struct ScrArea *sa);
-
+/* screen */
void free_screen(struct bScreen *sc);
+unsigned int BKE_screen_visible_layers(struct bScreen *screen);
-
#endif
Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -78,6 +78,7 @@
#include "BKE_pointcache.h"
#include "BKE_utildefines.h"
#include "BKE_scene.h"
+#include "BKE_screen.h"
#include "MEM_guardedalloc.h"
@@ -2142,31 +2143,59 @@
}
-void DAG_id_flush_update(ID *id, short flag)
+static void dag_current_scene_layers(Main *bmain, Scene **sce, unsigned int *lay)
{
- Main *bmain= G.main;
wmWindowManager *wm;
wmWindow *win;
- Scene *sce;
- Object *obt, *ob= NULL;
- short idtype;
/* only one scene supported currently, making more scenes work
correctly requires changes beyond just the dependency graph */
+ *sce= NULL;
+ *lay= 0;
+
if((wm= bmain->wm.first)) {
- /* if we have a windowmanager, use sce from first window */
+ /* if we have a windowmanager, look into windows */
for(win=wm->windows.first; win; win=win->next) {
- sce= (win->screen)? win->screen->scene: NULL;
-
- if(sce)
- break;
+ if(win->screen) {
+ if(!*sce) *sce= win->screen->scene;
+ *lay |= BKE_screen_visible_layers(win->screen);
+ }
}
}
- else
+ else {
/* if not, use the first sce */
- sce= bmain->scene.first;
+ *sce= bmain->scene.first;
+ if(*sce) *lay= (*sce)->lay;
+ /* XXX for background mode, we should get the scen
+ from somewhere, for the -S option, but it's in
+ the context, how to get it here? */
+ }
+}
+
+void DAG_ids_flush_update(int time)
+{
+ Main *bmain= G.main;
+ Scene *sce;
+ unsigned int lay;
+
+ dag_current_scene_layers(bmain, &sce, &lay);
+
+ if(sce)
+ DAG_scene_flush_update(sce, lay, time);
+}
+
+void DAG_id_flush_update(ID *id, short flag)
+{
+ Main *bmain= G.main;
+ Scene *sce;
+ Object *obt, *ob= NULL;
+ short idtype;
+ unsigned int lay;
+
+ dag_current_scene_layers(bmain, &sce, &lay);
+
if(!id || !sce || !sce->theDag)
return;
@@ -2213,10 +2242,7 @@
}
/* flush to other objects that depend on this one */
-// XXX if(G.curscreen)
-// DAG_scene_flush_update(sce, dag_screen_view3d_layers(), 0);
-// else
- DAG_scene_flush_update(sce, sce->lay, 0);
+ DAG_scene_flush_update(sce, lay, 0);
}
/* recursively descends tree, each node only checked once */
@@ -2251,11 +2277,26 @@
/* all nodes that influence this object get tagged, for calculating the exact
position of this object at a given timeframe */
-void DAG_object_update_flags(Scene *sce, Object *ob, unsigned int lay)
+void DAG_id_update_flags(ID *id)
{
+ Main *bmain= G.main;
+ Scene *sce;
DagNode *node;
DagAdjList *itA;
+ Object *ob;
+ unsigned int lay;
+
+ dag_current_scene_layers(bmain, &sce, &lay);
+
+ if(!id || !sce || !sce->theDag)
+ return;
+ /* objects only currently */
+ if(GS(id->name) != ID_OB)
+ return;
+
+ ob= (Object*)id;
+
/* tag nodes unchecked */
for(node = sce->theDag->DagNode.first; node; node= node->next)
node->color = DAG_WHITE;
Modified: trunk/blender/source/blender/blenkernel/intern/screen.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/screen.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/blenkernel/intern/screen.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -33,8 +33,10 @@
#include "MEM_guardedalloc.h"
+#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_view3d_types.h"
#include "BLI_blenlib.h"
@@ -321,4 +323,23 @@
BLI_freelistN(&sc->areabase);
}
+/* for depsgraph */
+unsigned int BKE_screen_visible_layers(bScreen *screen)
+{
+ ScrArea *sa;
+ unsigned int layer= 0;
+ if(!screen)
+ return layer;
+
+ /* get all used view3d layers */
+ for(sa= screen->areabase.first; sa; sa= sa->next)
+ if(sa->spacetype==SPACE_VIEW3D)
+ layer |= ((View3D *)sa->spacedata.first)->lay;
+
+ if(!layer)
+ return screen->scene->lay;
+
+ return layer;
+}
+
Modified: trunk/blender/source/blender/editors/animation/anim_deps.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_deps.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/editors/animation/anim_deps.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -43,6 +43,7 @@
#include "BKE_depsgraph.h"
#include "BKE_main.h"
#include "BKE_scene.h"
+#include "BKE_screen.h"
#include "BKE_utildefines.h"
#include "RNA_access.h"
@@ -57,26 +58,17 @@
/* ***************** depsgraph calls and anim updates ************* */
/* ***************** only these can be called from editors ******** */
-/* generic update flush, reads from context Screen (layers) and scene */
-/* this is for compliancy, later it can do all windows etc */
void ED_anim_dag_flush_update(const bContext *C)
{
- Scene *scene= CTX_data_scene(C);
- bScreen *screen= CTX_wm_screen(C);
-
- DAG_scene_flush_update(scene, ED_screen_view3d_layers(screen), 0);
+ DAG_ids_flush_update(0);
}
/* flushes changes from object to all relations in scene */
void ED_anim_object_flush_update(const bContext *C, Object *ob)
{
- Scene *scene= CTX_data_scene(C);
- bScreen *screen= CTX_wm_screen(C);
-
- DAG_object_update_flags(scene, ob, ED_screen_view3d_layers(screen));
+ DAG_id_update_flags(&ob->id);
}
-
/* **************************** pose <-> action syncing ******************************** */
/* Summary of what needs to be synced between poses and actions:
* 1) Flags
Modified: trunk/blender/source/blender/editors/armature/editarmature_retarget.c
===================================================================
--- trunk/blender/source/blender/editors/armature/editarmature_retarget.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/editors/armature/editarmature_retarget.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -2716,7 +2716,6 @@
static void adjustGraphs(bContext *C, RigGraph *rigg)
{
- Scene *scene = CTX_data_scene(C);
bArmature *arm= rigg->ob->data;
RigArc *arc;
@@ -2739,7 +2738,6 @@
static void retargetGraphs(bContext *C, RigGraph *rigg)
{
- Scene *scene = CTX_data_scene(C);
bArmature *arm= rigg->ob->data;
ReebGraph *reebg = rigg->link_mesh;
RigNode *inode;
Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/editors/include/ED_screen.h 2009-09-14 12:26:34 UTC (rev 23217)
@@ -104,7 +104,6 @@
/* anim */
void ED_update_for_newframe(const struct bContext *C, int mute);
-unsigned int ED_screen_view3d_layers(struct bScreen *screen);
void ED_operatortypes_screen(void);
void ED_keymap_screen(struct wmWindowManager *wm);
Modified: trunk/blender/source/blender/editors/preview/previewrender.c
===================================================================
--- trunk/blender/source/blender/editors/preview/previewrender.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/editors/preview/previewrender.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -88,7 +88,6 @@
#include "WM_api.h"
#include "WM_types.h"
-#include "ED_anim_api.h"
#include "ED_previewrender.h"
#include "ED_view3d.h"
@@ -736,7 +735,7 @@
/* database can have created render-resol data... */
if(rstats->convertdone)
- ED_anim_dag_flush_update(C); // <--- only current scene XXX
+ DAG_scene_flush_update(scene, scene->lay, 0);
//printf("dbase update\n");
}
Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c 2009-09-14 12:16:35 UTC (rev 23216)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c 2009-09-14 12:26:34 UTC (rev 23217)
@@ -1580,23 +1580,6 @@
}
}
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list