#include "Render_Frame_Snapshot.h" #include "../architecture/Timeline_Stream.h" #include namespace renderive { bool Render_Frame_Snapshot::destroying() const { return !destroying_token || destroying_token->load(std::memory_order_acquire); } std::shared_ptr Render_Frame_Snapshot::timeline_snapshot( const std::shared_ptr& stream, int time_point_size, int label_tick_interval, bool start_coord_to_end_coord) const { if (!stream) return {}; time_point_size = std::max(1, time_point_size); label_tick_interval = std::max(1, label_tick_interval); if (!timeline_cache) timeline_cache = std::make_shared(); for (auto& item : timeline_cache->items) { if (item.stream.lock() == stream && item.time_point_size == time_point_size && item.tick_space == label_tick_interval && item.start_coord_to_end_coord == start_coord_to_end_coord) return item.snapshot; } auto snapshot = std::make_shared(stream->capture(time_point_size, label_tick_interval, start_coord_to_end_coord)); timeline_cache->items.push_back({stream, time_point_size, label_tick_interval, start_coord_to_end_coord, snapshot}); return snapshot; } } // namespace renderive