43 #include "RixInterfaces.h"
44 #include "RixIntegrator.h"
48 static const RixChannelId k_invalid = 2147483647;
50 typedef std::vector<RixChannelId> ChanIdVec;
53 class RixLPEAutomataNfa;
179 k_FlagWithOcclusion = 0x1,
180 k_FlagWithThruput = 0x2,
181 k_FlagWithClamp = 0x4,
182 k_FlagShadowsOnly = 0x8,
183 k_FlagHoldOut = 0x10,
184 k_FlagOverwrite = 0x20,
185 k_FlagNoInfiniteCheck = 0x40,
188 static const int k_baseLgtGrpTokenOffset = k_numBuiltinTokens;
220 PRMAN_INLINE
bool AnyLPEs()
const;
268 SplatHelper(RixDisplayServices *displaySvc, RtInt integratorCtxIdx,
270 RtInt lgtGrpId, RixLPEToken lpeGrpId,
272 RtColorRGB
const &eyeTrans, RtColorRGB
const &lgtTrans,
275 PRMAN_INLINE ~SplatHelper();
286 RtColorRGB
const &shadowWeight,
287 RtColorRGB
const &thruput,
288 bool isFinite, RtFloat clamp = 1.0f,
289 RtColorRGB
const &backgroundColor = RixConstants::k_ZeroRGB,
290 bool isShadowCollector =
false);
300 RtColorRGB
const &thruput,
301 bool isFinite, RtFloat clamp = 1.0f,
302 bool isShadowCollector =
false);
311 PRMAN_INLINE
void SplatValue(RtColorRGB
const &color,
312 RtColorRGB
const &shadowWeight,
313 bool isFinite, RtFloat clamp = 1.0f,
314 RtColorRGB
const &backgroundColor = RixConstants::k_ZeroRGB,
315 bool isShadowCollector =
false);
318 PRMAN_INLINE
void SplatBeauty(RtColorRGB
const &val,
319 RtFloat trans = 0.0f)
const;
323 PRMAN_INLINE
void SplatLPE(RtColorRGB
const &val,
324 RtColorRGB
const *lgtTrans,
329 RtColorRGB
const *masks = 0,
330 OverwritePolicy overwritePolicy = k_Overwrite);
332 PRMAN_INLINE
void SplatShadowLPE(RtColorRGB
const *lgtTrans,
333 RtColorRGB
const &shadowWeight,
338 RtColorRGB
const *masks = 0,
339 OverwritePolicy overwritePolicy = k_Overwrite,
340 RtColorRGB
const &backgroundColor = RixConstants::k_ZeroRGB,
341 bool isShadowCollector =
false);
345 PRMAN_INLINE
void SplatNfaLPE(RtColorRGB
const &val,
346 RtColorRGB
const *lgtTrans,
351 RtColorRGB
const *masks = 0,
352 OverwritePolicy overwritePolicy = k_Overwrite);
354 PRMAN_INLINE
void SplatShadowNfaLPE(RtColorRGB
const *lgtTrans,
355 RtColorRGB
const &shadowWeight,
360 RtColorRGB
const *masks = 0,
361 OverwritePolicy overwritePolicy = k_Overwrite,
362 RtColorRGB
const &backgroundColor = RixConstants::k_ZeroRGB,
363 bool isShadowCollector =
false);
369 RixLPEToken m_lpeGrpId;
372 RtColorRGB m_lgtTrans;
377 RtInt m_integratorCtxIdx;
381 RtInt m_shadingCtxIdx;
396 PRMAN_INLINE
RixLPEState(
const RixLPEAutomata *automata,
397 const RixLPEAutomataNfa *automataNfa,
398 RixCustomLPE *rixCustomLPE);
407 PRMAN_INLINE RixLPEState &
operator= (
const RixLPEState &that);
413 PRMAN_INLINE
void SetState(
int state);
416 PRMAN_INLINE
void Reset();
428 RtColorRGB
const &thruput,
429 RixLPEToken lpeGrpId = RixLPE::k_BLANK);
435 RtColorRGB
const &thruput,
436 RtColorRGB
const *lgtTrans,
437 bool firstContribution,
438 RixLPEToken lgtGrpToken);
450 RtColorRGB
const &thruput,
451 bool firstContribution,
452 RixLPEToken lpeGrpId = RixLPE::k_BLANK,
453 RtColorRGB
const **masks = 0);
467 RixLPEToken lpeGrpId = RixLPE::k_BLANK,
468 bool doStateTransition =
true);
477 PRMAN_INLINE std::vector<int>
const *
GetFlags();
488 PRMAN_INLINE RixLPEAutomata
const *GetAutomata();
489 PRMAN_INLINE RixLPEAutomataNfa
const *GetAutomataNfa();
491 PRMAN_INLINE std::map<int, RtColorRGB>
const &GetThruputsNfa();
492 PRMAN_INLINE
void SetThruputsNfa(std::map<int, RtColorRGB>
const &thrus);
497 PRMAN_INLINE
void move(RixLPEToken event);
498 PRMAN_INLINE
void move(RixLPEToken event, RixLPEToken scatt);
499 PRMAN_INLINE
void move(RixLPEToken event, RixLPEToken scatt,
504 RixLPEAutomata
const *m_automata;
510 RtColorRGB *m_thruput;
513 RixCustomLPE *m_rixCustomLPE;
515 RixLPEAutomataNfa
const *m_automataNfa;
517 std::map<int, RtColorRGB> *m_thruputsNfa;
524 #include "RixLPEInline.h"