77 void initialize(
const std::vector<PointVertex>& vertices);
83 void initialize(
const std::vector<LineVertex>& vertices);
89 void initialize(
const std::vector<MeshVertex>& vertices);
91 void process(
float dt)
override;
152 [[nodiscard]] std::span<const uint8_t> get_vertex_data()
const override;
153 [[nodiscard]] std::span<const uint8_t> get_vertex_data_for_collection(uint32_t idx)
const override;
155 [[nodiscard]]
size_t get_vertex_count()
const override;
156 [[nodiscard]]
bool is_vertex_data_dirty()
const override;
157 void mark_vertex_data_clean()
override;
158 [[nodiscard]] std::vector<PointVertex> extract_point_vertices()
const;
159 [[nodiscard]] std::vector<LineVertex> extract_line_vertices()
const;
160 [[nodiscard]] std::vector<MeshVertex> extract_mesh_vertices()
const;
162 void set_parameter(std::string_view param,
double value)
override;
163 [[nodiscard]] std::optional<double> query_state(std::string_view query)
const override;
164 [[nodiscard]] std::string_view
get_type_name()
const override {
return "Field"; }
165 [[nodiscard]]
size_t get_point_count()
const override;
166 [[nodiscard]]
const char* get_vertex_type_name()
const override;
168 void apply_one_to_one(
169 std::string_view param,
170 const std::shared_ptr<NodeNetwork>& source)
override;
173 void* get_data_at(
size_t global_index)
override;
188 size_t m_count { 0 };
192 bool m_dirty {
false };
201 static constexpr size_t k_stride = 60;
202 static constexpr size_t k_position_offset = 0;
203 static constexpr size_t k_color_offset = 12;
204 static constexpr size_t k_scalar_offset = 24;
205 static constexpr size_t k_uv_offset = 28;
206 static constexpr size_t k_normal_offset = 36;
207 static constexpr size_t k_tangent_offset = 48;
209 glm::vec3& vec3_at(
size_t i,
size_t offset);
210 float& float_at(
size_t i,
size_t offset);
211 [[nodiscard]] glm::vec3 ref_position_at(
size_t i)
const;
213 void store_reference(
const void* data,
size_t count);