/*** EVALUATING THE SCENE ALONG A RAY SEGMENT ***/ typedef void (*seg_eval_proc_t) ( pcode_proc_t *proc, /* The function's pseudo-code */ h3_point_t *plo, /* Start of segment */ h3_point_t *phi, /* End of segment */ void *regs, /* Evaluation registers */ void *stack, /* Evaluation stack */ IntervalPair *ip /* Out: bounding trapezoid for function along segment */ ); typedef struct { seg_eval_proc_t *eval_proc; void *regs; void *stack; } seg_eval_closure_t; seg_eval_proc_t *irt_seg_eval_ia; seg_eval_proc_t *irt_seg_eval_ia_diff; seg_eval_proc_t *irt_seg_eval_aa; /*** COMPUTING THE SURFACE NORMAL AT A HIT POINT ***/ typedef void (*nrm_eval_proc_t) ( pcode_proc_t *proc, /* The function's pseudo-code */ h3_point_t *hit, /* Nominal hit point */ void *regs, /* Evaluation registers */ void *stack, /* Evaluation stack */ r3_t *nrm /* Out: outgoing surface normal at $hit$. */ ); typedef struct { nrm_eval_proc_t *eval_proc; void *regs; void *stack; } nrm_eval_closure_t; nrm_eval_proc_t *irt_nrm_eval;