[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16406] trunk/blender/source/blender/ render/intern/source: Bugfix #17497

Ton Roosendaal ton at blender.org
Sun Sep 7 15:15:45 CEST 2008


Revision: 16406
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16406
Author:   ton
Date:     2008-09-07 15:15:44 +0200 (Sun, 07 Sep 2008)

Log Message:
-----------
Bugfix #17497

FSA didn't support "key alpha", fixed it.
Also noticed edge-enhance didnt work for FSA, added warning for that,
fixing it is too clumsy, this option belongs in compositor.

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

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2008-09-07 11:36:52 UTC (rev 16405)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2008-09-07 13:15:44 UTC (rev 16406)
@@ -2346,6 +2346,12 @@
 		if(re->osa==0)
 			re->r.scemode &= ~R_FULL_SAMPLE;
 		
+		/* no fullsample and edge */
+		if((re->r.scemode & R_FULL_SAMPLE) && (re->r.mode & R_EDGE)) {
+			re->error("Full Sample doesn't support Edge Enhance");
+			return 0;
+		}
+		
 	}
 	else
 		re->r.scemode &= ~R_FULL_SAMPLE;	/* clear to be sure */

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2008-09-07 11:36:52 UTC (rev 16405)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2008-09-07 13:15:44 UTC (rev 16406)
@@ -931,17 +931,23 @@
 	}
 }
 
-
-static void convert_to_key_alpha(RenderPart *pa, float *rectf)
+static void convert_to_key_alpha(RenderPart *pa, RenderLayer *rl)
 {
-	int y;
+	RenderLayer *rlpp[RE_MAX_OSA];
+	int y, sample, totsample;
 	
-	for(y= pa->rectx*pa->recty; y>0; y--, rectf+=4) {
-		if(rectf[3] >= 1.0f);
-		else if(rectf[3] > 0.0f) {
-			rectf[0] /= rectf[3];
-			rectf[1] /= rectf[3];
-			rectf[2] /= rectf[3];
+	totsample= get_sample_layers(pa, rl, rlpp);
+	
+	for(sample= 0; sample<totsample; sample++) {
+		float *rectf= rlpp[sample]->rectf;
+		
+		for(y= pa->rectx*pa->recty; y>0; y--, rectf+=4) {
+			if(rectf[3] >= 1.0f);
+			else if(rectf[3] > 0.0f) {
+				rectf[0] /= rectf[3];
+				rectf[1] /= rectf[3];
+				rectf[2] /= rectf[3];
+			}
 		}
 	}
 }
@@ -1229,7 +1235,7 @@
 		
 		/* de-premul alpha */
 		if(R.r.alphamode & R_ALPHAKEY)
-			convert_to_key_alpha(pa, rl->rectf);
+			convert_to_key_alpha(pa, rl);
 		
 		/* free stuff within loop! */
 		MEM_freeN(pa->rectdaps); pa->rectdaps= NULL;
@@ -1393,7 +1399,7 @@
 		
 		/* de-premul alpha */
 		if(R.r.alphamode & R_ALPHAKEY)
-			convert_to_key_alpha(pa, rl->rectf);
+			convert_to_key_alpha(pa, rl);
 		
 		if(edgerect) MEM_freeN(edgerect);
 		edgerect= NULL;





More information about the Bf-blender-cvs mailing list