diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-27 20:43:05 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-27 20:43:05 +0300 |
commit | b97ee36f8dc1cd12039d5cbd317cb32be43a59ef (patch) | |
tree | f885803b33b7436427485b9c9bd1392e57223a52 /source/blender/editors | |
parent | b7c7057f3e876cd0f964e2badc43e0b9a5e25d3b (diff) |
2.5
Anim playback part 1 (needs more test, will do after commit)
- added the update_for_new_frame() back
- proper evaluation of time change notifier in WM level
- fixed redraw flushes for menus while animation plays.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/animation/anim_deps.c | 65 | ||||
-rw-r--r-- | source/blender/editors/include/ED_anim_api.h | 1 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/space_buttons.c | 16 | ||||
-rw-r--r-- | source/blender/editors/space_time/space_time.c | 12 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/space_view3d.c | 16 |
5 files changed, 97 insertions, 13 deletions
diff --git a/source/blender/editors/animation/anim_deps.c b/source/blender/editors/animation/anim_deps.c index 36457e13f5b..f825a38bd7d 100644 --- a/source/blender/editors/animation/anim_deps.c +++ b/source/blender/editors/animation/anim_deps.c @@ -35,6 +35,7 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "DNA_texture_types.h" #include "DNA_view3d_types.h" #include "DNA_windowmanager_types.h" @@ -42,6 +43,10 @@ #include "BKE_context.h" #include "BKE_depsgraph.h" +#include "BKE_global.h" +#include "BKE_scene.h" +#include "BKE_main.h" +#include "BKE_node.h" #include "BKE_utildefines.h" #include "RNA_access.h" @@ -50,24 +55,66 @@ /* ***************** depsgraph calls and anim updates ************* */ -/* 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(bContext *C) +static unsigned int screen_view3d_layers(bScreen *screen) { - Scene *scene= CTX_data_scene(C); - bScreen *screen= CTX_wm_screen(C); - int layer= scene->lay; /* as minimum this */ - if(screen) { + unsigned int layer= screen->scene->lay; /* as minimum this */ ScrArea *sa; - + /* 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; } + return layer; } + return 0; +} + +/* 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(bContext *C) +{ + Scene *scene= CTX_data_scene(C); + bScreen *screen= CTX_wm_screen(C); + + DAG_scene_flush_update(scene, screen_view3d_layers(screen), 0); +} + + +/* results in fully updated anim system */ +/* in future sound should be on WM level, only 1 sound can play! */ +void ED_update_for_newframe(bContext *C, int mute) +{ + bScreen *screen= CTX_wm_screen(C); + Scene *scene= screen->scene; - DAG_scene_flush_update(scene, layer, 0); + //extern void audiostream_scrub(unsigned int frame); /* seqaudio.c */ + + /* this function applies the changes too */ + /* XXX future: do all windows */ + scene_update_for_newframe(scene, screen_view3d_layers(screen)); /* BKE_scene.h */ + + //if ( (CFRA>1) && (!mute) && (G.scene->audio.flag & AUDIO_SCRUB)) + // audiostream_scrub( CFRA ); + + /* 3d window, preview */ + //BIF_view3d_previewrender_signal(curarea, PR_DBASE|PR_DISPRECT); + + /* all movie/sequence images */ + //BIF_image_update_frame(); + + /* composite */ + if(scene->use_nodes && scene->nodetree) + ntreeCompositTagAnimated(scene->nodetree); + + /* update animated texture nodes */ + { + Tex *tex; + for(tex= G.main->tex.first; tex; tex= tex->id.next) + if( tex->use_nodes && tex->nodetree ) { + ntreeTexTagAnimated( tex->nodetree ); + } + } } diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index b6908205398..492e2a22b84 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -286,6 +286,7 @@ void ANIM_nla_mapping_apply(struct Object *ob, struct Ipo *ipo, short restore, s /* generic update flush, reads from Context screen (layers) and scene */ void ED_anim_dag_flush_update(struct bContext *C); +void ED_update_for_newframe(struct bContext *C, int mute); /* ************************************************* */ /* OPERATORS */ diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index d22e2943670..1b6e134ca96 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -230,9 +230,19 @@ static void buttons_header_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } -static void buttons_main_area_listener(ARegion *ar, wmNotifier *wmn) +/* reused! */ +static void buttons_area_listener(ARegion *ar, wmNotifier *wmn) { /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_FRAME: + ED_region_tag_redraw(ar); + break; + } + break; + } } /* only called once, from space/spacetypes.c */ @@ -255,7 +265,7 @@ void ED_spacetype_buttons(void) art->regionid = RGN_TYPE_WINDOW; art->init= buttons_main_area_init; art->draw= buttons_main_area_draw; - art->listener= buttons_main_area_listener; + art->listener= buttons_area_listener; art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; BLI_addhead(&st->regiontypes, art); @@ -268,7 +278,7 @@ void ED_spacetype_buttons(void) art->init= buttons_header_area_init; art->draw= buttons_header_area_draw; - + art->listener= buttons_area_listener; BLI_addhead(&st->regiontypes, art); /* regions: channels */ diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index 11ab7b19a6b..1d95f982f93 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -203,6 +203,17 @@ static void time_header_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_restore(C); } +static void time_header_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + + case NC_SCENE: + if(wmn->data==ND_FRAME) + ED_region_tag_redraw(ar); + break; + } +} /* ******************** default callbacks for time space ***************** */ @@ -314,6 +325,7 @@ void ED_spacetype_time(void) art->init= time_header_area_init; art->draw= time_header_area_draw; + art->listener= time_header_area_listener; BLI_addhead(&st->regiontypes, art); BKE_spacetype_register(st); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 6762097b9bb..ad85fdb9a0e 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -52,6 +52,7 @@ #include "BIF_gl.h" #include "WM_api.h" +#include "WM_types.h" #include "UI_interface.h" #include "UI_resources.h" @@ -203,6 +204,19 @@ static void view3d_main_area_init(wmWindowManager *wm, ARegion *ar) } +static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ + switch(wmn->category) { + case NC_SCENE: + switch(wmn->data) { + case ND_FRAME: + ED_region_tag_redraw(ar); + break; + } + break; + } +} /* add handlers, stuff you only do once or on area/region changes */ static void view3d_header_area_init(wmWindowManager *wm, ARegion *ar) @@ -295,7 +309,7 @@ void ED_spacetype_view3d(void) art->regionid = RGN_TYPE_WINDOW; art->draw= view3d_main_area_draw; art->init= view3d_main_area_init; - + art->listener= view3d_main_area_listener; BLI_addhead(&st->regiontypes, art); /* regions: header */ |