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:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-02-16 22:24:04 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-02-16 22:24:04 +0300
commitad01c90ee3942fb2a4a792f0454a136b441f42b4 (patch)
treef0468981d9f46ae32b386d36ab34d1d9bbda9a2f /source/blender/blenkernel
parenta4c010975a6afaecc2ca8f8284de3febda113369 (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')
-rw-r--r--source/blender/blenkernel/BKE_image.h3
-rw-r--r--source/blender/blenkernel/BKE_material.h2
-rw-r--r--source/blender/blenkernel/intern/displist.c6
-rw-r--r--source/blender/blenkernel/intern/image.c91
-rw-r--r--source/blender/blenkernel/intern/material.c23
-rw-r--r--source/blender/blenkernel/intern/sequencer.c4
6 files changed, 46 insertions, 83 deletions
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 8b6c57dba63..153cf3f300e 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -142,9 +142,6 @@ struct RenderPass *BKE_image_multilayer_index(struct RenderResult *rr, struct Im
/* for multilayer images as well as for render-viewer */
struct RenderResult *BKE_image_acquire_renderresult(struct Scene *scene, struct Image *ima);
void BKE_image_release_renderresult(struct Scene *scene, struct Image *ima);
-
-/* for multiple slot render, call this before render */
-void BKE_image_backup_render(struct Scene *scene, struct Image *ima);
/* goes over all textures that use images */
void BKE_image_free_all_textures(void);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index 7ec5d172130..ccac17e9d97 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -77,6 +77,8 @@ int material_in_material(struct Material *parmat, struct Material *mat);
void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col);
+struct Material *copy_material_for_render(struct Material *ma);
+
/* copy/paste */
void clear_matcopybuf(void);
void free_matcopybuf(void);
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;