100 std::shared_ptr<Nodes::Network::GpuFieldOperator> field_operator);
112 void set_vertex_range(uint32_t first_vertex, uint32_t vertex_count);
117 void clear_vertex_range();
122 [[nodiscard]] std::shared_ptr<Nodes::Network::GpuFieldOperator>
129 void on_attach(
const std::shared_ptr<Buffer>&
buffer)
override;
136 bool on_before_execute(
138 const std::shared_ptr<VKBuffer>&
buffer)
override;
145 std::array<uint32_t, 3> calculate_dispatch_size(
146 const std::shared_ptr<VKBuffer>&
buffer)
override;
159 void on_descriptors_created()
override;
167 uint32_t first_vertex {};
168 uint32_t vertex_count {};
171 glm::mat4 transform { 1.0F };
186 std::shared_ptr<Nodes::Network::GpuFieldOperator>
m_operator;
189 uint32_t m_explicit_first {};
190 uint32_t m_explicit_count {};
193 uint64_t m_built_revision {};
195 std::chrono::steady_clock::time_point m_epoch { std::chrono::steady_clock::now() };
198 bool m_needs_cluster_id {};
203 [[nodiscard]] uint32_t buffer_capacity(
const std::shared_ptr<VKBuffer>&
buffer)
const;
208 [[nodiscard]]
float elapsed()
const;
214 bool sync_revision();
231 bool ensure_cluster_binding();