17 void initialize(
const std::vector<LineVertex>& vertices);
24 void initialize_topologies(
25 const std::vector<std::vector<LineVertex>>& topologies,
34 const std::vector<LineVertex>& vertices,
37 void process(
float dt)
override;
39 [[nodiscard]] std::span<const uint8_t> get_vertex_data()
const override;
40 [[nodiscard]] std::span<const uint8_t> get_vertex_data_for_collection(uint32_t idx)
const override;
42 [[nodiscard]]
size_t get_vertex_count()
const override;
43 [[nodiscard]]
bool is_vertex_data_dirty()
const override;
44 void mark_vertex_data_clean()
override;
58 [[nodiscard]] std::vector<DirtyVertexRange> dirty_vertex_ranges()
const override;
72 [[nodiscard]] std::vector<LineVertex> extract_vertices()
const;
74 void set_parameter(std::string_view param,
double value)
override;
75 [[nodiscard]] std::optional<double> query_state(std::string_view query)
const override;
76 [[nodiscard]] std::string_view
get_type_name()
const override {
return "Topology"; }
77 [[nodiscard]]
size_t get_point_count()
const override;
96 [[nodiscard]] std::vector<uint32_t> build_cluster_ids()
const override;
103 [[nodiscard]] std::shared_ptr<GpuSync::TopologyGeneratorNode>
get_topology(
size_t i)
const
105 if (i >= m_topologies.size()) {
108 return m_topologies[i];
115 void set_connection_radius(
float radius);
121 void set_global_line_thickness(
float thickness);
127 void set_global_line_color(
const glm::vec3& color);
135 void set_samples_per_segment(
size_t samples);
146 void* get_data_at(
size_t global_index)
override;
149 std::vector<std::shared_ptr<GpuSync::TopologyGeneratorNode>>
m_topologies;
154 float m_default_thickness { 2.0F };
156 mutable std::atomic<uint32_t> m_access_token { 0 };
157 std::atomic<bool> m_shutdown {
false };