[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47014] trunk/blender/source/blender: Animation playback: now all windows are update during playback, rather than
Brecht Van Lommel
brechtvanlommel at pandora.be
Fri May 25 14:37:12 CEST 2012
Revision: 47014
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47014
Author: blendix
Date: 2012-05-25 12:37:11 +0000 (Fri, 25 May 2012)
Log Message:
-----------
Animation playback: now all windows are update during playback, rather than
just the active window.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_screen.h
trunk/blender/source/blender/editors/object/object_modifier.c
trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
trunk/blender/source/blender/editors/physics/physics_fluid.c
trunk/blender/source/blender/editors/render/render_internal.c
trunk/blender/source/blender/editors/screen/screen_edit.c
trunk/blender/source/blender/editors/screen/screen_ops.c
trunk/blender/source/blender/editors/space_clip/tracking_ops.c
trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
trunk/blender/source/blender/editors/transform/transform_generics.c
trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/include/ED_screen.h 2012-05-25 12:37:11 UTC (rev 47014)
@@ -113,10 +113,11 @@
struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win, struct ScrArea *sa);
/* anim */
-void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
+void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, int mute);
void ED_refresh_viewport_fps(struct bContext *C);
-int ED_screen_animation_play(struct bContext *C, int sync, int mode);
+int ED_screen_animation_play(struct bContext *C, int sync, int mode);
+bScreen *ED_screen_animation_playing(const struct bContext *C);
/* screen keymaps */
void ED_operatortypes_screen(void);
Modified: trunk/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_modifier.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/object/object_modifier.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -2023,7 +2023,7 @@
* this part of the process before a threaded job is created */
//scene->r.cfra = f;
- //ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+ //ED_update_for_newframe(CTX_data_main(C), scene, 1);
/* ok, this doesn't work with drivers, but is way faster.
* let's use this for now and hope nobody wants to drive the time value... */
Modified: trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c
===================================================================
--- trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/physics/dynamicpaint_ops.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -285,7 +285,7 @@
/* Set frame to start point (also inits modifier data) */
frame = surface->start_frame;
scene->r.cfra = (int)frame;
- ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, 1);
/* Init surface */
if (!dynamicPaint_createUVSurface(surface)) return 0;
@@ -303,7 +303,7 @@
/* calculate a frame */
scene->r.cfra = (int)frame;
- ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, 1);
if (!dynamicPaint_calculateFrame(surface, scene, cObject, frame)) return 0;
/*
Modified: trunk/blender/source/blender/editors/physics/physics_fluid.c
===================================================================
--- trunk/blender/source/blender/editors/physics/physics_fluid.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/physics/physics_fluid.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -419,7 +419,7 @@
/* Modifying the global scene isn't nice, but we can do it in
* this part of the process before a threaded job is created */
scene->r.cfra = (int)eval_time;
- ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, 1);
/* now scene data should be current according to animation system, so we fill the channels */
@@ -967,7 +967,7 @@
/* reset to original current frame */
scene->r.cfra = origFrame;
- ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, 1);
/* ******** init domain object's matrix ******** */
copy_m4_m4(domainMat, fsDomain->obmat);
Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/render/render_internal.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -236,7 +236,7 @@
RE_SetReports(re, NULL);
// no redraw needed, we leave state as we entered it
- ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
+ ED_update_for_newframe(mainp, scene, 1);
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_RESULT, scene);
@@ -408,7 +408,7 @@
/* else the frame will not update for the original value */
if (!(rj->scene->r.scemode & R_NO_FRAME_UPDATE))
- ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1);
+ ED_update_for_newframe(G.main, rj->scene, 1);
/* XXX above function sets all tags in nodes */
ntreeCompositClearTags(rj->scene->nodetree);
@@ -470,7 +470,6 @@
Main *mainp;
Scene *scene = CTX_data_scene(C);
SceneRenderLayer *srl = NULL;
- bScreen *screen = CTX_wm_screen(C);
View3D *v3d = CTX_wm_view3d(C);
Render *re;
wmJob *steve;
@@ -507,7 +506,7 @@
mainp = CTX_data_main(C);
/* cancel animation playback */
- if (screen->animtimer)
+ if (ED_screen_animation_playing(C))
ED_screen_animation_play(C, 0, 0);
/* handle UI stuff */
Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -1506,7 +1506,7 @@
BKE_scene_set_background(bmain, scene);
ED_render_engine_changed(bmain);
- ED_update_for_newframe(bmain, scene, screen, 1);
+ ED_update_for_newframe(bmain, scene, 1);
/* complete redraw */
WM_event_add_notifier(C, NC_WINDOW, NULL);
@@ -1750,10 +1750,12 @@
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
Scene *scene = CTX_data_scene(C);
+ bScreen *stopscreen = ED_screen_animation_playing(C);
- if (screen->animtimer)
- WM_event_remove_timer(wm, win, screen->animtimer);
- screen->animtimer = NULL;
+ if (stopscreen) {
+ WM_event_remove_timer(wm, win, stopscreen->animtimer);
+ stopscreen->animtimer = NULL;
+ }
if (enable) {
ScreenAnimData *sad = MEM_callocN(sizeof(ScreenAnimData), "ScreenAnimData");
@@ -1777,8 +1779,9 @@
screen->animtimer->customdata = sad;
}
+
/* notifier catched by top header, for button */
- WM_event_add_notifier(C, NC_SCREEN | ND_ANIMPLAY, screen);
+ WM_event_add_notifier(C, NC_SCREEN | ND_ANIMPLAY, NULL);
}
/* helper for screen_animation_play() - only to be used for TimeLine */
@@ -1821,8 +1824,12 @@
/* results in fully updated anim system
* screen can be NULL */
-void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute))
-{
+void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
+{
+ wmWindowManager *wm = bmain->wm.first;
+ wmWindow *window;
+ int layers = 0;
+
#ifdef DURIAN_CAMERA_SWITCH
void *camera = BKE_scene_camera_switch_find(scene);
if (camera && scene->camera != camera) {
@@ -1843,9 +1850,12 @@
ED_clip_update_frame(bmain, scene->r.cfra);
+ /* get layers from all windows */
+ for (window = wm->windows.first; window; window = window->next)
+ layers |= BKE_screen_visible_layers(window->screen, scene);
+
/* this function applies the changes too */
- /* XXX future: do all windows */
- BKE_scene_update_for_newframe(bmain, scene, BKE_screen_visible_layers(screen, scene)); /* BKE_scene.h */
+ BKE_scene_update_for_newframe(bmain, scene, layers); /* BKE_scene.h */
//if ( (CFRA>1) && (!mute) && (scene->r.audio.flag & AUDIO_SCRUB))
// audiostream_scrub( CFRA );
Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c 2012-05-25 12:08:29 UTC (rev 47013)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c 2012-05-25 12:37:11 UTC (rev 47014)
@@ -2905,6 +2905,8 @@
Scene *scene = CTX_data_scene(C);
wmTimer *wt = screen->animtimer;
ScreenAnimData *sad = wt->customdata;
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *window;
ScrArea *sa;
int sync;
float time;
@@ -2985,22 +2987,24 @@
sound_seek_scene(bmain, scene);
/* since we follow drawflags, we can't send notifier but tag regions ourselves */
- ED_update_for_newframe(CTX_data_main(C), scene, screen, 1);
-
- for (sa = screen->areabase.first; sa; sa = sa->next) {
- ARegion *ar;
- for (ar = sa->regionbase.first; ar; ar = ar->next) {
- if (ar == sad->ar)
- ED_region_tag_redraw(ar);
- else
- if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
- ED_region_tag_redraw(ar);
+ ED_update_for_newframe(CTX_data_main(C), scene, 1);
+
+ for (window = wm->windows.first; window; window = window->next) {
+ for (sa = window->screen->areabase.first; sa; sa = sa->next) {
+ ARegion *ar;
+ for (ar = sa->regionbase.first; ar; ar = ar->next) {
+ if (ar == sad->ar)
+ ED_region_tag_redraw(ar);
+ else
+ if (match_region_with_redraws(sa->spacetype, ar->regiontype, sad->redraws))
+ ED_region_tag_redraw(ar);
+ }
+
+ if (match_area_with_refresh(sa->spacetype, sad->refresh))
+ ED_area_tag_refresh(sa);
}
+ }
- if (match_area_with_refresh(sa->spacetype, sad->refresh))
- ED_area_tag_refresh(sa);
- }
-
/* update frame rate info too
* NOTE: this may not be accurate enough, since we might need this after modifiers/etc.
* have been calculated instead of just before updates have been done?
@@ -3034,13 +3038,26 @@
/* ****************** anim player, starts or ends timer ***************** */
+/* find window that owns the animation timer */
+bScreen *ED_screen_animation_playing(const bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wmWindow *window;
+
+ for (window = wm->windows.first; window; window = window->next)
+ if (window->screen->animtimer)
+ return window->screen;
+
+ return NULL;
+}
+
/* toggle operator */
int ED_screen_animation_play(bContext *C, int sync, int mode)
{
bScreen *screen = CTX_wm_screen(C);
Scene *scene = CTX_data_scene(C);
- if (screen->animtimer) {
+ if (ED_screen_animation_playing(C)) {
/* stop playback now */
ED_screen_animation_timer(C, 0, 0, 0, 0);
sound_stop_scene(scene);
@@ -3097,9 +3114,9 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list