diff options
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_DerivedMesh.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_scene.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_sequence.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/cloth.c | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/pointcache.c | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/scene.c | 45 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/seqeffects.c | 9 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequence.c | 26 |
9 files changed, 82 insertions, 12 deletions
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h index 1f6a8f955ba..a3a1ead3924 100644 --- a/source/blender/blenkernel/BKE_DerivedMesh.h +++ b/source/blender/blenkernel/BKE_DerivedMesh.h @@ -86,7 +86,6 @@ struct DerivedMesh { int needsFree; /* checked on ->release, is set to 0 for cached results */ int deformedOnly; /* set by modifier stack if only deformed from original */ BVHCache bvhCache; - struct GPUDrawObject *drawObject; /* Misc. Queries */ diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h index edb4e2cf2a9..09c1ab9f7d6 100644 --- a/source/blender/blenkernel/BKE_mesh.h +++ b/source/blender/blenkernel/BKE_mesh.h @@ -47,7 +47,6 @@ struct Object; struct MTFace; struct VecNor; struct CustomData; -struct Scene; #ifdef __cplusplus extern "C" { diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h index 686fc265de0..ecff62a7952 100644 --- a/source/blender/blenkernel/BKE_scene.h +++ b/source/blender/blenkernel/BKE_scene.h @@ -74,6 +74,7 @@ void scene_select_base(struct Scene *sce, struct Base *selbase); /* checks for cycle, returns 1 if it's all OK */ int scene_check_setscene(struct Scene *sce); +void scene_update_tagged(struct Scene *sce); void scene_update_for_newframe(struct Scene *sce, unsigned int lay); void scene_add_render_layer(struct Scene *sce); diff --git a/source/blender/blenkernel/BKE_sequence.h b/source/blender/blenkernel/BKE_sequence.h index acc0d8576a1..b42f023d12a 100644 --- a/source/blender/blenkernel/BKE_sequence.h +++ b/source/blender/blenkernel/BKE_sequence.h @@ -181,6 +181,7 @@ int seq_tx_test(struct Sequence * seq); int check_single_seq(struct Sequence *seq); void fix_single_seq(struct Sequence *seq); int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test); +void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs); int shuffle_seq(struct ListBase * seqbasep, struct Sequence *test); int shuffle_seq_time(ListBase * seqbasep); void free_imbuf_seq(struct Scene *scene, struct ListBase * seqbasep, int check_mem_usage); diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c index 6c4c7daea7f..dc9a70f2767 100644 --- a/source/blender/blenkernel/intern/cloth.c +++ b/source/blender/blenkernel/intern/cloth.c @@ -154,6 +154,7 @@ void cloth_init ( ClothModifierData *clmd ) clmd->sim_parms->defgoal = 0.0f; clmd->sim_parms->goalspring = 1.0f; clmd->sim_parms->goalfrict = 0.0f; + clmd->sim_parms->velocity_smooth = 0.0f; if(!clmd->sim_parms->effector_weights) clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL); diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c index 4333d22654c..7b2cf72e311 100644 --- a/source/blender/blenkernel/intern/pointcache.c +++ b/source/blender/blenkernel/intern/pointcache.c @@ -1075,11 +1075,12 @@ static int BKE_ptcache_id_filename(PTCacheID *pid, char *filename, int cfra, sho } if(strcmp(pid->cache->name, "")==0 && (pid->cache->flag & PTCACHE_EXTERNAL)==0) { idname = (pid->ob->id.name+2); - /* convert chars to hex so they are always a valid filename */ - BLI_strhex(newname, MAX_PTCACHE_FILE - len, idname); - len += strlen(newname); - newname = filename + len; + while('\0' != *idname) { + snprintf(newname, MAX_PTCACHE_FILE, "%02X", (char)(*idname++)); + newname+=2; + len += 2; + } } else { int temp = (int)strlen(pid->cache->name); diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c index 27cb3ad834b..368e05fa441 100644 --- a/source/blender/blenkernel/intern/scene.c +++ b/source/blender/blenkernel/intern/scene.c @@ -29,6 +29,7 @@ * ***** END GPL LICENSE BLOCK ***** */ +#include <stddef.h> #include <stdio.h> #include <string.h> @@ -77,6 +78,7 @@ #include "BKE_node.h" #include "BKE_object.h" #include "BKE_paint.h" +#include "BKE_pointcache.h" #include "BKE_scene.h" #include "BKE_sequence.h" #include "BKE_world.h" @@ -772,7 +774,7 @@ float frame_to_float (Scene *scene, int cfra) /* see also bsystem_time in objec return ctime; } -static void scene_update(Scene *sce, unsigned int lay) +static void scene_update_newframe(Scene *sce, unsigned int lay) { Base *base; Object *ob; @@ -804,6 +806,40 @@ static void scene_update(Scene *sce, unsigned int lay) } } +/* this is called in main loop, doing tagged updates before redraw */ +void scene_update_tagged(Scene *scene) +{ + Scene *sce; + Base *base; + float ctime = frame_to_float(scene, scene->r.cfra); + + /* update all objects: drivers, matrices, displists, etc. flags set + by depgraph or manual, no layer check here, gets correct flushed */ + + /* sets first, we allow per definition current scene to have + dependencies on sets, but not the other way around. */ + if(scene->set) { + for(SETLOOPER(scene->set, base)) + object_handle_update(scene, base->object); + } + + for(base= scene->base.first; base; base= base->next) { + object_handle_update(scene, base->object); + } + + /* recalc scene animation data here (for sequencer) */ + { + AnimData *adt= BKE_animdata_from_id(&scene->id); + + if(adt && (adt->recalc & ADT_RECALC_ANIM)) + BKE_animsys_evaluate_animdata(&scene->id, adt, ctime, 0); + } + + BKE_ptcache_quick_cache_all(scene); + + /* in the future this should handle updates for all datablocks, not + only objects and scenes. - brecht */ +} /* applies changes right away, does all sets too */ void scene_update_for_newframe(Scene *sce, unsigned int lay) @@ -815,9 +851,9 @@ void scene_update_for_newframe(Scene *sce, unsigned int lay) /* sets first, we allow per definition current scene to have dependencies on sets */ for(sce= sce->set; sce; sce= sce->set) - scene_update(sce, lay); + scene_update_newframe(sce, lay); - scene_update(scene, lay); + scene_update_newframe(scene, lay); } /* return default layer, also used to patch old files */ @@ -827,7 +863,8 @@ void scene_add_render_layer(Scene *sce) int tot= 1 + BLI_countlist(&sce->r.layers); srl= MEM_callocN(sizeof(SceneRenderLayer), "new render layer"); - sprintf(srl->name, "%d RenderLayer", tot); + sprintf(srl->name, "RenderLayer"); + BLI_uniquename(&sce->r.layers, srl, "RenderLayer", '.', offsetof(SceneRenderLayer, name), 32); BLI_addtail(&sce->r.layers, srl); /* note, this is also in render, pipeline.c, to make layer when scenedata doesnt have it */ diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c index a1f81bf6166..50fa34b52e3 100644 --- a/source/blender/blenkernel/intern/seqeffects.c +++ b/source/blender/blenkernel/intern/seqeffects.c @@ -2007,8 +2007,12 @@ static void do_transform(Sequence * seq,float facf0, int x, int y, yo = y; //factor scale - factxScale = scale->ScalexIni + (scale->ScalexFin - scale->ScalexIni) * facf0; - factyScale = scale->ScaleyIni + (scale->ScaleyFin - scale->ScaleyIni) * facf0; + if (scale->uniform_scale) { + factxScale = factyScale = scale->ScalexIni + (scale->ScalexFin - scale->ScalexIni) * facf0; + } else { + factxScale = scale->ScalexIni + (scale->ScalexFin - scale->ScalexIni) * facf0; + factyScale = scale->ScaleyIni + (scale->ScaleyFin - scale->ScaleyIni) * facf0; + } //Factor translate if(!scale->percent){ @@ -3080,6 +3084,7 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type) rval.free = free_transform_effect; rval.copy = copy_transform_effect; rval.execute = do_transform_effect; + rval.get_default_fac = get_default_fac_fade; break; case SEQ_SPEED: rval.init = init_speed_effect; diff --git a/source/blender/blenkernel/intern/sequence.c b/source/blender/blenkernel/intern/sequence.c index f11aca32da7..71382a53d5d 100644 --- a/source/blender/blenkernel/intern/sequence.c +++ b/source/blender/blenkernel/intern/sequence.c @@ -3529,6 +3529,32 @@ void seq_update_muting(Editing *ed) } } + +/* XXX - hackish function needed for transforming strips! TODO - have some better solution */ +void seq_offset_animdata(Scene *scene, Sequence *seq, int ofs) +{ + char str[32]; + FCurve *fcu; + + if(scene->adt==NULL || ofs==0) + return; + + sprintf(str, "[\"%s\"]", seq->name+2); + + for (fcu= scene->adt->action->curves.first; fcu; fcu= fcu->next) { + if(strstr(fcu->rna_path, "sequence_editor.sequences_all[") && strstr(fcu->rna_path, str)) { + int i; + for (i = 0; i < fcu->totvert; i++) { + BezTriple *bezt= &fcu->bezt[i]; + bezt->vec[0][0] += ofs; + bezt->vec[1][0] += ofs; + bezt->vec[2][0] += ofs; + } + } + } +} + + Sequence *active_seq_get(Scene *scene) { Editing *ed= seq_give_editing(scene, FALSE); |