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:
authorTon Roosendaal <ton@blender.org>2006-02-16 15:27:46 +0300
committerTon Roosendaal <ton@blender.org>2006-02-16 15:27:46 +0300
commit7f4b01ccf076998cac98c52aa6701f35e1c2500f (patch)
tree88d0b4ca129aa96a415b6b612ce77fcfb80a147f /source/blender/render/intern
parent32a9c7b493e85815c548d49303dcb9fe56d23ac6 (diff)
Rendering tricks for improving workflow:
- Button option "Single" in render-layer panel will enable to only render the currently indicated render-layer. It will also skip compositing. - Brought back the 'Local View' render. This will only render the visible objects, but with lights from the original view-layers. To make the option useful, it also temporal enables 'Single', which has the a disadvantage that you need to set the correct render-layer. It is a bit a tricky option though... since its quite invisble and confusing for people who don't know the feature. This might become either a button in 3d header, or use a popup requester to confirm, or... will need to think over! At least; both options display in render window a text to denote the option.
Diffstat (limited to 'source/blender/render/intern')
-rw-r--r--source/blender/render/intern/include/renderpipeline.h4
-rw-r--r--source/blender/render/intern/source/pipeline.c51
-rw-r--r--source/blender/render/intern/source/rendercore.c5
3 files changed, 42 insertions, 18 deletions
diff --git a/source/blender/render/intern/include/renderpipeline.h b/source/blender/render/intern/include/renderpipeline.h
index b6fc3b41703..cd6e5028c22 100644
--- a/source/blender/render/intern/include/renderpipeline.h
+++ b/source/blender/render/intern/include/renderpipeline.h
@@ -31,6 +31,10 @@
#define PIPELINE_H
struct Render;
+struct RenderResult;
+struct RenderLayer;
+
+struct RenderLayer *render_get_active_layer(struct Render *re, struct RenderResult *rr);
#define PASS_VECTOR_MAX 10000.0f
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 72806a554fc..25a4af1fdd3 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -210,7 +210,7 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop)
RenderResult *rr;
RenderLayer *rl;
SceneRenderLayer *srl;
- int rectx, recty;
+ int rectx, recty, nr;
rectx= partrct->xmax - partrct->xmin;
recty= partrct->ymax - partrct->ymin;
@@ -231,8 +231,11 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop)
rr->tilerect.ymax= partrct->ymax - re->disprect.ymax;
/* check renderdata for amount of layers */
- for(srl= re->r.layers.first; srl; srl= srl->next) {
-
+ for(nr=0, srl= re->r.layers.first; srl; srl= srl->next, nr++) {
+
+ if((re->r.scemode & R_SINGLE_LAYER) && nr!=re->r.actlay)
+ continue;
+
rl= MEM_callocT(sizeof(RenderLayer), "new render layer");
BLI_addtail(&rr->layers, rl);
@@ -279,18 +282,20 @@ static RenderResult *new_render_result(Render *re, rcti *partrct, int crop)
}
/* display active layer */
- rr->renlay= BLI_findlink(&rr->layers, re->r.actlay);
+ rr->renlay= render_get_active_layer(re, rr);
return rr;
}
-static int render_result_needs_vector(RenderResult *rr)
+static int render_result_needs_vector(Render *re)
{
- RenderLayer *rl;
+ if(re->r.scemode & R_DOCOMP) {
+ RenderLayer *rl;
- for(rl= rr->layers.first; rl; rl= rl->next)
- if(rl->passflag & SCE_PASS_VECTOR)
- return 1;
+ for(rl= re->result->layers.first; rl; rl= rl->next)
+ if(rl->passflag & SCE_PASS_VECTOR)
+ return 1;
+ }
return 0;
}
@@ -383,6 +388,16 @@ RenderResult *RE_GetResult(Render *re)
return NULL;
}
+RenderLayer *render_get_active_layer(Render *re, RenderResult *rr)
+{
+ if(re->r.scemode & R_SINGLE_LAYER)
+ return rr->layers.first;
+ else
+ return BLI_findlink(&rr->layers, re->r.actlay);
+
+}
+
+
/* fill provided result struct with what's currently active or done */
void RE_GetResultImage(Render *re, RenderResult *rr)
{
@@ -399,7 +414,8 @@ void RE_GetResultImage(Render *re, RenderResult *rr)
rr->rect32= re->result->rect32;
/* active layer */
- rl= BLI_findlink(&re->result->layers, re->r.actlay);
+ rl= render_get_active_layer(re, re->result);
+
if(rl) {
if(rr->rectf==NULL)
rr->rectf= rl->rectf;
@@ -542,7 +558,10 @@ void RE_InitState(Render *re, RenderData *rd, int winx, int winy, rcti *disprect
/* initialize render result */
free_render_result(re->result);
re->result= new_render_result(re, &re->disprect, 0);
-
+
+ /* single layer render disables composit */
+ if(re->r.scemode & R_SINGLE_LAYER)
+ re->r.scemode &= ~R_DOCOMP;
}
}
@@ -847,7 +866,7 @@ void render_one_frame(Render *re)
// re->cfra= cfra; /* <- unused! */
/* make render verts/faces/halos/lamps */
- if(render_result_needs_vector(re->result))
+ if(render_result_needs_vector(re))
RE_Database_FromScene_Vectors(re, re->scene);
else
RE_Database_FromScene(re, re->scene, 1);
@@ -1004,9 +1023,11 @@ static void do_render_final(Render *re)
/* checks if there are render-result nodes that need scene */
ntree_render_scenes(re);
- ntree->stats_draw= render_composit_stats;
- ntreeCompositExecTree(ntree, &re->r, G.background==0);
- ntree->stats_draw= NULL;
+ if(!re->test_break()) {
+ ntree->stats_draw= render_composit_stats;
+ ntreeCompositExecTree(ntree, &re->r, G.background==0);
+ ntree->stats_draw= NULL;
+ }
}
}
}
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 93e5ad8d95f..2b8a939e832 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -3175,8 +3175,7 @@ void zbufshadeDA_tile(RenderPart *pa)
if(edgerect) MEM_freeT(edgerect);
/* display active layer */
- rr->renlay= BLI_findlink(&rr->layers, R.r.actlay);
-
+ rr->renlay= render_get_active_layer(&R, rr);
}
@@ -3279,7 +3278,7 @@ void zbufshade_tile(RenderPart *pa)
}
/* display active layer */
- rr->renlay= BLI_findlink(&rr->layers, R.r.actlay);
+ rr->renlay= render_get_active_layer(&R, rr);
MEM_freeT(pa->rectp); pa->rectp= NULL;
MEM_freeT(pa->rectz); pa->rectz= NULL;