From 1230f386f2953f944fb41832c1d08277f37a597f Mon Sep 17 00:00:00 2001 From: "Gregory J. Ward" <gregoryjward@gmail.com> Date: Fri, 13 Dec 2024 19:05:03 +0000 Subject: [PATCH] perf: Minor efficiency improvement for -bv0 --- src/rt/m_brdf.c | 10 +++++----- src/rt/m_bsdf.c | 18 ++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/rt/m_brdf.c b/src/rt/m_brdf.c index 310fa8c9..475feb2f 100644 --- a/src/rt/m_brdf.c +++ b/src/rt/m_brdf.c @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: m_brdf.c,v 2.42 2024/12/05 19:23:43 greg Exp $"; +static const char RCSid[] = "$Id: m_brdf.c,v 2.43 2024/12/13 19:05:03 greg Exp $"; #endif /* * Shading for materials with arbitrary BRDF's @@ -346,10 +346,6 @@ m_brdf2( /* color a ray that hit a BRDF material */ /* always a shadow */ if (r->crtype & SHADOW) return(1); - /* check arguments */ - if ((m->oargs.nsargs < (hasdata(m->otype)?4:2)) | (m->oargs.nfargs < - ((m->otype==MAT_TFUNC)|(m->otype==MAT_TDATA)?6:4))) - objerror(m, USER, "bad # arguments"); /* check for back side */ if (r->rod < 0.0) { if (!backvis) { @@ -360,6 +356,10 @@ m_brdf2( /* color a ray that hit a BRDF material */ flipsurface(r); /* reorient if backvis */ } else raytexture(r, m->omod); + /* check arguments */ + if ((m->oargs.nsargs < (hasdata(m->otype)?4:2)) | (m->oargs.nfargs < + ((m->otype==MAT_TFUNC)|(m->otype==MAT_TDATA)?6:4))) + objerror(m, USER, "bad # arguments"); nd.mp = m; nd.pr = r; diff --git a/src/rt/m_bsdf.c b/src/rt/m_bsdf.c index 2a13f247..0a6e33dc 100644 --- a/src/rt/m_bsdf.c +++ b/src/rt/m_bsdf.c @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: m_bsdf.c,v 2.74 2024/09/18 19:52:35 greg Exp $"; +static const char RCSid[] = "$Id: m_bsdf.c,v 2.75 2024/12/13 19:05:03 greg Exp $"; #endif /* * Shading for materials with BSDFs taken from XML data files @@ -626,19 +626,22 @@ sample_sdf(BSDFDAT *ndp, int sflags) int m_bsdf(OBJREC *m, RAY *r) { - int hasthick = (m->otype == MAT_BSDF); - int hitfront; + const int hasthick = (m->otype == MAT_BSDF); + const int hitfront = (r->rod > 0); SCOLOR sctmp; SDError ec; FVECT upvec, vtmp; MFUNC *mf; BSDFDAT nd; + /* check backface visibility */ + if (!hitfront & !backvis) { + raytrans(r); + return(1); + } /* check arguments */ if ((m->oargs.nsargs < hasthick+5) | (m->oargs.nfargs > 9) | (m->oargs.nfargs % 3)) objerror(m, USER, "bad # arguments"); - /* record surface struck */ - hitfront = (r->rod > 0); /* load cal file */ mf = hasthick ? getfunc(m, 5, 0x1d, 1) : getfunc(m, 4, 0xe, 1) ; @@ -648,11 +651,6 @@ m_bsdf(OBJREC *m, RAY *r) nd.thick = evalue(mf->ep[0]); if ((-FTINY <= nd.thick) & (nd.thick <= FTINY)) nd.thick = 0; - } - /* check backface visibility */ - if (!hitfront & !backvis) { - raytrans(r); - return(1); } /* check other rays to pass */ if (nd.thick != 0 && (r->crtype & SHADOW ||