[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