[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56970] trunk/blender/source/blender: Fix #35449: image sequences to drive e.g.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu May 23 00:17:07 CEST 2013


Revision: 56970
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56970
Author:   blendix
Date:     2013-05-22 22:17:07 +0000 (Wed, 22 May 2013)
Log Message:
-----------
Fix #35449: image sequences to drive e.g. particle length or used in modifiers
were no properly updating when rendering animations.

The render engine was only updating the image user current frame on images used
by material textures. Now moved the function that updates all from the editors
to blenkernel level and do it on all frame changes.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/scene.c
    trunk/blender/source/blender/editors/include/ED_image.h
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/screen/screen_edit.c
    trunk/blender/source/blender/editors/space_image/image_edit.c

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2013-05-22 22:17:07 UTC (rev 56970)
@@ -182,6 +182,7 @@
 void BKE_image_user_check_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
 int  BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, int fieldnr, short *r_is_in_range);
 void BKE_image_user_file_path(struct ImageUser *iuser, struct Image *ima, char *path); 
+void BKE_image_update_frame(const struct Main *bmain, int cfra);
 
 /* sets index offset for multilayer files */
 struct RenderPass *BKE_image_multilayer_index(struct RenderResult *rr, struct ImageUser *iuser);

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2013-05-22 22:17:07 UTC (rev 56970)
@@ -3305,6 +3305,19 @@
 	}
 }
 
+/* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */
+static void image_update_frame(struct Image *UNUSED(ima), struct ImageUser *iuser, void *customdata)
+{
+	int cfra = *(int *)customdata;
+
+	BKE_image_user_check_frame_calc(iuser, cfra, 0);
+}
+
+void BKE_image_update_frame(const Main *bmain, int cfra)
+{
+	BKE_image_walk_all_users(bmain, &cfra, image_update_frame);
+}
+
 void BKE_image_user_file_path(ImageUser *iuser, Image *ima, char *filepath)
 {
 	BLI_strncpy(filepath, ima->name, FILE_MAX);

Modified: trunk/blender/source/blender/blenkernel/intern/scene.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/scene.c	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/blenkernel/intern/scene.c	2013-05-22 22:17:07 UTC (rev 56970)
@@ -70,6 +70,7 @@
 #include "BKE_global.h"
 #include "BKE_group.h"
 #include "BKE_idprop.h"
+#include "BKE_image.h"
 #include "BKE_library.h"
 #include "BKE_main.h"
 #include "BKE_mask.h"
@@ -1236,6 +1237,14 @@
 {
 	float ctime = BKE_scene_frame_get(sce);
 	Scene *sce_iter;
+
+	/* keep this first */
+	BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
+	BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
+
+	/* update animated image textures for particles, modifiers, gpu, etc,
+	 * call this at the start so modifiers with textures don't lag 1 frame */
+	BKE_image_update_frame(bmain, sce->r.cfra);
 	
 	/* rebuild rigid body worlds before doing the actual frame update
 	 * this needs to be done on start frame but animation playback usually starts one frame later
@@ -1243,10 +1252,6 @@
 	 */
 	scene_rebuild_rbw_recursive(sce, ctime);
 
-	/* keep this first */
-	BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_FRAME_CHANGE_PRE);
-	BLI_callback_exec(bmain, &sce->id, BLI_CB_EVT_SCENE_UPDATE_PRE);
-
 	sound_set_cfra(sce->r.cfra);
 	
 	/* clear animation overrides */

Modified: trunk/blender/source/blender/editors/include/ED_image.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_image.h	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/editors/include/ED_image.h	2013-05-22 22:17:07 UTC (rev 56970)
@@ -75,9 +75,6 @@
 int ED_space_image_maskedit_poll(struct bContext *C);
 int ED_space_image_maskedit_mask_poll(struct bContext *C);
 
-/* UI level image (texture) updating... render calls own stuff (too) */
-void ED_image_update_frame(const struct Main *mainp, int cfra);
-
 void ED_image_draw_info(struct Scene *scene, struct ARegion *ar, int color_manage, int use_default_view, int channels, int x, int y,
                         const unsigned char cp[4], const float fp[4], const float linearcol[4], int *zp, float *zpf);
 

Modified: trunk/blender/source/blender/editors/render/render_opengl.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_opengl.c	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/editors/render/render_opengl.c	2013-05-22 22:17:07 UTC (rev 56970)
@@ -542,10 +542,6 @@
 		}
 	}
 
-	/* update animated image textures for gpu, etc,
-	 * call before BKE_scene_update_for_newframe so modifiers with textures don't lag 1 frame */
-	ED_image_update_frame(bmain, CFRA);
-
 	BKE_scene_update_for_newframe(bmain, scene, screen_opengl_layers(oglrender));
 
 	if (view_context) {

Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c	2013-05-22 22:17:07 UTC (rev 56970)
@@ -1880,10 +1880,6 @@
 
 	//extern void audiostream_scrub(unsigned int frame);	/* seqaudio.c */
 	
-	/* update animated image textures for gpu, etc,
-	 * call before BKE_scene_update_for_newframe so modifiers with textures don't lag 1 frame */
-	ED_image_update_frame(bmain, scene->r.cfra);
-
 	ED_clip_update_frame(bmain, scene->r.cfra);
 
 	/* get layers from all windows */

Modified: trunk/blender/source/blender/editors/space_image/image_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_image/image_edit.c	2013-05-22 22:03:14 UTC (rev 56969)
+++ trunk/blender/source/blender/editors/space_image/image_edit.c	2013-05-22 22:17:07 UTC (rev 56970)
@@ -373,20 +373,3 @@
 	return FALSE;
 }
 
-/******************** TODO ********************/
-
-/* XXX notifier? */
-
-/* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */
-
-static void image_update_frame(struct Image *UNUSED(ima), struct ImageUser *iuser, void *customdata)
-{
-	int cfra = *(int *)customdata;
-
-	BKE_image_user_check_frame_calc(iuser, cfra, 0);
-}
-
-void ED_image_update_frame(const Main *mainp, int cfra)
-{
-	BKE_image_walk_all_users(mainp, &cfra, image_update_frame);
-}




More information about the Bf-blender-cvs mailing list