59 void initialize(
const std::vector<PointVertex>& vertices);
65 void initialize(
const std::vector<LineVertex>& vertices);
71 void initialize(
const std::vector<MeshVertex>& vertices);
73 void process(
float dt)
override;
134 [[nodiscard]] std::span<const uint8_t> get_vertex_data()
const override;
135 [[nodiscard]] std::span<const uint8_t> get_vertex_data_for_collection(uint32_t idx)
const override;
137 [[nodiscard]]
size_t get_vertex_count()
const override;
138 [[nodiscard]]
bool is_vertex_data_dirty()
const override;
139 void mark_vertex_data_clean()
override;
140 [[nodiscard]] std::vector<PointVertex> extract_point_vertices()
const;
141 [[nodiscard]] std::vector<LineVertex> extract_line_vertices()
const;
142 [[nodiscard]] std::vector<MeshVertex> extract_mesh_vertices()
const;
144 void set_parameter(std::string_view param,
double value)
override;
145 [[nodiscard]] std::optional<double> query_state(std::string_view query)
const override;
146 [[nodiscard]] std::string_view
get_type_name()
const override {
return "Field"; }
147 [[nodiscard]]
size_t get_point_count()
const override;
148 [[nodiscard]]
const char* get_vertex_type_name()
const override;
150 void apply_one_to_one(
151 std::string_view param,
152 const std::shared_ptr<NodeNetwork>& source)
override;
164 void* get_data_at(
size_t global_index)
override;
179 size_t m_count { 0 };
183 bool m_dirty {
false };
192 static constexpr size_t k_stride = 60;
193 static constexpr size_t k_position_offset = 0;
194 static constexpr size_t k_color_offset = 12;
195 static constexpr size_t k_scalar_offset = 24;
196 static constexpr size_t k_uv_offset = 28;
197 static constexpr size_t k_normal_offset = 36;
198 static constexpr size_t k_tangent_offset = 48;
200 glm::vec3& vec3_at(
size_t i,
size_t offset);
201 float& float_at(
size_t i,
size_t offset);
202 [[nodiscard]] glm::vec3 ref_position_at(
size_t i)
const;
204 void store_reference(
const void* data,
size_t count);