diff --git a/src/DrawComponents/DrawComponent.cpp b/src/DrawComponents/DrawComponent.cpp index b2d9957..65f0daa 100644 --- a/src/DrawComponents/DrawComponent.cpp +++ b/src/DrawComponents/DrawComponent.cpp @@ -119,9 +119,9 @@ void DrawComponent::transform_temp_update(DrawingProgram& drawP) { worldAABB = std::nullopt; } -void DrawComponent::final_update(DrawingProgram& drawP) { +void DrawComponent::final_update(DrawingProgram& drawP, bool invalidateCache) { initialize_draw_data(drawP); - finalize_update(drawP); + finalize_update(drawP, invalidateCache); } void DrawComponent::client_send_place(DrawingProgram& drawP) { diff --git a/src/DrawComponents/DrawComponent.hpp b/src/DrawComponents/DrawComponent.hpp index 9fcfeb7..c5bb480 100644 --- a/src/DrawComponents/DrawComponent.hpp +++ b/src/DrawComponents/DrawComponent.hpp @@ -100,7 +100,7 @@ class DrawComponent { virtual void create_collider(bool colliderAllocated) = 0; virtual void draw(SkCanvas* canvas, const DrawData& drawData) = 0; void temp_update(DrawingProgram& drawP); - void final_update(DrawingProgram& drawP); + void final_update(DrawingProgram& drawP, bool invalidateCache = true); // invalidateCache = false version should be thread safe void transform_temp_update(DrawingProgram& drawP); virtual void initialize_draw_data(DrawingProgram& drawP) = 0; virtual void finalize_update(DrawingProgram& drawP, bool invalidateCache = true); diff --git a/src/DrawingProgram/DrawingProgram.cpp b/src/DrawingProgram/DrawingProgram.cpp index 67f6fb0..24e798f 100644 --- a/src/DrawingProgram/DrawingProgram.cpp +++ b/src/DrawingProgram/DrawingProgram.cpp @@ -458,8 +458,10 @@ void DrawingProgram::initialize_draw_data(cereal::PortableBinaryInputArchive& a) auto newComp = DrawComponent::allocate_comp_type(t); a(newComp->coords, *newComp); components.init_emplace_back(id, newComp); - newComp->final_update(*this); } + parallel_loop_all_components([&](const auto& c){ + c->obj->final_update(*this, false); + }); compCache.force_rebuild(); }