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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2014-01-09 22:03:49 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2014-01-13 13:57:51 +0400
commitf86fbc4ea31f743b8a28d4f91dc2eff209740507 (patch)
treea41e381399d8a50937fa923fa30feeb24ce372d8 /source/blender/blenkernel
parent9d882031014abdd6daafe3a1235cd263edbc58fc (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')
-rw-r--r--source/blender/blenkernel/BKE_font.h7
-rw-r--r--source/blender/blenkernel/intern/anim.c6
-rw-r--r--source/blender/blenkernel/intern/depsgraph.c7
-rw-r--r--source/blender/blenkernel/intern/displist.c2
-rw-r--r--source/blender/blenkernel/intern/font.c21
5 files changed, 17 insertions, 26 deletions
diff --git a/source/blender/blenkernel/BKE_font.h b/source/blender/blenkernel/BKE_font.h
index d7c40e8e719..b60c833c686 100644
--- a/source/blender/blenkernel/BKE_font.h
+++ b/source/blender/blenkernel/BKE_font.h
@@ -38,7 +38,6 @@ extern "C" {
#include <wchar.h>
struct VFont;
-struct Scene;
struct Object;
struct Curve;
struct objfnt;
@@ -85,13 +84,13 @@ void BKE_vfont_free(struct VFont *sc);
struct VFont *BKE_vfont_builtin_get(void);
struct VFont *BKE_vfont_load(struct Main *bmain, const char *name);
-bool BKE_vfont_to_curve_ex(struct Main *bmain, struct Scene *scene, struct Object *ob, int mode,
+bool BKE_vfont_to_curve_ex(struct Main *bmain, struct Object *ob, int mode,
struct ListBase *r_nubase,
const wchar_t **r_text, int *r_text_len, bool *r_text_free,
struct CharTrans **r_chartransdata);
-bool BKE_vfont_to_curve_nubase(struct Main *bmain, struct Scene *scene, struct Object *ob, int mode,
+bool BKE_vfont_to_curve_nubase(struct Main *bmain, struct Object *ob, int mode,
struct ListBase *r_nubase);
-bool BKE_vfont_to_curve(struct Main *bmain, struct Scene *scene, struct Object *ob, int mode);
+bool BKE_vfont_to_curve(struct Main *bmain, struct Object *ob, int mode);
int BKE_vfont_select_get(struct Object *ob, int *r_start, int *r_end);
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);
}