diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-01-09 22:03:49 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2014-01-13 13:57:51 +0400 |
commit | f86fbc4ea31f743b8a28d4f91dc2eff209740507 (patch) | |
tree | a41e381399d8a50937fa923fa30feeb24ce372d8 /source/blender/blenkernel/intern | |
parent | 9d882031014abdd6daafe3a1235cd263edbc58fc (diff) |
Remove direct displist creation from BKE_vfont_to_curve_ex()
This goes back to ancient era again and such a call isn't
safe for threading and really DAG is to make it sure display
list for dependencies is always there.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/anim.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 7 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/font.c | 21 |
4 files changed, 14 insertions, 22 deletions
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c index b8a6262463c..0d7a1f9b46c 100644 --- a/source/blender/blenkernel/intern/anim.c +++ b/source/blender/blenkernel/intern/anim.c @@ -1619,7 +1619,7 @@ static Object *find_family_object(const char *family, size_t family_len, unsigne } -static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int persistent_id[MAX_DUPLI_RECUR], int level, short flag) +static void font_duplilist(ListBase *lb, Object *par, int persistent_id[MAX_DUPLI_RECUR], int level, short flag) { GHash *family_gh; Object *ob; @@ -1638,7 +1638,7 @@ static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int persiste /* in par the family name is stored, use this to find the other objects */ - BKE_vfont_to_curve_ex(G.main, scene, par, FO_DUPLI, NULL, + BKE_vfont_to_curve_ex(G.main, par, FO_DUPLI, NULL, &text, &text_len, &text_free, &chartransdata); if (text == NULL || chartransdata == NULL) { @@ -1736,7 +1736,7 @@ static void object_duplilist_recursive(EvaluationContext *eval_ctx, } else if (ob->type == OB_FONT) { if (GS(id->name) == ID_SCE) { /* TODO - support dupligroups */ - font_duplilist(duplilist, scene, ob, persistent_id, level + 1, flag); + font_duplilist(duplilist, ob, persistent_id, level + 1, flag); } } } diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 630c1711502..d52752c364c 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -2145,10 +2145,9 @@ void DAG_on_visible_update(Main *bmain, const short do_time) * remade, tag them so they get remade in the scene update loop, * note armature poses or object matrices are preserved and do not * require updates, so we skip those */ - dag_scene_flush_layers(scene, lay); - if (scene->set) { - dag_scene_flush_layers(scene->set, lay); - } + for (sce_iter = scene; sce_iter; sce_iter = sce_iter->set) + dag_scene_flush_layers(sce_iter, lay); + BKE_main_id_tag_idcode(bmain, ID_GR, false); for (SETLOOPER(scene, sce_iter, base)) { diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index da386e41ded..402acf5806c 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -1375,7 +1375,7 @@ static void do_makeDispListCurveTypes(Scene *scene, Object *ob, ListBase *dispba ob->curve_cache->path = NULL; if (ob->type == OB_FONT) { - BKE_vfont_to_curve_nubase(G.main, scene, ob, FO_EDIT, &nubase); + BKE_vfont_to_curve_nubase(G.main, ob, FO_EDIT, &nubase); } else { BKE_nurbList_duplicate(&nubase, BKE_curve_nurbs_get(cu)); diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index 3e512525192..36171c2630d 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -520,8 +520,7 @@ static float char_width(Curve *cu, VChar *che, CharInfo *info) } } -bool BKE_vfont_to_curve_ex(Main *bmain, Scene *scene, Object *ob, int mode, - ListBase *r_nubase, +bool BKE_vfont_to_curve_ex(Main *bmain, Object *ob, int mode, ListBase *r_nubase, const wchar_t **r_text, int *r_text_len, bool *r_text_free, struct CharTrans **r_chartransdata) { @@ -870,10 +869,8 @@ makebreak: int oldflag = cucu->flag; cucu->flag |= (CU_PATH + CU_FOLLOW); - - if (cu->textoncurve->curve_cache == NULL || cu->textoncurve->curve_cache->path == NULL) { - BKE_displist_make_curveTypes(scene, cu->textoncurve, 0); - } + + BLI_assert(cu->textoncurve->curve_cache != NULL); if (cu->textoncurve->curve_cache->path) { float distfac, imat[4][4], imat3[3][3], cmat[3][3]; float minx, maxx, miny, maxy; @@ -1135,21 +1132,17 @@ finally: } -bool BKE_vfont_to_curve_nubase(Main *bmain, Scene *scene, Object *ob, int mode, - ListBase *r_nubase) +bool BKE_vfont_to_curve_nubase(Main *bmain, Object *ob, int mode, ListBase *r_nubase) { BLI_assert(ob->type == OB_FONT); - return BKE_vfont_to_curve_ex(bmain, scene, ob, mode, - r_nubase, + return BKE_vfont_to_curve_ex(bmain, ob, mode, r_nubase, NULL, NULL, NULL, NULL); } -bool BKE_vfont_to_curve(Main *bmain, Scene *scene, Object *ob, int mode) +bool BKE_vfont_to_curve(Main *bmain, Object *ob, int mode) { Curve *cu = ob->data; - return BKE_vfont_to_curve_ex(bmain, scene, ob, mode, - &cu->nurb, - NULL, NULL, NULL, NULL); + return BKE_vfont_to_curve_ex(bmain, ob, mode, &cu->nurb, NULL, NULL, NULL, NULL); } |