ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/hd/sm_qtree.h
(Generate patch)

Comparing ray/src/hd/sm_qtree.h (file contents):
Revision 3.1 by gwlarson, Wed Aug 19 17:45:24 1998 UTC vs.
Revision 3.5 by gwlarson, Mon Sep 14 10:33:47 1998 UTC

# Line 19 | Line 19
19   *
20   *              < -1:   it is an index to a set of objects
21   */
22 + #include "object.h"
23  
24   #define  QUADTREE               int
25  
26   #define  EMPTY          (-1)
27  
28   #define  QT_IS_EMPTY(qt)        ((qt) == EMPTY)
29 < #define  QT_IS_LEAF(qt) ((qt) < EMPTY)
30 < #define  QT_IS_TREE(qt) ((qt) > EMPTY)
29 > #define  QT_IS_LEAF(qt)         ((qt) < EMPTY)
30 > #define  QT_IS_TREE(qt)         ((qt) > EMPTY)
31  
32 < #define  QT_INDEX(qt)          (-(qt)-2)        /* quadtree node from set */
33 < #define  QT_SET_INDEX(i)       (-((i)+2))       /* object set from node */
34 < #define  QT_BLOCK(qt)         ((qt)>>8)         /* quadtree block index */
35 < #define  QT_BLOCK_INDEX(qt)   (((qt)&0377)<<2)  /* quadtree index in block */
32 > #define  QT_INDEX(qt)           (-(qt)-2)       /* quadtree node from set */
33 > #define  QT_SET_INDEX(i)        (-((i)+2))      /* object set from node */
34 > #define  QT_BLOCK_SIZE          1024            /* quadtrees in block */
35 > #define  QT_BLOCK(qt)           ((qt)>>10)      /* quadtree block index */
36 > #define  QT_BLOCK_INDEX(qt)   (((qt)&0x3ff)<<2) /* quadtree index in block */
37  
38 +
39   #ifndef  QT_MAX_BLK
40   #ifdef  BIGMEM
41 < #define  QT_MAX_BLK     65535           /* maximum quadtree block */
41 > #define  QT_MAX_BLK     16383           /* maximum quadtree block */
42   #else
43 < #define  QT_MAX_BLK     8191            /* maximum quadtree block */
43 > #define  QT_MAX_BLK     2047            /* maximum quadtree block */
44   #endif
45   #endif
46  
47  
45
48   #define  QT_NTH_CHILD(qt,br) (quad_block[QT_BLOCK(qt)][QT_BLOCK_INDEX(qt)+br])
49 < #define  QT_NTH_CHILD_PTR(qt,br) \
50 <                    (&(quad_block[QT_BLOCK(qt)][QT_BLOCK_INDEX(qt)+br]))
51 < #define  QT_CLEAR_CHILDREN(qt) (QT_NTH_CHILD(qt,0)=EMPTY, \
50 < QT_NTH_CHILD(qt,1)=EMPTY,QT_NTH_CHILD(qt,2)=EMPTY,QT_NTH_CHILD(qt,3)=EMPTY)
49 > #define  QT_NTH_CHILD_PTR(qt,br) (&QT_NTH_CHILD(qt,br))
50 > #define  QT_CLEAR_CHILDREN(qt) (QT_NTH_CHILD(qt,0)=QT_NTH_CHILD(qt,1)= \
51 >                        QT_NTH_CHILD(qt,2)=QT_NTH_CHILD(qt,3)=EMPTY)
52  
53  
54 < #if 0
55 < #define  QT_EMPTY       0
56 < #define  QT_FULL        1
57 < #define  QT_TREE        2
58 < #endif
54 > /* QUADTREE NODE FLAGS */
55 > #define QT_OFFSET(qt)           ((qt)>>5)
56 > #define QT_F_BIT(qt)            ((qt)&0x1f)
57 > #define QT_F_OP(f,qt,op)        ((f)[QT_OFFSET(qt)] op (0x1<<QT_F_BIT(qt)))
58 > #define QT_IS_FLAG(qt)          QT_F_OP(quad_flag,qt,&)
59 > #define QT_SET_FLAG(qt)         QT_F_OP(quad_flag,qt,|=)
60 > #define QT_CLR_FLAG(qt)         QT_F_OP(quad_flag,qt,|=~)
61  
62  
60
63   /* OBJECT SET CODE */
64   #define QT_SET_CNT(s)          ((s)[0])
65   #define QT_SET_NTH_ELEM(s,n)   ((s)[(n)])  
# Line 67 | Line 69 | QT_NTH_CHILD(qt,1)=EMPTY,QT_NTH_CHILD(qt,2)=EMPTY,QT_N
69   #define QT_SET_PTR(s)          (&((s)[1]))
70  
71  
72 < #define QT_MAX_SET        MAXSET
73 < #define MAXCSET           MAXSET*2
72 > #define QT_MAXSET        255
73 > #define MAXCSET          2*QT_MAXSET
74 > #define QT_MAXCSET       MAXCSET
75   #ifndef QT_SET_THRESHOLD
76 < #define QT_SET_THRESHOLD  40  
76 > #define QT_SET_THRESHOLD  80  
77   #endif
78  
79   #ifndef QT_MAX_LEVELS
80 < #define QT_MAX_LEVELS     16
80 > #define QT_MAX_LEVELS     17
81   #endif
82  
83 < #define QT_BLOCK_SIZE 256
83 > #define QT_HIT  -2
84 > #define QT_DONE -4
85 > #define QT_MODIFIED -8
86  
87 + #define QT_FILL_THRESHOLD 3
88 + #define QT_EXPAND   8
89 + #define QT_COMPRESS 16
90 +
91 + #define QT_FLAG_FILL_TRI(f)  (((f)&0x7) == QT_FILL_THRESHOLD)
92 + #define QT_FLAG_UPDATE(f)    ((f)& (QT_EXPAND | QT_COMPRESS))
93 +
94   extern QUADTREE  qtnewleaf(), qtaddelem(), qtdelelem();
95  
96   extern QUADTREE  *quad_block[QT_MAX_BLK];       /* quadtree blocks */
97 + extern int4  *quad_flag;                        /* zeroeth quadtree flag */
98 +
99 + extern OBJECT   **qtsettab;             /* quadtree leaf node table */
100 + extern QUADTREE  qtnumsets;             /* number of used set indices */
101 +
102 + #ifdef DEBUG
103 + extern OBJECT   *qtqueryset();
104 + #else
105 + #define qtqueryset(qt)  (qtsettab[QT_SET_INDEX(qt)])
106 + #endif
107 +
108 + #define qtinset(qt,id)  inset(qtqueryset(qt),id)
109 + #define qtgetset(os,qt) setcopy(os,qtqueryset(qt))
110 +
111 + extern QUADTREE *qtRoot_point_locate();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines