[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50395] trunk/blender/source/blender: fix for some errors reported by http://clang.blenderheads.org/trunk/ in r50384.

Campbell Barton ideasman42 at gmail.com
Tue Sep 4 20:27:47 CEST 2012


Revision: 50395
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50395
Author:   campbellbarton
Date:     2012-09-04 18:27:47 +0000 (Tue, 04 Sep 2012)
Log Message:
-----------
fix for some errors reported by http://clang.blenderheads.org/trunk/ in r50384.
- when renderlayers could not be found in save_render_result_tile() blender would crash.
- RE_engine_end_result() / rna end_result() didn't set result argument as required.
... also some style cleanup.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50384

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/makesrna/intern/rna_render.c
    trunk/blender/source/blender/render/intern/source/external_engine.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/render_result.c

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2012-09-04 17:28:36 UTC (rev 50394)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2012-09-04 18:27:47 UTC (rev 50395)
@@ -2526,7 +2526,9 @@
 	dither = iuser->scene->r.dither_intensity;
 
 	/* combined layer gets added as first layer */
-	if (rres.have_combined && layer == 0) ;
+	if (rres.have_combined && layer == 0) {
+		/* pass */
+	}
 	else if (rres.layers.first) {
 		RenderLayer *rl = BLI_findlink(&rres.layers, layer - (rres.have_combined ? 1 : 0));
 		if (rl) {

Modified: trunk/blender/source/blender/makesrna/intern/rna_render.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_render.c	2012-09-04 17:28:36 UTC (rev 50394)
+++ trunk/blender/source/blender/makesrna/intern/rna_render.c	2012-09-04 18:27:47 UTC (rev 50395)
@@ -317,7 +317,7 @@
 	RNA_def_property_flag(prop, PROP_REQUIRED);
 	prop = RNA_def_int(func, "h", 0, 0, INT_MAX, "Height", "", 0, INT_MAX);
 	RNA_def_property_flag(prop, PROP_REQUIRED);
-	prop = RNA_def_string(func, "layer", "", 0, "Layer", "Single layer to get render result for");
+	RNA_def_string(func, "layer", "", 0, "Layer", "Single layer to get render result for");  /* NULL ok here */
 	prop = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
 	RNA_def_function_return(func, prop);
 
@@ -327,6 +327,7 @@
 
 	func = RNA_def_function(srna, "end_result", "RE_engine_end_result");
 	prop = RNA_def_pointer(func, "result", "RenderResult", "Result", "");
+	RNA_def_property_flag(prop, PROP_REQUIRED);
 	prop = RNA_def_boolean(func, "cancel", 0, "Cancel", "Don't merge back results");
 	RNA_def_property_flag(prop, PROP_REQUIRED);
 

Modified: trunk/blender/source/blender/render/intern/source/external_engine.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/external_engine.c	2012-09-04 17:28:36 UTC (rev 50394)
+++ trunk/blender/source/blender/render/intern/source/external_engine.c	2012-09-04 18:27:47 UTC (rev 50395)
@@ -205,17 +205,19 @@
 	Render *re = engine->re;
 	RenderPart *pa;
 
-	if (!result)
+	if (!result) {
 		return;
+	}
 
 	/* merge. on break, don't merge in result for preview renders, looks nicer */
 	if (!cancel) {
 		/* for exr tile render, detect tiles that are done */
 		for (pa = re->parts.first; pa; pa = pa->next) {
 			if (result->tilerect.xmin == pa->disprect.xmin &&
-			   result->tilerect.ymin == pa->disprect.ymin &&
-			   result->tilerect.xmax == pa->disprect.xmax &&
-			   result->tilerect.ymax == pa->disprect.ymax) {
+			    result->tilerect.ymin == pa->disprect.ymin &&
+			    result->tilerect.xmax == pa->disprect.xmax &&
+			    result->tilerect.ymax == pa->disprect.ymax)
+			{
 				pa->ready = 1;
 			}
 		}

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2012-09-04 17:28:36 UTC (rev 50394)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2012-09-04 18:27:47 UTC (rev 50395)
@@ -194,14 +194,12 @@
 
 RenderLayer *RE_GetRenderLayer(RenderResult *rr, const char *name)
 {
-	RenderLayer *rl;
-	
-	if (rr == NULL) return NULL;
-	
-	for (rl = rr->layers.first; rl; rl = rl->next)
-		if (strncmp(rl->name, name, RE_MAXNAME) == 0)
-			return rl;
-	return NULL;
+	if (rr == NULL) {
+		return NULL;
+	}
+	else {
+		return BLI_findstring(&rr->layers, name, offsetof(RenderLayer, name));
+	}
 }
 
 RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty)
@@ -1108,7 +1106,10 @@
 		/* passes are allocated in sync */
 		rpass1 = rl1->passes.first;
 		rpass2 = rl2->passes.first;
-		for (rpass = rl->passes.first; rpass && rpass1 && rpass2; rpass = rpass->next, rpass1 = rpass1->next, rpass2 = rpass2->next) {
+		for (rpass = rl->passes.first;
+		     rpass && rpass1 && rpass2;
+		     rpass = rpass->next, rpass1 = rpass1->next, rpass2 = rpass2->next)
+		{
 			interleave_rect(rr, rpass->rect, rpass1->rect, rpass2->rect, rpass->channels);
 		}
 	}

Modified: trunk/blender/source/blender/render/intern/source/render_result.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/render_result.c	2012-09-04 17:28:36 UTC (rev 50394)
+++ trunk/blender/source/blender/render/intern/source/render_result.c	2012-09-04 18:27:47 UTC (rev 50395)
@@ -30,6 +30,7 @@
  */
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 
 #include "MEM_guardedalloc.h"
@@ -554,8 +555,9 @@
 			IMB_exr_add_channel(rl->exrhandle, rl->name, "Combined.B", 0, 0, NULL);
 			IMB_exr_add_channel(rl->exrhandle, rl->name, "Combined.A", 0, 0, NULL);
 		}
-		else
+		else {
 			rl->rectf = MEM_mapallocN(rectx * recty * sizeof(float) * 4, "Combined rgba");
+		}
 		
 		/* note, this has to be in sync with scene.c */
 		rl->lay = (1 << 20) - 1;
@@ -691,16 +693,18 @@
 	RenderPass *rpass, *rpassp;
 	
 	for (rl = rr->layers.first; rl; rl = rl->next) {
-		for (rlp = rrpart->layers.first; rlp; rlp = rlp->next) {
-			if (strcmp(rlp->name, rl->name) == 0) {
-				/* combined */
-				if (rl->rectf && rlp->rectf)
-					do_merge_tile(rr, rrpart, rl->rectf, rlp->rectf, 4);
-				
-				/* passes are allocated in sync */
-				for (rpass = rl->passes.first, rpassp = rlp->passes.first; rpass && rpassp; rpass = rpass->next, rpassp = rpassp->next) {
-					do_merge_tile(rr, rrpart, rpass->rect, rpassp->rect, rpass->channels);
-				}
+		rlp = RE_GetRenderLayer(rrpart, rl->name);
+		if (rlp) {
+			/* combined */
+			if (rl->rectf && rlp->rectf)
+				do_merge_tile(rr, rrpart, rl->rectf, rlp->rectf, 4);
+
+			/* passes are allocated in sync */
+			for (rpass = rl->passes.first, rpassp = rlp->passes.first;
+			     rpass && rpassp;
+			     rpass = rpass->next, rpassp = rpassp->next)
+			{
+				do_merge_tile(rr, rrpart, rpass->rect, rpassp->rect, rpass->channels);
 			}
 		}
 	}
@@ -746,21 +750,24 @@
 		/* combined */
 		if (rl->rectf) {
 			int a, xstride = 4;
-			for (a = 0; a < xstride; a++)
-				IMB_exr_add_channel(exrhandle, rl->name, get_pass_name(SCE_PASS_COMBINED, a), 
+			for (a = 0; a < xstride; a++) {
+				IMB_exr_add_channel(exrhandle, rl->name, get_pass_name(SCE_PASS_COMBINED, a),
 				                    xstride, xstride * rr->rectx, rl->rectf + a);
+			}
 		}
 		
 		/* passes are allocated in sync */
 		for (rpass = rl->passes.first; rpass; rpass = rpass->next) {
 			int a, xstride = rpass->channels;
 			for (a = 0; a < xstride; a++) {
-				if (rpass->passtype)
-					IMB_exr_add_channel(exrhandle, rl->name, get_pass_name(rpass->passtype, a), 
+				if (rpass->passtype) {
+					IMB_exr_add_channel(exrhandle, rl->name, get_pass_name(rpass->passtype, a),
 					                    xstride, xstride * rr->rectx, rpass->rect + a);
-				else
-					IMB_exr_add_channel(exrhandle, rl->name, make_pass_name(rpass, a), 
+				}
+				else {
+					IMB_exr_add_channel(exrhandle, rl->name, make_pass_name(rpass, a),
 					                    xstride, xstride * rr->rectx, rpass->rect + a);
+				}
 			}
 		}
 	}
@@ -818,8 +825,9 @@
 		
 		/* reconstruct render result layers */
 		for (nr = 0, srl = re->scene->r.layers.first; srl; srl = srl->next, nr++) {
-			if (nr == re->r.actlay)
+			if (nr == re->r.actlay) {
 				BLI_addtail(&re->result->layers, rl);
+			}
 			else {
 				rlpush = RE_GetRenderLayer(re->pushedresult, srl->name);
 				if (rlpush) {
@@ -845,10 +853,14 @@
 	BLI_lock_thread(LOCK_IMAGE);
 	
 	for (rlp = rrpart->layers.first; rlp; rlp = rlp->next) {
-		for (rl = rr->layers.first; rl; rl = rl->next)
-			if (strcmp(rl->name, rlp->name) == 0)
-				break;
-		
+		rl = RE_GetRenderLayer(rr, rlp->name);
+
+		/* should never happen but prevents crash if it does */
+		BLI_assert(rl);
+		if (UNLIKELY(rl == NULL)) {
+			continue;
+		}
+
 		if (rrpart->crop) { /* filters add pixel extra */
 			offs = (rrpart->crop + rrpart->crop * rrpart->rectx);
 		}
@@ -859,17 +871,19 @@
 		/* combined */
 		if (rlp->rectf) {
 			int a, xstride = 4;
-			for (a = 0; a < xstride; a++)
+			for (a = 0; a < xstride; a++) {
 				IMB_exr_set_channel(rl->exrhandle, rlp->name, get_pass_name(SCE_PASS_COMBINED, a), 
 				                    xstride, xstride * rrpart->rectx, rlp->rectf + a + xstride * offs);
+			}
 		}
 		
 		/* passes are allocated in sync */
 		for (rpassp = rlp->passes.first; rpassp; rpassp = rpassp->next) {
 			int a, xstride = rpassp->channels;
-			for (a = 0; a < xstride; a++)
+			for (a = 0; a < xstride; a++) {
 				IMB_exr_set_channel(rl->exrhandle, rlp->name, get_pass_name(rpassp->passtype, a), 
 				                    xstride, xstride * rrpart->rectx, rpassp->rect + a + xstride * offs);
+			}
 		}
 		
 	}
@@ -878,10 +892,14 @@
 	partx = rrpart->tilerect.xmin + rrpart->crop;
 
 	for (rlp = rrpart->layers.first; rlp; rlp = rlp->next) {
-		for (rl = rr->layers.first; rl; rl = rl->next)
-			if (strcmp(rl->name, rlp->name) == 0)
-				break;
-	
+		rl = RE_GetRenderLayer(rr, rlp->name);
+
+		/* should never happen but prevents crash if it does */
+		BLI_assert(rl);
+		if (UNLIKELY(rl == NULL)) {
+			continue;
+		}
+
 		IMB_exrtile_write_channels(rl->exrhandle, partx, party, 0);
 	}
 




More information about the Bf-blender-cvs mailing list