[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13477] trunk/blender/source/blender/ render/intern/source/pipeline.c: Two small fixes for FSA render:

Ton Roosendaal ton at blender.org
Wed Jan 30 15:10:37 CET 2008


Revision: 13477
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13477
Author:   ton
Date:     2008-01-30 15:10:37 +0100 (Wed, 30 Jan 2008)

Log Message:
-----------
Two small fixes for FSA render:

- better warning for exr tiles not being equally sized (compositor scenes)
- better check for which exr temp files should be read during merging

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2008-01-30 14:01:05 UTC (rev 13476)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2008-01-30 14:10:37 UTC (rev 13477)
@@ -1944,11 +1944,16 @@
 	do_render_fields_blur_3d(resc);
 }
 
-static void ntree_render_scenes(Render *re)
+static void tag_scenes_for_render(Render *re)
 {
 	bNode *node;
-	int cfra= re->scene->r.cfra;
+	Scene *sce;
 	
+	for(sce= G.main->scene.first; sce; sce= sce->id.next)
+		sce->id.flag &= ~LIB_DOIT;
+	
+	re->scene->id.flag |= LIB_DOIT;
+	
 	if(re->scene->nodetree==NULL) return;
 	
 	/* check for render-layers nodes using other scenes, we tag them LIB_DOIT */
@@ -1957,12 +1962,21 @@
 			if(node->id) {
 				if(node->id != (ID *)re->scene)
 					node->id->flag |= LIB_DOIT;
-				else
-					node->id->flag &= ~LIB_DOIT;
 			}
 		}
 	}
 	
+}
+
+static void ntree_render_scenes(Render *re)
+{
+	bNode *node;
+	int cfra= re->scene->r.cfra;
+	
+	if(re->scene->nodetree==NULL) return;
+	
+	tag_scenes_for_render(re);
+	
 	/* now foreach render-result node tagged we do a full render */
 	/* results are stored in a way compisitor will find it */
 	for(node= re->scene->nodetree->nodes.first; node; node= node->next) {
@@ -2008,6 +2022,7 @@
 	R.i.infostr= NULL;
 }
 
+
 /* reads all buffers, calls optional composite, merges in first result->rectf */
 static void do_merge_fullsample(Render *re, bNodeTree *ntree)
 {
@@ -2024,9 +2039,12 @@
 		/* set all involved renders on the samplebuffers (first was done by render itself) */
 		if(sample) {
 			Render *re1;
+			
+			tag_scenes_for_render(re);
 			for(re1= RenderList.first; re1; re1= re1->next) {
-				if(re1->r.scemode & R_FULL_SAMPLE)
-					read_render_result(re1, sample);
+				if(re1->scene->id.flag & LIB_DOIT)
+					if(re1->r.scemode & R_FULL_SAMPLE)
+						read_render_result(re1, sample);
 			}
 		}
 
@@ -2351,6 +2369,7 @@
 /* evaluating scene options for general Blender render */
 static int render_initialize_from_scene(Render *re, Scene *scene)
 {
+	Scene *sce;
 	int winx, winy;
 	rcti disprect;
 	
@@ -2375,18 +2394,24 @@
 		disprect.ymax= winy;
 	}
 	
-	if(scene->r.scemode & R_EXR_TILE_FILE) {
-		int partx= winx/scene->r.xparts, party= winy/scene->r.yparts;
-		
-		/* stupid exr tiles dont like different sizes */
-		if(winx != partx*scene->r.xparts || winy != party*scene->r.yparts) {
-			re->error("Sorry... exr tile saving only allowed with equally sized parts");
-			return 0;
+	re->scene= scene;
+	
+	/* check all scenes involved */
+	tag_scenes_for_render(re);
+	for(sce= G.main->scene.first; sce; sce= sce->id.next) {
+		if(sce->r.scemode & R_EXR_TILE_FILE) {
+			int partx= winx/sce->r.xparts, party= winy/sce->r.yparts;
+			
+			/* stupid exr tiles dont like different sizes */
+			if(winx != partx*sce->r.xparts || winy != party*sce->r.yparts) {
+				re->error("Sorry... exr tile saving only allowed with equally sized parts");
+				return 0;
+			}
+			if((sce->r.mode & R_FIELDS) && (party & 1)) {
+				re->error("Sorry... exr tile saving only allowed with equally sized parts");
+				return 0;
+			}
 		}
-		if((scene->r.mode & R_FIELDS) && (party & 1)) {
-			re->error("Sorry... exr tile saving only allowed with equally sized parts");
-			return 0;
-		}
 	}
 	
 	if(scene->r.scemode & R_SINGLE_LAYER)
@@ -2399,7 +2424,6 @@
 	/* initstate makes new result, have to send changed tags around */
 	ntreeCompositTagRender(re->scene);
 	
-	re->scene= scene;
 	if(!is_rendering_allowed(re))
 		return 0;
 	





More information about the Bf-blender-cvs mailing list