[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