[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32834] trunk/blender/source/blender: bugfix [#24455] Scene is left at last rendered frame from rendering an animation

Campbell Barton ideasman42 at gmail.com
Tue Nov 2 10:34:32 CET 2010


Revision: 32834
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32834
Author:   campbellbarton
Date:     2010-11-02 10:34:32 +0100 (Tue, 02 Nov 2010)

Log Message:
-----------
bugfix [#24455] Scene is left at last rendered frame from rendering an animation

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_image.h
    trunk/blender/source/blender/editors/include/ED_screen.h
    trunk/blender/source/blender/editors/physics/physics_fluid.c
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/editors/render/render_opengl.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_image/image_ops.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c

Modified: trunk/blender/source/blender/editors/include/ED_image.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_image.h	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/include/ED_image.h	2010-11-02 09:34:32 UTC (rev 32834)
@@ -29,6 +29,7 @@
 #define ED_IMAGE_H
 
 struct SpaceImage;
+struct Main;
 struct bContext;
 struct Image;
 struct ImageUser;
@@ -61,7 +62,7 @@
 int ED_space_image_show_uvshadow(struct SpaceImage *sima, struct Object *obedit);
 
 /* UI level image (texture) updating... render calls own stuff (too) */
-void ED_image_update_frame(const struct bContext *C);
+void ED_image_update_frame(const struct Main *mainp, int cfra);
 
 /* image_render.c, export for screen_ops.c, render operator */
 void ED_space_image_output(struct bContext *C);

Modified: trunk/blender/source/blender/editors/include/ED_screen.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_screen.h	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/include/ED_screen.h	2010-11-02 09:34:32 UTC (rev 32834)
@@ -109,7 +109,8 @@
 void	ED_screen_new_window(struct bContext *C, struct rcti *position, int type);
 
 /* anim */
-void	ED_update_for_newframe(const struct bContext *C, int mute);
+void	ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
+
 void 	ED_refresh_viewport_fps(struct bContext *C);
 int ED_screen_animation_play(struct bContext *C, int sync, int mode);
 

Modified: trunk/blender/source/blender/editors/physics/physics_fluid.c
===================================================================
--- trunk/blender/source/blender/editors/physics/physics_fluid.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/physics/physics_fluid.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -420,7 +420,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(C, 1);
+		ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
 		
 		/* now scene data should be current according to animation system, so we fill the channels */
 		
@@ -910,7 +910,7 @@
 
 	/* reset to original current frame */
 	scene->r.cfra = origFrame;
-	ED_update_for_newframe(C, 1);
+	ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
 	
 	
 	/* ---- XXX: No Time animation curve for now, leaving this code here for reference 

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -427,7 +427,7 @@
 		RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
 
 	// no redraw needed, we leave state as we entered it
-	ED_update_for_newframe(C, 1);
+	ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
 
 	WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene);
 
@@ -578,6 +578,9 @@
 	if(rj->main != G.main)
 		free_main(rj->main);
 
+	/* else the frame will not update for the original value */
+	ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1);
+	
 	/* XXX render stability hack */
 	G.rendering = 0;
 	WM_main_add_notifier(NC_WINDOW, NULL);

Modified: trunk/blender/source/blender/editors/render/render_opengl.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_opengl.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/render/render_opengl.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -347,7 +347,7 @@
 
 	/* update animated image textures for gpu, etc,
 	 * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
-	ED_image_update_frame(C);
+	ED_image_update_frame(bmain, scene->r.cfra);
 
 	/* go to next frame */
 	while(CFRA<oglrender->nfra) {

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -1450,7 +1450,7 @@
 	CTX_data_scene_set(C, scene);
 	set_scene_bg(CTX_data_main(C), scene);
 	
-	ED_update_for_newframe(C, 1);
+	ED_update_for_newframe(CTX_data_main(C), scene, curscreen, 1);
 	
 	/* complete redraw */
 	WM_event_add_notifier(C, NC_WINDOW, NULL);
@@ -1756,20 +1756,17 @@
 	}
 }
 
-/* results in fully updated anim system */
-void ED_update_for_newframe(const bContext *C, int UNUSED(mute))
-{
-	Main *bmain= CTX_data_main(C);
-	bScreen *screen= CTX_wm_screen(C);
-	Scene *scene= CTX_data_scene(C);
-	
+/* results in fully updated anim system
+ * screen can be NULL */
+void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute))
+{	
 #ifdef DURIAN_CAMERA_SWITCH
 	void *camera= scene_camera_switch_find(scene);
 	if(camera && scene->camera != camera) {
 		bScreen *sc;
 		scene->camera= camera;
 		/* are there cameras in the views that are not in the scene? */
-		for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) {
+		for(sc= bmain->screen.first; sc; sc= sc->id.next) {
 			BKE_screen_view3d_scene_sync(sc);
 		}
 	}
@@ -1779,7 +1776,7 @@
 	
 	/* update animated image textures for gpu, etc,
 	 * call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
-	ED_image_update_frame(C);
+	ED_image_update_frame(bmain, scene->r.cfra);
 
 	/* this function applies the changes too */
 	/* XXX future: do all windows */
@@ -1801,7 +1798,7 @@
 	/* update animated texture nodes */
 	{
 		Tex *tex;
-		for(tex= CTX_data_main(C)->tex.first; tex; tex= tex->id.next)
+		for(tex= bmain->tex.first; tex; tex= tex->id.next)
 			if( tex->use_nodes && tex->nodetree ) {
 				ntreeTexTagAnimated( tex->nodetree );
 			}

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -2547,7 +2547,7 @@
 			sound_seek_scene(C);
 		
 		/* since we follow drawflags, we can't send notifier but tag regions ourselves */
-		ED_update_for_newframe(C, 1);
+		ED_update_for_newframe(CTX_data_main(C), scene, screen, 1);
 		
 		for (sa= screen->areabase.first; sa; sa= sa->next) {
 			ARegion *ar;

Modified: trunk/blender/source/blender/editors/space_image/image_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_ops.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/editors/space_image/image_ops.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -2098,11 +2098,9 @@
 
 /* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */
 
-void ED_image_update_frame(const bContext *C)
+void ED_image_update_frame(const Main *mainp, int cfra)
 {
-	Main *mainp= CTX_data_main(C);
-	Scene *scene= CTX_data_scene(C);
-	wmWindowManager *wm= CTX_wm_manager(C);
+	wmWindowManager *wm;
 	wmWindow *win;
 	Tex *tex;
 	
@@ -2111,13 +2109,13 @@
 		if(tex->type==TEX_IMAGE && tex->ima) {
 			if(ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
 				if(tex->iuser.flag & IMA_ANIM_ALWAYS)
-					BKE_image_user_calc_frame(&tex->iuser, scene->r.cfra, 0);
+					BKE_image_user_calc_frame(&tex->iuser, cfra, 0);
 			}
 		}
 	}
 	
 	/* image window, compo node users */
-	if(wm) {
+	for(wm=mainp->wm.first; wm; wm= wm->id.next) { /* only 1 wm */
 		for(win= wm->windows.first; win; win= win->next) {
 			ScrArea *sa;
 			for(sa= win->screen->areabase.first; sa; sa= sa->next) {
@@ -2126,12 +2124,12 @@
 					BGpic *bgpic;
 					for(bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next)
 						if(bgpic->iuser.flag & IMA_ANIM_ALWAYS)
-							BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0);
+							BKE_image_user_calc_frame(&bgpic->iuser, cfra, 0);
 				}
 				else if(sa->spacetype==SPACE_IMAGE) {
 					SpaceImage *sima= sa->spacedata.first;
 					if(sima->iuser.flag & IMA_ANIM_ALWAYS)
-						BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0);
+						BKE_image_user_calc_frame(&sima->iuser, cfra, 0);
 				}
 				else if(sa->spacetype==SPACE_NODE) {
 					SpaceNode *snode= sa->spacedata.first;
@@ -2143,7 +2141,7 @@
 								ImageUser *iuser= node->storage;
 								if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE))
 									if(iuser->flag & IMA_ANIM_ALWAYS)
-										BKE_image_user_calc_frame(iuser, scene->r.cfra, 0);
+										BKE_image_user_calc_frame(iuser, cfra, 0);
 							}
 						}
 					}

Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-11-02 09:04:57 UTC (rev 32833)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c	2010-11-02 09:34:32 UTC (rev 32834)
@@ -241,7 +241,7 @@
 			if(!G.rendering) {
 
 				/* depsgraph gets called, might send more notifiers */
-				ED_update_for_newframe(C, 1);
+				ED_update_for_newframe(CTX_data_main(C), win->screen->scene, win->screen, 1);
 			}
 		}
 	}
@@ -1636,7 +1636,7 @@
 						int ncfra = sound_sync_scene(scene) * FPS + 0.5;
 						if(ncfra != scene->r.cfra)	{
 							scene->r.cfra = ncfra;
-							ED_update_for_newframe(C, 1);
+							ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
 							WM_event_add_notifier(C, NC_WINDOW, NULL);
 						}
 					}





More information about the Bf-blender-cvs mailing list