From 37310c70edbee74554b3490c6ac1844594d9064f Mon Sep 17 00:00:00 2001 From: "Gregory J. Ward" <gregoryjward@gmail.com> Date: Tue, 10 Dec 2024 03:16:13 +0000 Subject: [PATCH] perf: Optimized initialization order for early shadow testing --- src/rt/m_wgmdf.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/rt/m_wgmdf.c b/src/rt/m_wgmdf.c index 6c1cd08a..14e66d6f 100644 --- a/src/rt/m_wgmdf.c +++ b/src/rt/m_wgmdf.c @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: m_wgmdf.c,v 2.1 2024/12/09 00:44:29 greg Exp $"; +static const char RCSid[] = "$Id: m_wgmdf.c,v 2.2 2024/12/10 03:16:13 greg Exp $"; #endif /* * Shading function for programmable Ward-Geisler-Moroder-Duer material. @@ -510,10 +510,14 @@ m_wgmdf(OBJREC *m, RAY *r) } if ((m->oargs.nsargs < 13) | (m->oargs.nfargs < 9)) objerror(m, USER, "bad number of arguments"); + + if (r->crtype & SHADOW && !strcmp(m->oargs.sarg[5], "0")) + return(1); /* first shadow test */ clr_comps(&wd); wd.rp = r; wd.mtp = m; wd.mf = getfunc(m, 12, 0xEEE, 1); + set_dcomp(&wd, 0); /* calls main modifier */ setfunc(m, r); /* get local u vector */ errno = 0; for (i = 0; i < 3; i++) @@ -523,11 +527,10 @@ m_wgmdf(OBJREC *m, RAY *r) else if (wd.mf->fxp != &unitxf) multv3(wd.ulocal, wd.ulocal, wd.mf->fxp->xfm); - set_dcomp(&wd, 0); /* call this first */ - set_dcomp(&wd, 1); /* call this second */ set_scomp(&wd, 1); /* sets SP_TPURE */ if (r->crtype & SHADOW && !(wd.specfl & SP_TPURE)) - return(1); /* early shadow test */ + return(1); /* second shadow test */ + set_dcomp(&wd, 1); set_scomp(&wd, 0); wd.specfl |= SP_FLAT*(r->ro != NULL && isflat(r->ro->otype)); /* apply Fresnel adjustments? */