#pragma once #include #include #include #include "track_core/model.hpp" namespace track_core { struct TrackRenderSpan { std::uint16_t start_led{}; std::uint16_t led_count{}; Color color{}; }; struct TrackRenderPlan { static constexpr std::size_t max_spans = 4; void add_fill(std::uint16_t start_led, std::uint16_t led_count, Color color); [[nodiscard]] bool empty() const { return span_count == 0; } std::array spans{}; std::size_t span_count{}; }; struct TrackRenderSink { using ClearFn = TrackError (*)(void *context); using FillFn = TrackError (*)( void *context, std::uint16_t start_led, std::uint16_t led_count, Color color); using ShowFn = TrackError (*)(void *context); void *context{}; ClearFn clear{}; FillFn fill{}; ShowFn show{}; }; [[nodiscard]] TrackRenderPlan make_track_render_plan( const TrackConfig &config, const TrackInfo &info, const TrackReport &report); [[nodiscard]] TrackError clear_render_sink(TrackRenderSink sink); [[nodiscard]] TrackError apply_render_plan(TrackRenderSink sink, const TrackRenderPlan &plan); [[nodiscard]] TrackError show_render_sink(TrackRenderSink sink); } // namespace track_core