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. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs