改造一些
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user