[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12474] branches/qdune/blender/source/ blender/render/intern/source:

Brecht Van Lommel brechtvanlommel at pandora.be
Sun Nov 4 20:43:33 CET 2007


Revision: 12474
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12474
Author:   blendix
Date:     2007-11-04 20:43:33 +0100 (Sun, 04 Nov 2007)

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

QDune branch
============

Fix for shadow related crash as reported on bf-committers.

Modified Paths:
--------------
    branches/qdune/blender/source/blender/render/intern/source/qdinterface.c
    branches/qdune/blender/source/blender/render/intern/source/shadeinput.c

Modified: branches/qdune/blender/source/blender/render/intern/source/qdinterface.c
===================================================================
--- branches/qdune/blender/source/blender/render/intern/source/qdinterface.c	2007-11-04 19:41:21 UTC (rev 12473)
+++ branches/qdune/blender/source/blender/render/intern/source/qdinterface.c	2007-11-04 19:43:33 UTC (rev 12474)
@@ -506,7 +506,6 @@
 	/* setup display */
 	RiDisplay("blender", RI_BLENDER, RI_Z, RI_NULL);
 	RiHider(RI_HIDDEN, RI_JITTER, &jitter, RI_NULL);
-	/* !!! RiOption expects an integer, cannot reference QDpartsize here, is a short !!! */
 	RiOption("limits", RI_BUCKETSIZE, &partsize, RI_NULL);
 
 	/* setup image */
@@ -546,6 +545,49 @@
 	RiShadingRate(re->r.QDshadingrate);
 }
 
+static void qdune_end_db_shadow(RenderInterface *iface)
+{
+	extern Render R;
+	QDRenderContext *qdcontext= iface->context;
+	Render *re= qdcontext->re;
+	RenderThread thread;
+	ShadBuf *shb= qdcontext->lar->shb;
+	rcti disprect= re->disprect;
+
+	re->disprect.xmin= 0;
+	re->disprect.ymin= 0;
+	re->disprect.xmax= shb->size;
+	re->disprect.ymax= shb->size;
+
+	R= *re;
+
+	memset(&thread, 0, sizeof(RenderThread));
+
+	thread.re= re;
+	thread.num= 0;
+	thread.samplenr= 0;
+	thread.current_rectz= MEM_callocN(sizeof(int)*shb->size*shb->size, "QDrectz");
+	MTC_Mat4CpyMat4(thread.current_winmat, shb->winmat);
+
+	initparts(re);
+
+	RiBlenderThread(&thread);
+
+	RiWorldEnd();
+	RiTransformEnd();
+
+	makeshadowbuf_qdune(re, qdcontext->lar, thread.current_rectz);
+
+	MEM_freeN(thread.current_rectz);
+	freeparts(re);
+
+	re->disprect= disprect;
+
+	qdcontext->lar= qdcontext->lar->next;
+	while(qdcontext->lar && !qdcontext->lar->shb)
+		qdcontext->lar= qdcontext->lar->next;
+}
+
 static void qdune_begin_db(RenderInterface *iface, RenderOptions *opt)
 {
 	QDRenderContext *qdcontext= iface->context;
@@ -679,47 +721,9 @@
 static void qdune_end_db(RenderInterface *iface)
 {
 	QDRenderContext *qdcontext= iface->context;
-	Render *re= qdcontext->re;
 
-	if(qdcontext->lar) {
-		extern Render R;
-		RenderThread thread;
-		ShadBuf *shb= qdcontext->lar->shb;
-		rcti disprect= re->disprect;
-
-		re->disprect.xmin= 0;
-		re->disprect.ymin= 0;
-		re->disprect.xmax= shb->size;
-		re->disprect.ymax= shb->size;
-
-		R= *re;
-
-		memset(&thread, 0, sizeof(RenderThread));
-
-		thread.re= re;
-		thread.num= 0;
-		thread.samplenr= 0;
-		thread.current_rectz= MEM_callocN(sizeof(int)*shb->size*shb->size, "QDrectz");
-		MTC_Mat4CpyMat4(thread.current_winmat, shb->winmat);
-
-		initparts(re);
-
-		RiBlenderThread(&thread);
-
-		RiWorldEnd();
-		RiTransformEnd();
-
-		makeshadowbuf_qdune(re, qdcontext->lar, thread.current_rectz);
-
-		MEM_freeN(thread.current_rectz);
-		freeparts(re);
-
-		re->disprect= disprect;
-
-		qdcontext->lar= qdcontext->lar->next;
-		while(qdcontext->lar && !qdcontext->lar->shb)
-			qdcontext->lar= qdcontext->lar->next;
-	}
+	if(qdcontext->lar)
+		qdune_end_db_shadow(iface);
 }
 
 static void qdune_free_db(RenderInterface *iface)

Modified: branches/qdune/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- branches/qdune/blender/source/blender/render/intern/source/shadeinput.c	2007-11-04 19:41:21 UTC (rev 12473)
+++ branches/qdune/blender/source/blender/render/intern/source/shadeinput.c	2007-11-04 19:43:33 UTC (rev 12474)
@@ -876,18 +876,20 @@
 /* initialize per part, not per pixel! */
 void shade_input_initialize(ShadeInput *shi, RenderLayer *rl, int thread, int sample)
 {
-	
 	memset(shi, 0, sizeof(ShadeInput));
 	
 	shi->sample= sample;
 	shi->thread= thread;
 	shi->do_preview= R.r.scemode & R_NODE_PREVIEW;
-	shi->lay= rl->lay;
-	shi->layflag= rl->layflag;
-	shi->passflag= rl->passflag;
-	shi->combinedflag= ~rl->pass_xor;
-	shi->mat_override= rl->mat_override;
-	shi->light_override= rl->light_override;
+
+	if(rl) {
+		shi->lay= rl->lay;
+		shi->layflag= rl->layflag;
+		shi->passflag= rl->passflag;
+		shi->combinedflag= ~rl->pass_xor;
+		shi->mat_override= rl->mat_override;
+		shi->light_override= rl->light_override;
+	}
 	
 	/* note shi.depth==0  means first hit, not raytracing */
 }





More information about the Bf-blender-cvs mailing list