Latios96 / crayg

Personal raytracer to learn C++ and rendering

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Investigate: use a bucket sequence with more locality

Latios96 opened this issue · comments

DoubleSpiralSequence (for reference)

class DoubleSpiralSequence : public BucketSequence {
  public:
    DoubleSpiralSequence(const Resolution &resolution, int bucketWidth);
    std::vector<ImageBucket> getTiles() override;
};

DoubleSpiralSequence::DoubleSpiralSequence(const Resolution &resolution, int bucketWidth)
    : BucketSequence(resolution, bucketWidth) {
}

std::vector<ImageBucket> DoubleSpiralSequence::getTiles() {
    std::vector<ImageBucket> allBuckets;
    SpiralSequence spiralSequence(resolution, 16);
    std::vector<ImageBucket> firstSpiralBuckets = spiralSequence.getTiles();

    std::vector<ImageBucket> bucketsInBucket;
    for (auto &bucket : firstSpiralBuckets) {
        LineByLineSequence sequenceInBucket(Resolution::deduce(bucket), 8);
        bucketsInBucket = sequenceInBucket.getTiles();

        for (auto &b : bucketsInBucket) {
            b = ImageBucket(b.getPosition() + bucket.getPosition(), b.getWidth(), b.getHeight());
        }

        allBuckets.reserve(allBuckets.size() + distance(bucketsInBucket.begin(), bucketsInBucket.end()));
        allBuckets.insert(allBuckets.end(), bucketsInBucket.begin(), bucketsInBucket.end());
    }
    return allBuckets;
}

Closed in favor of #211 and #212