diff options
author | Ton Roosendaal <ton@blender.org> | 2005-12-05 16:22:16 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-12-05 16:22:16 +0300 |
commit | cd014fd5568a8aba3b0bee17796ced03482523ce (patch) | |
tree | c5c2d8b96fd976925d8d70e14969fed1ec7c228a | |
parent | a2d66cbff8a5e5da302ac7c12e4201f79fd9592a (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.c | 21 |
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); } /* ------------------------------------------------------------------------- */ |