Cache surfaces only update in locations that require updating

This commit is contained in:
Yousef Khadadeh 2025-08-03 12:31:30 +03:00
parent 50fcaee52c
commit 81ac5a2302
3 changed files with 67 additions and 31 deletions

View file

@ -19,10 +19,10 @@ class DrawingProgramCacheBVHNode {
Vector2i resolution;
struct DrawCacheData {
uint64_t lastDrawnComponentPlacement;
uint64_t firstDrawnComponentPlacement;
sk_sp<SkImage> img;
sk_sp<SkSurface> surface;
std::chrono::steady_clock::time_point lastRenderTime;
DrawingProgramCache* attachedCache;
std::optional<SCollision::AABB<WorldScalar>> invalidBounds;
};
std::optional<DrawCacheData> drawCache;
@ -57,7 +57,7 @@ class DrawingProgramCache {
void invalidate_cache_at_aabb_before_pos(const SCollision::AABB<WorldScalar>& aabb, uint64_t placementToInvalidateAt);
void invalidate_cache_at_optional_aabb_before_pos(const std::optional<SCollision::AABB<WorldScalar>>& aabb, uint64_t placementToInvalidateAt);
void clear();
void draw_components_to_canvas(SkCanvas* canvas, const DrawData& drawData, uint64_t* lastDrawnComponentPlacement = nullptr);
void draw_components_to_canvas(SkCanvas* canvas, const DrawData& drawData, uint64_t* lastDrawnComponentPlacement = nullptr, std::optional<SCollision::AABB<WorldScalar>> drawBounds = std::nullopt);
const std::vector<CollabListType::ObjectInfoPtr>& get_unsorted_component_list() const;
const std::chrono::steady_clock::time_point& get_last_bvh_build_time() const;
void clear_own_cached_surfaces();