diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-02-16 22:24:04 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-02-16 22:24:04 +0300 |
commit | ad01c90ee3942fb2a4a792f0454a136b441f42b4 (patch) | |
tree | f0468981d9f46ae32b386d36ab34d1d9bbda9a2f /source/blender/blenkernel/intern | |
parent | a4c010975a6afaecc2ca8f8284de3febda113369 (diff) |
Revert render slots commit for release, I can't find the bug or even redo
it myself, there will still be render slots just old implementation.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/image.c | 91 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 23 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 4 |
4 files changed, 44 insertions, 80 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 5807e5fb381..91716ce7266 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -321,9 +321,9 @@ static Render *fastshade_get_render(Scene *scene) /* XXX ugly global still, but we can't do preview while rendering */ if(G.rendering==0) { - Render *re= RE_GetRender("_Shade View_"); + Render *re= RE_GetRender("_Shade View_", RE_SLOT_DEFAULT); if(re==NULL) { - re= RE_NewRender("_Shade View_"); + re= RE_NewRender("_Shade View_", RE_SLOT_DEFAULT); RE_Database_Baking(re, scene, 0, 0); /* 0= no faces */ } @@ -337,7 +337,7 @@ static Render *fastshade_get_render(Scene *scene) /* called on file reading */ void fastshade_free_render(void) { - Render *re= RE_GetRender("_Shade View_"); + Render *re= RE_GetRender("_Shade View_", RE_SLOT_DEFAULT); if(re) { RE_Database_Free(re); diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index b1a8ee16f28..d6edb068fa0 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -236,7 +236,7 @@ static void image_free_buffers(Image *ima) if(ima->anim) IMB_free_anim(ima->anim); ima->anim= NULL; - + if(ima->rr) { RE_FreeRenderResult(ima->rr); ima->rr= NULL; @@ -250,8 +250,6 @@ static void image_free_buffers(Image *ima) /* called by library too, do not free ima itself */ void free_image(Image *ima) { - int a; - image_free_buffers(ima); if (ima->packedfile) { freePackedFile(ima->packedfile); @@ -262,11 +260,9 @@ void free_image(Image *ima) if (ima->preview) { BKE_previewimg_free(&ima->preview); } - for(a=0; a<IMA_MAX_RENDER_SLOT; a++) { - if(ima->renders[a]) { - RE_FreeRenderResult(ima->renders[a]); - ima->renders[a]= NULL; - } + if (ima->render_text) { + MEM_freeN(ima->render_text); + ima->render_text= NULL; } } @@ -1092,7 +1088,7 @@ static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix) } { - Render *re= RE_GetRender(scene->id.name); + Render *re= RE_GetRender(scene->id.name, RE_SLOT_RENDERING); RenderStats *stats= re ? RE_GetStats(re):NULL; if (stats && (scene->r.stamp & R_STAMP_RENDERTIME)) { @@ -1598,48 +1594,20 @@ RenderPass *BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser) return rpass; } -RenderResult *BKE_image_acquire_renderresult(Scene *scene, Image *ima) +RenderResult *BKE_image_acquire_renderresult(struct Scene *scene, Image *ima) { - if(ima->rr) { + if(ima->rr) return ima->rr; - } - else if(ima->type==IMA_TYPE_R_RESULT) { - if(ima->render_slot == ima->last_render_slot) - return RE_AcquireResultRead(RE_GetRender(scene->id.name)); - else - return ima->renders[ima->render_slot]; - } - else - return NULL; + else if(ima->type==IMA_TYPE_R_RESULT) + return RE_AcquireResultRead(RE_GetRender(scene->id.name, RE_SLOT_VIEW)); + return NULL; } -void BKE_image_release_renderresult(Scene *scene, Image *ima) +void BKE_image_release_renderresult(struct Scene *scene, Image *ima) { if(ima->rr); - else if(ima->type==IMA_TYPE_R_RESULT) { - if(ima->render_slot == ima->last_render_slot) - RE_ReleaseResult(RE_GetRender(scene->id.name)); - } -} - -void BKE_image_backup_render(Scene *scene, Image *ima) -{ - /* called right before rendering, ima->renders contains render - result pointers for everything but the current render */ - Render *re= RE_GetRender(scene->id.name); - int slot= ima->render_slot, last= ima->last_render_slot; - - if(slot != last) { - if(ima->renders[slot]) { - RE_FreeRenderResult(ima->renders[slot]); - ima->renders[slot]= NULL; - } - - ima->renders[last]= NULL; - RE_SwapResult(re, &ima->renders[last]); - } - - ima->last_render_slot= slot; + else if(ima->type==IMA_TYPE_R_RESULT) + RE_ReleaseResult(RE_GetRender(scene->id.name, RE_SLOT_VIEW)); } /* after imbuf load, openexr type can return with a exrhandle open */ @@ -1949,26 +1917,17 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **lock_ { Render *re= NULL; RenderResult *rr= NULL; - int from_render= (ima->render_slot == ima->last_render_slot); /* if we the caller is not going to release the lock, don't give the image */ if(!lock_r) return NULL; if(iuser && iuser->scene) { - re= RE_GetRender(iuser->scene->id.name); - - /* for the last render we get result for Render itself, - for others a RenderResult is stored in the Image */ - if(from_render) { - rr= RE_AcquireResultRead(re); - /* release is done in BKE_image_release_ibuf using lock_r */ - *lock_r= re; - } - else { - rr= ima->renders[ima->render_slot]; - *lock_r= NULL; - } + re= RE_GetRender(iuser->scene->id.name, RE_SLOT_VIEW); + rr= RE_AcquireResultRead(re); + + /* release is done in BKE_image_release_ibuf using lock_r */ + *lock_r= re; } if(rr==NULL) @@ -1996,15 +1955,9 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **lock_ channels= 4; layer= (iuser)? iuser->layer: 0; pass= (iuser)? iuser->pass: 0; - - memset(&rres, 0, sizeof(rres)); /* this gives active layer, composite or seqence result */ - if(from_render) - RE_AcquireResultImage(RE_GetRender(iuser->scene->id.name), &rres); - else if(rr) - rres= *rr; - + RE_AcquireResultImage(RE_GetRender(iuser->scene->id.name, RE_SLOT_VIEW), &rres); rect= (unsigned int *)rres.rect32; rectf= rres.rectf; rectz= rres.rectz; @@ -2059,15 +2012,13 @@ static ImBuf *image_get_render_result(Image *ima, ImageUser *iuser, void **lock_ ibuf->flags |= IB_zbuffloat; ibuf->dither= dither; - if(from_render) - RE_ReleaseResultImage(re); + RE_ReleaseResultImage(re); ima->ok= IMA_OK_LOADED; return ibuf; } - if(from_render) - RE_ReleaseResultImage(re); + RE_ReleaseResultImage(re); } return NULL; diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index d9f3d5c2c16..9cc154a3c2c 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -204,24 +204,27 @@ Material *add_material(char *name) return ma; } -Material *copy_material(Material *ma) +static Material *copy_material_intern(Material *ma, int for_render) { Material *man; int a; man= copy_libblock(ma); + if(for_render) + BLI_remlink(&G.main->mat, man); + if(!for_render) { #if 0 // XXX old animation system - id_us_plus((ID *)man->ipo); + id_us_plus((ID *)man->ipo); #endif // XXX old animation system - id_us_plus((ID *)man->group); - + id_us_plus((ID *)man->group); + } for(a=0; a<MAX_MTEX; a++) { if(ma->mtex[a]) { man->mtex[a]= MEM_mallocN(sizeof(MTex), "copymaterial"); memcpy(man->mtex[a], ma->mtex[a], sizeof(MTex)); - id_us_plus((ID *)man->mtex[a]->tex); + if(!for_render) id_us_plus((ID *)man->mtex[a]->tex); } } @@ -239,6 +242,16 @@ Material *copy_material(Material *ma) return man; } +Material *copy_material_for_render(Material *ma) +{ + return copy_material_intern(ma, 1); +} + +Material *copy_material(Material *ma) +{ + return copy_material_intern(ma, 0); +} + void make_local_material(Material *ma) { Object *ob; diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index ce09fe8817f..2ee913a6b6b 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -2149,9 +2149,9 @@ static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int oldcfra = seq->scene->r.cfra; if(rendering) - re= RE_NewRender(" do_build_seq_ibuf"); + re= RE_NewRender(" do_build_seq_ibuf", RE_SLOT_DEFAULT); else - re= RE_NewRender(sce->id.name); + re= RE_NewRender(sce->id.name, RE_SLOT_VIEW); /* prevent eternal loop */ doseq= scene->r.scemode & R_DOSEQ; |