diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-05-13 11:13:28 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-05-13 11:13:28 +0400 |
commit | 6bd58ac967d2d1094fda4a9b0d8fd3e3107ec822 (patch) | |
tree | 67c19fa5d510eb359ff223102442ddc2d8e189f8 /source | |
parent | 2e478ca76daf0c103815c5fa5c71369bdb3fbbec (diff) |
fix [#35335] Crash when rendering a text object with a remesh modifier and a material texture
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_curve.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/curve.c | 5 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 8 | ||||
-rw-r--r-- | source/blender/render/intern/source/convertblender.c | 2 |
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); |