71 uint32_t group_index {};
72 uint32_t vertex_offset {};
73 uint32_t vertex_count {};
93 if (!is_vertex_data_dirty()) {
147 return std::vector<uint32_t>(get_vertex_count(), 0U);
161 [[nodiscard]]
virtual std::vector<std::pair<std::string, Kakshya::DataVariant>>
187 [[nodiscard]]
virtual std::optional<Portal::Graphics::PrimitiveTopology>
211 [[nodiscard]]
virtual std::vector<DrawRun> topology_runs()
const;
220 void apply_one_to_one(
221 std::string_view param,
222 const std::shared_ptr<NodeNetwork>& source)
override;
282 bool m_participates_in_rendering {
true };
283 bool m_consumes_upstream {};
284 bool m_force_internal_dt {};
virtual std::vector< std::pair< std::string, Kakshya::DataVariant > > extract_vertex_attributes() const
Extra named, per-vertex attributes beyond position/color/size, for an external cache/export consumer.
bool participates_in_rendering() const
Whether this operator contributes a vertex slice to rendering.
virtual void * get_data_at(size_t global_index)=0
Get mutable access to point at global index.
bool uses_force_internal_dt() const
void set_participates_in_rendering(bool value)
virtual size_t get_point_count() const =0
Get source point count (before topology expansion)
virtual std::span< const uint8_t > get_vertex_data_for_collection(uint32_t idx=0) const =0
Get vertex data for specific collection (if multiple)
virtual size_t get_vertex_count() const =0
Get number of vertices (may differ from point count for topology/path)
virtual std::vector< uint32_t > build_cluster_ids() const
Per-vertex collection index, global index order.
virtual void seed_from_upstream(const GraphicsOperator *upstream)
Receive upstream vertex state before process() is called.
virtual Kakshya::VertexLayout get_vertex_layout() const =0
Get vertex layout describing vertex structure.
virtual bool is_vertex_data_dirty() const =0
Check if geometry changed this frame.
virtual bool supports_incremental_upload() const
Whether every vertex mutation on this operator sets a group's dirty flag, so dirty_vertex_ranges() is...
virtual std::optional< Portal::Graphics::PrimitiveTopology > declared_topology() const
Topology this operator's vertex data is authored for, if it holds a node to ask.
bool consumes_upstream() const
Whether this operator requests upstream vertex state before process().
void set_force_internal_dt(bool value)
Override the dt passed by the caller with a fixed internal value.
virtual std::vector< glm::vec3 > extract_vertex_velocities() const
Per-vertex velocity, for a consumer that wants to write it as a native channel (e....
virtual std::span< const uint8_t > get_vertex_data() const =0
Get vertex data for GPU upload.
virtual const char * get_vertex_type_name() const =0
Get human-readable vertex type name (for validation/debugging)
void set_consumes_upstream(bool value)
virtual std::vector< DirtyVertexRange > dirty_vertex_ranges() const
Vertex sub-ranges that changed since the last mark_vertex_data_clean().
virtual void mark_vertex_data_clean()=0
Clear dirty flag after GPU upload.
Operator that produces GPU-renderable geometry.
Domain-agnostic interpretive lens for network processing.
constexpr bool is_concatenable_topology(PrimitiveTopology topology) noexcept
Whether two adjacent spans of this topology can be concatenated without altering the primitives they ...
PrimitiveTopology
Vertex assembly primitive topology.
Complete description of vertex data layout in a buffer.
A contiguous span of vertex records that changed since the last mark_vertex_data_clean().
One contiguous span of vertices sharing a primitive topology.