改造一些

This commit is contained in:
2026-08-12 00:06:44 +08:00
parent aca480d988
commit abd1b595c7
57 changed files with 883 additions and 732 deletions
+4 -2
View File
@@ -48,8 +48,10 @@ void Renderable::render(const ::Scene_Render_Context& context) {
if (!cache)
return;
detail::Painter painter(*cache, viewport_size());
if (painter)
paint(painter);
if (painter) {
const auto state = render_state_view();
paint(painter, state);
}
}
void Renderable::changed() noexcept {
+23 -1
View File
@@ -14,6 +14,7 @@ namespace renderive {
class Plot_Core;
namespace detail {
class Painter;
class Renderable_State_Observer;
}
class Event_Handler {
@@ -39,15 +40,36 @@ public:
void render(const ::Scene_Render_Context& context) final;
protected:
virtual void paint(detail::Painter& painter) = 0;
virtual void paint(detail::Painter& painter, const Render_State_View& state) = 0;
void changed() noexcept;
[[nodiscard]] Size viewport_size() const noexcept;
private:
friend class detail::Renderable_State_Observer;
Plot_Core& plot_;
mutable std::mutex metadata_mutex_;
std::string object_name_;
std::atomic<bool> visible_{true};
};
namespace detail {
class Renderable_State_Observer {
public:
static constexpr bool enabled = true;
explicit Renderable_State_Observer(Renderable* renderable) noexcept : renderable_(renderable) {}
template <class Observation>
void observe(const Observation& observation) noexcept {
if (observation.event == decltype(observation.event)::cache_updated)
renderable_->changed();
}
private:
Renderable* renderable_;
};
} // namespace detail
} // namespace renderive