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:
authorTon Roosendaal <ton@blender.org>2005-12-05 16:22:16 +0300
committerTon Roosendaal <ton@blender.org>2005-12-05 16:22:16 +0300
commitcd014fd5568a8aba3b0bee17796ced03482523ce (patch)
treec5c2d8b96fd976925d8d70e14969fed1ec7c228a
parenta2d66cbff8a5e5da302ac7c12e4201f79fd9592a (diff)
Bugfix #3512
Duplicated objects, that have modifiers, didn't render (or not correct). Bug reported case with softbody being duplicated. The duplicator system is ancient... integration with new derivedmesh or modifiers has not been really done yet.
-rw-r--r--source/blender/renderconverter/intern/convertBlenderScene.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c
index 07ae6dbcdd2..e1fc8556d73 100644
--- a/source/blender/renderconverter/intern/convertBlenderScene.c
+++ b/source/blender/renderconverter/intern/convertBlenderScene.c
@@ -1380,13 +1380,13 @@ static void init_render_mesh(Object *ob)
Material *ma;
MSticky *ms = NULL;
PartEff *paf;
+ DispListMesh *dlm = NULL;
+ DerivedMesh *dm;
unsigned int *vertcol;
float xn, yn, zn, imat[3][3], mat[4][4]; //nor[3],
float *orco=0;
int a, a1, ok, need_orco=0, totvlako, totverto, vertofs;
- int end, do_autosmooth=0, totvert = 0;
- DispListMesh *dlm = NULL;
- DerivedMesh *dm;
+ int end, do_autosmooth=0, totvert = 0, dm_needsfree;
me= ob->data;
@@ -1422,7 +1422,18 @@ static void init_render_mesh(Object *ob)
if(need_orco) orco = get_object_orco(ob);
- dm = mesh_create_derived_render(ob);
+ /* duplicators don't call modifier stack */
+ if(ob->flag&OB_FROMDUPLI) {
+ dm= ob->derivedFinal;
+ dm_needsfree= 0;
+ }
+ else {
+ dm = mesh_create_derived_render(ob);
+ dm_needsfree= 1;
+ }
+
+ if(dm==NULL) return; /* in case duplicated object fails? */
+
dlm = dm->convertToDispListMesh(dm, 1);
mvert= dlm->mvert;
@@ -1622,7 +1633,7 @@ static void init_render_mesh(Object *ob)
calc_vertexnormals(totverto, totvlako);
if(dlm) displistmesh_free(dlm);
- dm->release(dm);
+ if(dm_needsfree) dm->release(dm);
}
/* ------------------------------------------------------------------------- */