Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-23 02:17:07 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-23 02:17:07 +0400
commit6bc2d572350c4bb86d81118813dd0fded7cd17e6 (patch)
tree2ef5263a732bff8d7c820bc9af42aa624941a7bc /source
parent3f8a146a1e44e4903b0a99608106b5a911bd4166 (diff)
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.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_image.h1
-rw-r--r--source/blender/blenkernel/intern/image.c13
-rw-r--r--source/blender/blenkernel/intern/scene.c13
-rw-r--r--source/blender/editors/include/ED_image.h3
-rw-r--r--source/blender/editors/render/render_opengl.c4
-rw-r--r--source/blender/editors/screen/screen_edit.c4
-rw-r--r--source/blender/editors/space_image/image_edit.c17
7 files changed, 23 insertions, 32 deletions
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 0f8e25b9df5..eefaac07b12 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -182,6 +182,7 @@ void BKE_image_user_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
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);
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 64bc4928e35..919738afe7a 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -3305,6 +3305,19 @@ void BKE_image_user_check_frame_calc(ImageUser *iuser, int cfra, int fieldnr)
}
}
+/* 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);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index e93c32ddf64..76727987355 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -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 @@ void BKE_scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
{
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 @@ void BKE_scene_update_for_newframe(Main *bmain, Scene *sce, unsigned int lay)
*/
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 */
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h
index 11b8aa5e60a..bdc5cbdbefe 100644
--- a/source/blender/editors/include/ED_image.h
+++ b/source/blender/editors/include/ED_image.h
@@ -75,9 +75,6 @@ int ED_space_image_check_show_maskedit(struct Scene *scene, struct SpaceImage *s
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);
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index 659293f8fa0..231f5bc8eb4 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -542,10 +542,6 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
}
}
- /* 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) {
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 61abe73e7b2..e3c5161463b 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1880,10 +1880,6 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute))
//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 */
diff --git a/source/blender/editors/space_image/image_edit.c b/source/blender/editors/space_image/image_edit.c
index c78a902fca9..217a9687c01 100644
--- a/source/blender/editors/space_image/image_edit.c
+++ b/source/blender/editors/space_image/image_edit.c
@@ -373,20 +373,3 @@ int ED_space_image_maskedit_mask_poll(bContext *C)
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);
-}