#pragma once

#include "Renderable.h"

#include <mutex>
#include <string>

#include <renderive/renderable/base/Renderable_Base_p.hpp>

namespace renderive {

class Renderable::Impl : public ::Renderable_Base::Impl {
public:
    mutable std::mutex metadata_mutex;
    std::string object_name;
    mutable std::mutex observation_mutex;
    Renderable_Observation observation;

protected:
    void build_prepare_graph(Renderable_Graph_Builder& builder) override;
    void build_paint_graph(Renderable_Graph_Builder& builder) override;
    void prepare(const Prepare_Render_Context& context) override;

private:
    [[nodiscard]] Renderable& renderable() noexcept;
};

} // namespace renderive
