[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