diff options
-rw-r--r-- | source/blender/blenkernel/BKE_image.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 13 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 13 | ||||
-rw-r--r-- | source/blender/editors/include/ED_image.h | 3 | ||||
-rw-r--r-- | source/blender/editors/render/render_opengl.c | 4 | ||||
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 4 | ||||
-rw-r--r-- | source/blender/editors/space_image/image_edit.c | 17 |
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); -} |