diff options
author | Ton Roosendaal <ton@blender.org> | 2005-03-05 01:17:52 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-03-05 01:17:52 +0300 |
commit | c8a84be5f41de6f7958f302eb6b72d153127bd3c (patch) | |
tree | 7ad8c5184930fb39ed54f8eb08ceef9ed2a7109a /source/blender/renderconverter | |
parent | 512aabd68e6cee0540f1e09766c5bd956b432ed7 (diff) |
Bug fix, provided by Martin Dickopp;
The dynamical allocated arrays (rwenzlaff, april 03) for render vertices/
faces/halos were freed in a way that requires the last element of array to
be NULL.
This wasn't coded however, causing memory errors in exceptional cases;
like when amount of faces/vertices is exact between 261888 and 262144. :)
Diffstat (limited to 'source/blender/renderconverter')
-rw-r--r-- | source/blender/renderconverter/intern/convertBlenderScene.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index a74f1f16aad..0a582a079cd 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -961,6 +961,14 @@ static void render_particle_system(Object *ob, PartEff *paf) /* ------------------------------------------------------------------------- */ +/* when objects are duplicated, they are freed immediate, but still might be +in use for render... */ +static Object *vlr_set_ob(Object *ob) +{ + if(ob->flag & OB_FROMDUPLI) return (Object *)ob->id.newid; + return ob; +} + static void render_static_particle_system(Object *ob, PartEff *paf) { Particle *pa=0; @@ -1175,14 +1183,6 @@ static Material *give_render_material(Object *ob, int nr) return ma; } -/* when objects are duplicated, they are freed immediate, but still might be - in use for render... */ -static Object *vlr_set_ob(Object *ob) -{ - if(ob->flag & OB_FROMDUPLI) return (Object *)ob->newid; - return ob; -} - /* ------------------------------------------------------------------------- */ static void init_render_mball(Object *ob) { @@ -2703,22 +2703,25 @@ void RE_freeRotateBlenderScene(void) if(R.la[a]->jitter) MEM_freeN(R.la[a]->jitter); MEM_freeN(R.la[a]); } + + /* note; these pointer arrays were allocated, with last element NULL to stop loop */ a=0; while(R.blove[a]) { MEM_freeN(R.blove[a]); - R.blove[a]=0; + R.blove[a]= NULL; a++; } + a=0; while(R.blovl[a]) { MEM_freeN(R.blovl[a]); - R.blovl[a]=0; + R.blovl[a]= NULL; a++; } a=0; while(R.bloha[a]) { MEM_freeN(R.bloha[a]); - R.bloha[a]=0; + R.bloha[a]= NULL; a++; } |