[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28192] branches/render25/source/blender/ render/intern: Render Branch: Fix irregular shadow buffer + displacement crash.

Brecht Van Lommel brecht at blender.org
Wed Apr 14 18:07:54 CEST 2010


Revision: 28192
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28192
Author:   blendix
Date:     2010-04-14 18:07:54 +0200 (Wed, 14 Apr 2010)

Log Message:
-----------
Render Branch: Fix irregular shadow buffer + displacement crash.

Modified Paths:
--------------
    branches/render25/source/blender/render/intern/include/object.h
    branches/render25/source/blender/render/intern/source/object.c
    branches/render25/source/blender/render/intern/source/shadowbuf.c

Modified: branches/render25/source/blender/render/intern/include/object.h
===================================================================
--- branches/render25/source/blender/render/intern/include/object.h	2010-04-14 15:50:56 UTC (rev 28191)
+++ branches/render25/source/blender/render/intern/include/object.h	2010-04-14 16:07:54 UTC (rev 28192)
@@ -134,6 +134,8 @@
 	struct RayObject *raytree;
 	int transform_primitives;
 
+	struct ObjectInstanceRen *lowres;
+
 } ObjectInstanceRen;
 
 /* objectren->flag */

Modified: branches/render25/source/blender/render/intern/source/object.c
===================================================================
--- branches/render25/source/blender/render/intern/source/object.c	2010-04-14 15:50:56 UTC (rev 28191)
+++ branches/render25/source/blender/render/intern/source/object.c	2010-04-14 16:07:54 UTC (rev 28192)
@@ -322,6 +322,7 @@
 	obi->index= index;
 	obi->psysindex= psysindex;
 	obi->lay= lay;
+	obi->lowres= obi;
 
 	if(mat) {
 		copy_m4_m4(obi->mat, mat);
@@ -359,6 +360,7 @@
 	obi= rdb->objectinstance;
 	for(oldobi=rdb->instancetable.first; oldobi; oldobi=oldobi->next) {
 		*obi= *oldobi;
+		obi->lowres= obi;
 
 		if(obi->obr) {
 			obi->prev= obi->next= NULL;

Modified: branches/render25/source/blender/render/intern/source/shadowbuf.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadowbuf.c	2010-04-14 15:50:56 UTC (rev 28191)
+++ branches/render25/source/blender/render/intern/source/shadowbuf.c	2010-04-14 16:07:54 UTC (rev 28192)
@@ -2018,7 +2018,7 @@
 }
 
 /* main loop going over all faces and check in bsp overlaps, fill in shadfac values */
-static void isb_bsp_fillfaces(Render *re, LampRen *lar, ISBBranch *root)
+static void isb_bsp_fillfaces(Render *re, RenderPart *pa, LampRen *lar, ISBBranch *root)
 {
 	ObjectInstanceRen *obi;
 	ObjectRen *obr;
@@ -2323,7 +2323,7 @@
 							ps= ps->next;
 						}
 						if(ps && ps->facenr>0) {
-							ObjectInstanceRen *obi= &re->db.objectinstance[ps->obi];
+							ObjectInstanceRen *obi= part_get_instance(pa, &re->db.objectinstance[ps->obi]);
 							ObjectRen *obr= obi->obr;
 							VlakRen *vlr= render_object_vlak_get(obr, (ps->facenr-1) & RE_QUAD_MASK);
 							int quad= (ps->facenr) & RE_QUAD_OFFS;
@@ -2345,7 +2345,7 @@
 				rectp= pa->rectp + sindex;
 				recto= pa->recto + sindex;
 				if(*rectp>0) {
-					ObjectInstanceRen *obi= &re->db.objectinstance[*recto];
+					ObjectInstanceRen *obi= part_get_instance(pa, &re->db.objectinstance[*recto]);
 					ObjectRen *obr= obi->obr;
 					VlakRen *vlr= render_object_vlak_get(obr, (*rectp-1) & RE_QUAD_MASK);
 					int quad= (*rectp) & RE_QUAD_OFFS;
@@ -2377,7 +2377,7 @@
 		if(bsp_err==0) {
 			/* go over all faces and fill in shadow values */
 			
-			isb_bsp_fillfaces(re, lar, &root);	/* shb->persmat should have been calculated */
+			isb_bsp_fillfaces(re, pa, lar, &root);	/* shb->persmat should have been calculated */
 			
 			/* copy shadow samples to persistant buffer, reduce memory overhead */
 			if(re->params.osa) {
@@ -2520,7 +2520,7 @@
 					int a;
 					for(a=0; a<4; a++) {
 						if(apn->p[a]) {
-							ObjectInstanceRen *obi= &re->db.objectinstance[apn->obi[a]];
+							ObjectInstanceRen *obi= part_get_instance(pa, &re->db.objectinstance[apn->obi[a]]);
 							ObjectRen *obr= obi->obr;
 							VlakRen *vlr= render_object_vlak_get(obr, (apn->p[a]-1) & RE_QUAD_MASK);
 							int quad= apn->p[a] & RE_QUAD_OFFS;
@@ -2582,7 +2582,7 @@
 			ISBShadfacA **isbsa;
 			
 			/* go over all faces and fill in shadow values */
-			isb_bsp_fillfaces(re, lar, &root);	/* shb->persmat should have been calculated */
+			isb_bsp_fillfaces(re, pa, lar, &root);	/* shb->persmat should have been calculated */
 			
 			/* copy shadow samples to persistant buffer, reduce memory overhead */
 			isbsa= isbdata->shadfaca= MEM_callocN(pa->rectx*pa->recty*sizeof(void *), "isb shadfacs");
@@ -2650,9 +2650,9 @@
 						}
 						else {
 							int sindex= y*isbdata->rectx + x;
-							int obi= shi->primitive.obi - re->db.objectinstance;
+							int obi= shi->primitive.obi->lowres - re->db.objectinstance;
 							ISBShadfacA *isbsa= *(isbdata->shadfaca + sindex);
-							
+
 							while(isbsa) {
 								if(isbsa->facenr==shi->primitive.facenr+1 && isbsa->obi==obi)
 									return isbsa->shadfac>=1.0f?0.0f:1.0f - isbsa->shadfac;





More information about the Bf-blender-cvs mailing list