diff options
author | Janne Karhu <jhkarh@gmail.com> | 2009-07-04 16:09:21 +0400 |
---|---|---|
committer | Janne Karhu <jhkarh@gmail.com> | 2009-07-04 16:09:21 +0400 |
commit | 7055702530f778ebf66e53bc4336e812fb0cd885 (patch) | |
tree | 1d8537a358d51432eadb7546baf0ad738bf15434 /source | |
parent | 84c614ff5fed57567d23177096e2bae51f66a21a (diff) |
Rendering animations with particle trails cached.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_pointcache.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/pointcache.c | 3 | ||||
-rw-r--r-- | source/blender/editors/physics/ed_pointcache.c | 3 | ||||
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 13 |
4 files changed, 13 insertions, 7 deletions
diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h index 3f1c45d28ec..c5d423c13ba 100644 --- a/source/blender/blenkernel/BKE_pointcache.h +++ b/source/blender/blenkernel/BKE_pointcache.h @@ -114,6 +114,7 @@ typedef struct PTCacheBaker { struct Scene *scene; int bake; int render; + int anim_init; int quick_step; struct PTCacheID *pid; int (*break_test)(void *data); diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index b8a0b111324..2fbd0278e0e 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -1154,6 +1154,7 @@ void BKE_ptcache_quick_cache_all(Scene *scene) baker.progressbar=NULL; baker.progresscontext=NULL; baker.render=0; + baker.anim_init = 0; baker.scene=scene; if(count_quick_cache(scene, &baker.quick_step)) @@ -1171,7 +1172,7 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker) float frameleno = scene->r.framelen; int cfrao = CFRA; int startframe = MAXFRAME; - int endframe = CFRA; + int endframe = baker->anim_init ? scene->r.sfra : CFRA; int bake = baker->bake; int render = baker->render; int step = baker->quick_step; diff --git a/source/blender/editors/physics/ed_pointcache.c b/source/blender/editors/physics/ed_pointcache.c index edd668b46bb..ad60be3ba7d 100644 --- a/source/blender/editors/physics/ed_pointcache.c +++ b/source/blender/editors/physics/ed_pointcache.c @@ -82,6 +82,7 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op) baker.pid = NULL; baker.bake = RNA_boolean_get(op->ptr, "bake"); baker.render = 0; + baker.anim_init = 0; baker.quick_step = 1; baker.break_test = cache_break_test; baker.break_data = NULL; @@ -172,6 +173,7 @@ static int ptcache_bake_cloth_exec(bContext *C, wmOperator *op) baker.pid = &pid; baker.bake = RNA_boolean_get(op->ptr, "bake"); baker.render = 0; + baker.anim_init = 0; baker.quick_step = 1; baker.break_test = cache_break_test; baker.break_data = NULL; @@ -277,6 +279,7 @@ static int ptcache_bake_particle_system_exec(bContext *C, wmOperator *op) baker.pid = &pid; baker.bake = RNA_boolean_get(op->ptr, "bake"); baker.render = 0; + baker.anim_init = 0; baker.quick_step = 1; baker.break_test = cache_break_test; baker.break_data = NULL; diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index ccc793e4235..ec2660566f5 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2413,7 +2413,7 @@ static int is_rendering_allowed(Render *re) return 1; } -static void update_physics_cache(Render *re, Scene *scene) +static void update_physics_cache(Render *re, Scene *scene, int anim_init) { PTCacheBaker baker; @@ -2421,6 +2421,7 @@ static void update_physics_cache(Render *re, Scene *scene) baker.pid = NULL; baker.bake = 0; baker.render = 1; + baker.anim_init = 1; baker.quick_step = 1; baker.break_test = re->test_break; baker.break_data = re->tbh; @@ -2429,7 +2430,7 @@ static void update_physics_cache(Render *re, Scene *scene) BKE_ptcache_make_cache(&baker); } /* evaluating scene options for general Blender render */ -static int render_initialize_from_scene(Render *re, Scene *scene, int anim) +static int render_initialize_from_scene(Render *re, Scene *scene, int anim, int anim_init) { int winx, winy; rcti disprect; @@ -2467,7 +2468,7 @@ static int render_initialize_from_scene(Render *re, Scene *scene, int anim) tag_scenes_for_render(re); /* make sure dynamics are up to date */ - update_physics_cache(re, scene); + update_physics_cache(re, scene, anim_init); if(scene->r.scemode & R_SINGLE_LAYER) push_render_result(re); @@ -2497,7 +2498,7 @@ void RE_BlenderFrame(Render *re, Scene *scene, int frame) scene->r.cfra= frame; - if(render_initialize_from_scene(re, scene, 0)) { + if(render_initialize_from_scene(re, scene, 0, 0)) { do_render_all_options(re); } @@ -2586,7 +2587,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) int nfra; /* do not fully call for each frame, it initializes & pops output window */ - if(!render_initialize_from_scene(re, scene, 0)) + if(!render_initialize_from_scene(re, scene, 0, 1)) return; /* ugly global still... is to prevent renderwin events and signal subsurfs etc to make full resol */ @@ -2617,7 +2618,7 @@ void RE_BlenderAnim(Render *re, Scene *scene, int sfra, int efra, int tfra) char name[FILE_MAX]; /* only border now, todo: camera lens. (ton) */ - render_initialize_from_scene(re, scene, 1); + render_initialize_from_scene(re, scene, 1, 0); if(nfra!=scene->r.cfra) { /* |