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:
authorCampbell Barton <ideasman42@gmail.com>2013-05-13 11:13:28 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-05-13 11:13:28 +0400
commit6bd58ac967d2d1094fda4a9b0d8fd3e3107ec822 (patch)
tree67c19fa5d510eb359ff223102442ddc2d8e189f8
parent2e478ca76daf0c103815c5fa5c71369bdb3fbbec (diff)
fix [#35335] Crash when rendering a text object with a remesh modifier and a material texture
-rw-r--r--source/blender/blenkernel/BKE_curve.h2
-rw-r--r--source/blender/blenkernel/intern/curve.c5
-rw-r--r--source/blender/blenkernel/intern/displist.c8
-rw-r--r--source/blender/render/intern/source/convertblender.c2
4 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 8ae7155c205..3be77086336 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -83,7 +83,7 @@ void BKE_curve_editNurb_keyIndex_free(struct EditNurb *editnurb);
void BKE_curve_editNurb_free(struct Curve *cu);
struct ListBase *BKE_curve_editNurbs_get(struct Curve *cu);
-float *BKE_curve_make_orco(struct Scene *scene, struct Object *ob);
+float *BKE_curve_make_orco(struct Scene *scene, struct Object *ob, int *r_numVerts);
float *BKE_curve_surf_make_orco(struct Object *ob);
void BKE_curve_bevelList_make(struct Object *ob);
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index f531c6526dd..35f99806df0 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -1328,7 +1328,7 @@ float *BKE_curve_surf_make_orco(Object *ob)
/* NOTE: This routine is tied to the order of vertex
* built by displist and as passed to the renderer.
*/
-float *BKE_curve_make_orco(Scene *scene, Object *ob)
+float *BKE_curve_make_orco(Scene *scene, Object *ob, int *r_numVerts)
{
Curve *cu = ob->data;
DispList *dl;
@@ -1358,6 +1358,9 @@ float *BKE_curve_make_orco(Scene *scene, Object *ob)
}
}
+ if (r_numVerts)
+ *r_numVerts = numVerts;
+
fp = coord_array = MEM_mallocN(3 * sizeof(float) * numVerts, "cu_orco");
for (dl = disp.first; dl; dl = dl->next) {
if (dl->type == DL_INDEX3) {
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 97923d23fb1..6486c4c150b 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -1102,7 +1102,13 @@ static void add_orco_dm(Scene *scene, Object *ob, DerivedMesh *dm, DerivedMesh *
dm->getVertCos(dm, orco);
}
else {
- orco = (float(*)[3])BKE_curve_make_orco(scene, ob);
+ int totvert_curve;
+ orco = (float(*)[3])BKE_curve_make_orco(scene, ob, &totvert_curve);
+ if (totvert != totvert_curve) {
+ MEM_freeN(orco);
+ orco = MEM_callocN(sizeof(float) * 3 * totvert, "dm orco");
+ dm->getVertCos(dm, orco);
+ }
}
for (a = 0; a < totvert; a++) {
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index a941cde37aa..5721fa3719d 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -871,7 +871,7 @@ static float *get_object_orco(Render *re, Object *ob)
if (!orco) {
if (ELEM(ob->type, OB_CURVE, OB_FONT)) {
- orco = BKE_curve_make_orco(re->scene, ob);
+ orco = BKE_curve_make_orco(re->scene, ob, NULL);
}
else if (ob->type==OB_SURF) {
orco = BKE_curve_surf_make_orco(ob);