| 1154 | } |
| 1155 | |
| 1156 | void LASquadtree::intersect_tile_with_cells_adaptive(const F32 ll_x, const F32 ll_y, const F32 ur_x, const F32 ur_y, const F32 cell_min_x, const F32 cell_max_x, const F32 cell_min_y, const F32 cell_max_y, U32 level, U32 level_index) |
| 1157 | { |
| 1158 | volatile float cell_mid_x; |
| 1159 | volatile float cell_mid_y; |
| 1160 | U32 cell_index = get_cell_index(level_index, level); |
| 1161 | U32 adaptive_pos = cell_index/32; |
| 1162 | U32 adaptive_bit = ((U32)1) << (cell_index%32); |
| 1163 | if ((level < levels) && (adaptive[adaptive_pos] & adaptive_bit)) |
| 1164 | { |
| 1165 | level++; |
| 1166 | level_index <<= 2; |
| 1167 | |
| 1168 | cell_mid_x = (cell_min_x + cell_max_x)/2; |
| 1169 | cell_mid_y = (cell_min_y + cell_max_y)/2; |
| 1170 | |
| 1171 | if (ur_x <= cell_mid_x) |
| 1172 | { |
| 1173 | // cell_max_x = cell_mid_x; |
| 1174 | if (ur_y <= cell_mid_y) |
| 1175 | { |
| 1176 | // cell_max_y = cell_mid_y; |
| 1177 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_min_y, cell_mid_y, level, level_index); |
| 1178 | } |
| 1179 | else if (!(ll_y < cell_mid_y)) |
| 1180 | { |
| 1181 | // cell_min_y = cell_mid_y; |
| 1182 | // level_index |= 1; |
| 1183 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_mid_y, cell_max_y, level, level_index | 2); |
| 1184 | } |
| 1185 | else |
| 1186 | { |
| 1187 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_min_y, cell_mid_y, level, level_index); |
| 1188 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_min_x, cell_mid_x, cell_mid_y, cell_max_y, level, level_index | 2); |
| 1189 | } |
| 1190 | } |
| 1191 | else if (!(ll_x < cell_mid_x)) |
| 1192 | { |
| 1193 | // cell_min_x = cell_mid_x; |
| 1194 | // level_index |= 1; |
| 1195 | if (ur_y <= cell_mid_y) |
| 1196 | { |
| 1197 | // cell_max_y = cell_mid_y; |
| 1198 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_min_y, cell_mid_y, level, level_index | 1); |
| 1199 | } |
| 1200 | else if (!(ll_y < cell_mid_y)) |
| 1201 | { |
| 1202 | // cell_min_y = cell_mid_y; |
| 1203 | // level_index |= 1; |
| 1204 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_mid_y, cell_max_y, level, level_index | 3); |
| 1205 | } |
| 1206 | else |
| 1207 | { |
| 1208 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_min_y, cell_mid_y, level, level_index | 1); |
| 1209 | intersect_tile_with_cells_adaptive(ll_x, ll_y, ur_x, ur_y, cell_mid_x, cell_max_x, cell_mid_y, cell_max_y, level, level_index | 3); |
| 1210 | } |
| 1211 | } |
| 1212 | else |
| 1213 | { |
nothing calls this directly
no outgoing calls
no test coverage detected