summaryrefslogtreecommitdiffhomepage
path: root/src/chunk-region.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chunk-region.cpp')
-rw-r--r--src/chunk-region.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/chunk-region.cpp b/src/chunk-region.cpp
index 57d09ab4..e28cc041 100644
--- a/src/chunk-region.cpp
+++ b/src/chunk-region.cpp
@@ -19,6 +19,7 @@ namespace {
using Search::bbox;
using Search::div_size;
using Search::div_count;
+using Search::div_factor;
using Search::pred;
static_assert(div_count.x() == div_count.y());
@@ -131,12 +132,12 @@ auto default_region_predicate(chunk& c) noexcept
} // namespace
-auto chunk::make_pass_region(bool debug) -> pass_region
+auto chunk::make_pass_region(bool debug, ArrayView<Vector2i> positions) -> pass_region
{
- return make_pass_region(default_region_predicate(*this), debug);
+ return make_pass_region(default_region_predicate(*this), debug, positions);
}
-auto chunk::make_pass_region(const pred& f, bool debug) -> pass_region
+auto chunk::make_pass_region(const pred& f, bool debug, ArrayView<Vector2i> positions) -> pass_region
{
Timeline timeline;
timeline.start();
@@ -172,6 +173,14 @@ auto chunk::make_pass_region(const pred& f, bool debug) -> pass_region
do_pixel.operator()<D, true>(Vector2i(i, -1));
}
+ for (auto pos : positions)
+ {
+ const auto posʹ = (pos + iTILE_SIZE2)*div_factor / iTILE_SIZE2;
+ fm_debug_assert(posʹ >= Vector2i{});
+ fm_debug_assert(posʹ < div_count);
+ tmp.append(ret.bits, posʹ);
+ }
+
while (!tmp.stack.isEmpty())
{
auto p = tmp.stack.back().pos;