[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13638] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Feb 11 12:00:11 CET 2008


Revision: 13638
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13638
Author:   blendix
Date:     2008-02-11 12:00:09 +0100 (Mon, 11 Feb 2008)

Log Message:
-----------

Bugfix: FSA enabled in compositing scene but disabled in other
scenes could crash, there was code to make sure osa level is
the same in all scenes, but that was set too late, after sample
tables are created.

Fix for some unitinialized vector warnings with FSA, these were
harmless, unfortunately.

Modified Paths:
--------------
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/envmap.c
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/render/intern/source/zbuf.c
    trunk/blender/source/blender/src/previewrender.c
    trunk/blender/source/blender/src/renderwin.c

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2008-02-11 11:00:09 UTC (rev 13638)
@@ -153,7 +153,7 @@
 float *RE_RenderLayerGetPass(struct RenderLayer *rl, int passtype);
 
 /* obligatory initialize call, disprect is optional */
-void RE_InitState (struct Render *re, struct RenderData *rd, int winx, int winy, rcti *disprect);
+void RE_InitState (struct Render *re, struct Render *source, struct RenderData *rd, int winx, int winy, rcti *disprect);
 
 /* use this to change disprect of active render */
 void RE_SetDispRect (struct Render *re, rcti *disprect);

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -5173,7 +5173,7 @@
 	}
 	
 	re= RE_NewRender("_make sticky_");
-	RE_InitState(re, &G.scene->r, G.scene->r.xsch, G.scene->r.ysch, NULL);
+	RE_InitState(re, NULL, &G.scene->r, G.scene->r.xsch, G.scene->r.ysch, NULL);
 	
 	/* use renderdata and camera to set viewplane */
 	RE_SetCamera(re, G.scene->camera);

Modified: trunk/blender/source/blender/render/intern/source/envmap.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/envmap.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/intern/source/envmap.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -127,7 +127,7 @@
 	envre->r.size= 100;
 	envre->r.yasp= envre->r.xasp= 1;
 	
-	RE_InitState(envre, &envre->r, cuberes, cuberes, NULL);
+	RE_InitState(envre, NULL, &envre->r, cuberes, cuberes, NULL);
 	envre->scene= re->scene;	/* unsure about this... */
 
 	/* view stuff in env render */

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -1058,7 +1058,7 @@
 
 /* what doesn't change during entire render sequence */
 /* disprect is optional, if NULL it assumes full window render */
-void RE_InitState(Render *re, RenderData *rd, int winx, int winy, rcti *disprect)
+void RE_InitState(Render *re, Render *source, RenderData *rd, int winx, int winy, rcti *disprect)
 {
 	re->ok= TRUE;	/* maybe flag */
 	
@@ -1086,13 +1086,19 @@
 		re->ok= 0;
 	}
 	else {
-		/* check state variables, osa? */
-		if(re->r.mode & (R_OSA)) {
-			re->osa= re->r.osa;
-			if(re->osa>16) re->osa= 16;
+		/* fullsample wants uniform osa levels */
+		if(source && re->r.scemode & R_FULL_SAMPLE) {
+			re->r.osa= re->osa= source->osa;
 		}
-		else re->osa= 0;
-		
+		else {
+			/* check state variables, osa? */
+			if(re->r.mode & (R_OSA)) {
+				re->osa= re->r.osa;
+				if(re->osa>16) re->osa= 16;
+			}
+			else re->osa= 0;
+		}
+
 		/* always call, checks for gamma, gamma tables and jitter too */
 		make_sample_tables(re);	
 		
@@ -1913,7 +1919,7 @@
 	}
 	
 	/* initial setup */
-	RE_InitState(resc, &sce->r, winx, winy, &re->disprect);
+	RE_InitState(resc, re, &sce->r, winx, winy, &re->disprect);
 	
 	/* this to enable this scene to create speed vectors */
 	resc->r.scemode |= R_DOCOMP;
@@ -1924,10 +1930,6 @@
 	/* ensure scene has depsgraph, base flags etc OK. Warning... also sets G.scene */
 	set_scene_bg(sce);
 
-	/* fullsample wants uniform osa levels */
-	if(resc->r.scemode & R_FULL_SAMPLE)
-		resc->r.osa= resc->osa= re->osa;
-	
 	/* copy callbacks */
 	resc->display_draw= re->display_draw;
 	resc->test_break= re->test_break;
@@ -2432,7 +2434,7 @@
 	if(scene->r.scemode & R_SINGLE_LAYER)
 		push_render_result(re);
 	
-	RE_InitState(re, &scene->r, winx, winy, &disprect);
+	RE_InitState(re, NULL, &scene->r, winx, winy, &disprect);
 	if(!re->ok)  /* if an error was printed, abort */
 		return 0;
 	
@@ -2647,7 +2649,7 @@
 	re= RE_GetRender(scene->id.name);
 	if(re==NULL)
 		re= RE_NewRender(scene->id.name);
-	RE_InitState(re, &scene->r, winx, winy, &disprect);
+	RE_InitState(re, NULL, &scene->r, winx, winy, &disprect);
 	re->scene= scene;
 	
 	read_render_result(re, 0);

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -819,17 +819,21 @@
 static void reset_sky_speed(RenderPart *pa, RenderLayer *rl)
 {
 	/* for all pixels with max speed, set to zero */
+    RenderLayer *rlpp[RE_MAX_OSA];
 	float *fp;
-	int a;
+	int a, sample, totsample;
 	
-	fp= RE_RenderLayerGetPass(rl, SCE_PASS_VECTOR);
-	if(fp==NULL) return;
-	
-	for(a= 4*pa->rectx*pa->recty - 1; a>=0; a--)
-		if(fp[a] == PASS_VECTOR_MAX) fp[a]= 0.0f;
+	totsample= get_sample_layers(pa, rl, rlpp);
+
+	for(sample= 0; sample<totsample; sample++) {
+		fp= RE_RenderLayerGetPass(rlpp[sample], SCE_PASS_VECTOR);
+		if(fp==NULL) break;
+
+		for(a= 4*pa->rectx*pa->recty - 1; a>=0; a--)
+			if(fp[a] == PASS_VECTOR_MAX) fp[a]= 0.0f;
+	}
 }
 
-
 static unsigned short *make_solid_mask(RenderPart *pa)
 { 
  	long *rd= pa->rectdaps;

Modified: trunk/blender/source/blender/render/intern/source/zbuf.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/zbuf.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/render/intern/source/zbuf.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -4055,12 +4055,15 @@
 				
 				/* for each mask-sample we alpha-under colors. then in end it's added using filter */
 				memset(samp_shr, 0, sizeof(ShadeResult)*osa);
-				for(a=0; a<osa; a++)
+				for(a=0; a<osa; a++) {
 					samp_shr[a].z= 10e10f;
-					
-				/* nice this memset, but speed vectors are not initialized OK then. it is sufficient to only clear 1 (see merge_transp_passes) */
-				if(addpassflag & SCE_PASS_VECTOR)
-					samp_shr->winspeed[0]= samp_shr->winspeed[1]= samp_shr->winspeed[2]= samp_shr->winspeed[3]= PASS_VECTOR_MAX;
+					if(addpassflag & SCE_PASS_VECTOR) {
+						samp_shr[a].winspeed[0]= PASS_VECTOR_MAX;
+						samp_shr[a].winspeed[1]= PASS_VECTOR_MAX;
+						samp_shr[a].winspeed[2]= PASS_VECTOR_MAX;
+						samp_shr[a].winspeed[3]= PASS_VECTOR_MAX;
+					}
+				}
 
 				if(R.osa==0) {
 					while(totface>0) {

Modified: trunk/blender/source/blender/src/previewrender.c
===================================================================
--- trunk/blender/source/blender/src/previewrender.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/src/previewrender.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -463,7 +463,7 @@
 		}
 		
 		/* allocates render result */
-		RE_InitState(re, &sce->r, ri->pr_rectx, ri->pr_recty, NULL);
+		RE_InitState(re, NULL, &sce->r, ri->pr_rectx, ri->pr_recty, NULL);
 		
 		/* enforce preview image clear */
 		if(GS(id->name)==ID_MA) {
@@ -780,7 +780,7 @@
 		rdata.layers.first= rdata.layers.last= NULL;
 		rdata.renderer= R_INTERN;
 		 
-		RE_InitState(re, &rdata, sa->winx, sa->winy, &ri->disprect);
+		RE_InitState(re, NULL, &rdata, sa->winx, sa->winy, &ri->disprect);
 	
 		if(orth)
 			RE_SetOrtho(re, &viewplane, clipsta, clipend);

Modified: trunk/blender/source/blender/src/renderwin.c
===================================================================
--- trunk/blender/source/blender/src/renderwin.c	2008-02-11 10:08:39 UTC (rev 13637)
+++ trunk/blender/source/blender/src/renderwin.c	2008-02-11 11:00:09 UTC (rev 13638)
@@ -1270,7 +1270,7 @@
 	winx= (G.scene->r.size*G.scene->r.xsch)/100;
 	winy= (G.scene->r.size*G.scene->r.ysch)/100;
 	
-	RE_InitState(re, &G.scene->r, winx, winy, NULL);
+	RE_InitState(re, NULL, &G.scene->r, winx, winy, NULL);
 
 	/* for now, result is defaulting to floats still... */
 	rr= RE_GetResult(re);





More information about the Bf-blender-cvs mailing list