… | |
… | |
45 | |
45 | |
46 | view::~view () |
46 | view::~view () |
47 | { |
47 | { |
48 | } |
48 | } |
49 | |
49 | |
50 | void view::begin_occ_query (recv_occ_query &recv) |
50 | void view::begin_occ_query (recv_occ_query &recv, void *id) |
51 | { |
51 | { |
52 | occ_queries.push_back (oq_data (&recv, ::begin_occ_query ())); |
52 | occ_queries.push_back (oq_data (&recv, ::begin_occ_query (), id)); |
53 | } |
53 | } |
54 | |
54 | |
55 | void view::end_occ_query () |
55 | void view::end_occ_query () |
56 | { |
56 | { |
57 | ::end_occ_query (); |
57 | ::end_occ_query (); |
… | |
… | |
62 | if (drawn.find (e) != drawn.end ()) |
62 | if (drawn.find (e) != drawn.end ()) |
63 | return false; |
63 | return false; |
64 | |
64 | |
65 | drawn.insert (e); |
65 | drawn.insert (e); |
66 | return true; |
66 | return true; |
|
|
67 | } |
|
|
68 | |
|
|
69 | visibility_base *visible::get_visibility (view &ctx) |
|
|
70 | { |
|
|
71 | view::visibility_map::iterator i = ctx.vismap.find (this); |
|
|
72 | visibility_base *vs; |
|
|
73 | |
|
|
74 | if (i == ctx.vismap.end ()) |
|
|
75 | { |
|
|
76 | vs = new_visibility (); |
|
|
77 | ctx.vismap.insert (view::visibility_map::value_type (this, vs)); |
|
|
78 | } |
|
|
79 | else |
|
|
80 | { |
|
|
81 | vs = i->second; |
|
|
82 | |
|
|
83 | if (vs->generation != ctx.generation) |
|
|
84 | { |
|
|
85 | if (vs->generation + 1 != ctx.generation) |
|
|
86 | clear_visibility (vs); |
|
|
87 | |
|
|
88 | vs->generation = ctx.generation; |
|
|
89 | } |
|
|
90 | } |
|
|
91 | |
|
|
92 | return vs; |
|
|
93 | |
67 | } |
94 | } |
68 | |
95 | |
69 | void view::reset_projection () |
96 | void view::reset_projection () |
70 | { |
97 | { |
71 | renormalize (orig, p); |
98 | renormalize (orig, p); |
… | |
… | |
126 | farlist.clear (); |
153 | farlist.clear (); |
127 | |
154 | |
128 | // check occlusion queries |
155 | // check occlusion queries |
129 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
156 | for (vector<oq_data>::iterator i = occ_queries.begin (); i != occ_queries.end (); ++i) |
130 | { |
157 | { |
131 | occ_query oq(*this, i->second, ::occ_query_result (i->second)); |
158 | occ_query oq(*this, i->data, ::occ_query_result (i->id)); |
132 | i->first->event (oq); |
159 | i->recv->event (oq); |
133 | } |
160 | } |
134 | |
161 | |
135 | occ_queries.clear (); |
162 | occ_queries.clear (); |
136 | |
163 | |
137 | z_far = nz_far; |
164 | z_far = nz_far; |
… | |
… | |
183 | |
210 | |
184 | for (vector<octant *>::iterator i = vislist.begin (); i != vislist.end (); ++i) |
211 | for (vector<octant *>::iterator i = vislist.begin (); i != vislist.end (); ++i) |
185 | { |
212 | { |
186 | octant *o = *i; |
213 | octant *o = *i; |
187 | |
214 | |
|
|
215 | #if 0 |
188 | visibility_state &vs = vismap[o]; |
216 | visibility_state &vs = vismap[o]; |
189 | bool oq = mode == LIGHTED |
217 | bool oq = mode == LIGHTED |
190 | && vs.last + 1. < timer.now |
218 | && vs.last + 1. < timer.now |
191 | && (vs.visibility == visibility_state::PARTIAL |
219 | && (vs.visibility == visibility_state::PARTIAL |
192 | || vs.visibility == visibility_state::FULL); |
220 | || vs.visibility == visibility_state::FULL); |
|
|
221 | #endif |
|
|
222 | bool oq = false; |
193 | |
223 | |
194 | if (oq) |
224 | if (oq) |
195 | begin_occ_query (*o); |
225 | begin_occ_query (*o); |
196 | |
226 | |
197 | o->display (*this); |
227 | o->display (*this); |