Simplified/fixed code for rendering with multires+modifiers, no more unfree memory warnings

This commit is contained in:
Nicholas Bishop
2006-12-01 21:35:27 +00:00
parent e906417a3a
commit b4b6dd2654
2 changed files with 4 additions and 30 deletions

View File

@@ -77,6 +77,7 @@
#include "BKE_ipo.h"
#include "BKE_image.h"
#include "BKE_lattice.h"
#include "BKE_library.h"
#include "BKE_material.h"
#include "BKE_main.h"
#include "BKE_mball.h"
@@ -1830,32 +1831,7 @@ static void init_render_mesh(Render *re, Object *ob, Object *par, int only_verts
to allow multires to be applied with modifiers. */
if(me->mr) {
me_store= me;
{
Mesh *men= MEM_callocN(sizeof(Mesh),"mrm render mesh");
men->totvert= me->totvert;
men->totedge= me->totedge;
men->totface= me->totface;
men->mvert= MEM_dupallocN(me->mvert);
men->medge= MEM_dupallocN(me->medge);
men->mface= MEM_dupallocN(me->mface);
if(me->mr) {
MultiresLevel *lvl, *nlvl;
men->mr= MEM_dupallocN(me->mr);
men->mr->levels.first= men->mr->levels.last= NULL;
for(lvl= me->mr->levels.first; lvl; lvl= lvl->next) {
nlvl= MEM_dupallocN(lvl);
BLI_addtail(&men->mr->levels,nlvl);
nlvl->verts= MEM_dupallocN(lvl->verts);
nlvl->faces= MEM_dupallocN(lvl->faces);
nlvl->edges= MEM_dupallocN(lvl->edges);
multires_calc_level_maps(nlvl);
}
}
me= men;
}
me= copy_mesh(me);
ob->data= me;
}
@@ -2094,8 +2070,7 @@ static void init_render_mesh(Render *re, Object *ob, Object *par, int only_verts
dm->release(dm);
if(me_store) {
free_mesh(me_store);
MEM_freeN(me_store);
free_libblock(&G.main->mesh, &me_store->id);
}
}

View File

@@ -584,6 +584,7 @@ MultiresLevel *multires_level_copy(MultiresLevel *orig)
if(orig) {
MultiresLevel *lvl= MEM_dupallocN(orig);
lvl->next= lvl->prev= NULL;
lvl->verts= MEM_dupallocN(orig->verts);
lvl->faces= MEM_dupallocN(orig->faces);
lvl->texcolfaces= MEM_dupallocN(orig->texcolfaces);
@@ -1330,7 +1331,6 @@ void multires_calc_level_maps(MultiresLevel *lvl)
}
}
lvl->vert_face_map= MEM_callocN(sizeof(ListBase)*lvl->totvert,"vert_face_map");
for(i=0; i<lvl->totface; ++i){
for(j=0; j<(lvl->faces[i].v[3]?4:3); ++j){
@@ -1339,7 +1339,6 @@ void multires_calc_level_maps(MultiresLevel *lvl)
BLI_addtail(&lvl->vert_face_map[lvl->faces[i].v[j]],indexnode);
}
}
}
unsigned powi(const unsigned b, const unsigned p)