MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
PointCollectionNode.cpp
Go to the documentation of this file.
3
5
7 : GeometryWriterNode(static_cast<uint32_t>(initial_capacity))
8{
9 m_points.reserve(initial_capacity);
10 const auto& stride = sizeof(PointVertex);
11 set_vertex_stride(stride);
12 auto layout = Kakshya::VertexLayout::for_points(stride);
13
14 layout.vertex_count = 0;
15 set_vertex_layout(layout);
16
17 resize_vertex_buffer(static_cast<uint32_t>(initial_capacity), false);
19
21 "Created PointCollectionNode with capacity for {} points", initial_capacity);
22}
23
25 : GeometryWriterNode(static_cast<uint32_t>(points.size()))
26 , m_points(std::move(points))
27{
28 const auto& stride = sizeof(PointVertex);
29 set_vertex_stride(stride);
30 auto layout = Kakshya::VertexLayout::for_points(stride);
31 layout.vertex_count = static_cast<uint32_t>(m_points.size());
32 set_vertex_layout(layout);
33
34 resize_vertex_buffer(static_cast<uint32_t>(m_points.size()), false);
35
37 "Created PointCollectionNode with {} points", m_points.size());
38}
39
41{
42 m_points.push_back(point);
45}
46
47void PointCollectionNode::add_points(const std::vector<PointVertex>& points)
48{
49 m_points.insert(m_points.end(), points.begin(), points.end());
52}
53
54void PointCollectionNode::set_points(const std::vector<PointVertex>& points)
55{
56 m_points.clear();
60}
61
63{
64 if (index < m_points.size()) {
65 m_points[index] = point;
67 } else {
69 "Point index {} out of range (count: {})", index, m_points.size());
70 }
71}
72
74{
75 if (index < m_points.size()) {
76 return m_points[index];
77 }
79 "Point index {} out of range, returning zero", index);
80 return {};
81}
82
89
91{
92 if (m_points.empty()) {
93 resize_vertex_buffer(0, false);
94 } else {
95 if (get_vertex_count() != m_points.size()) {
96 resize_vertex_buffer(static_cast<uint32_t>(m_points.size()), false);
97 }
98
99 set_vertices<PointVertex>(std::span { m_points.data(), m_points.size() });
100 }
101
102 if (auto layout = get_vertex_layout()) {
103 layout->vertex_count = static_cast<uint32_t>(m_points.size());
104 set_vertex_layout(*layout);
105 }
106
108 "PointSourceNode: Uploaded {} points to vertex buffer", m_points.size());
109}
110
111} // namespace MayaFlux::Nodes
#define MF_TRACE(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
bool size
std::vector< glm::vec2 > * points
uint32_t index
Definition VKDevice.cpp:122
uint32_t get_vertex_count() const
Get number of vertices.
bool m_vertex_data_dirty
Flag: vertex data or layout changed since last GPU upload.
std::optional< Kakshya::VertexLayout > get_vertex_layout() const
Get cached vertex layout.
void set_vertex_layout(const Kakshya::VertexLayout &layout)
Set cached vertex layout.
void resize_vertex_buffer(uint32_t vertex_count, bool preserve_data=false)
Resize vertex buffer to hold specified number of vertices.
void set_vertex_stride(size_t stride)
Set vertex stride (bytes per vertex)
bool m_needs_layout_update
Flag indicating if layout needs update.
uint32_t m_vertex_count
Number of vertices in buffer.
Base class for nodes that generate 3D geometry data.
void update_point(size_t index, const PointVertex &point)
Update specific point position.
void set_points(const std::vector< PointVertex > &points)
Set all points (replaces existing)
void add_point(const PointVertex &point)
Add a point to the collection.
PointCollectionNode(size_t initial_capacity=1024)
Create empty point source.
void add_points(const std::vector< PointVertex > &points)
Add multiple points.
void compute_frame() override
Compute frame - uploads positions to vertex buffer.
PointVertex get_point(size_t index) const
Get point position.
@ NodeProcessing
Node graph processing (Nodes::NodeGraphManager)
@ Nodes
DSP Generator and Filter Nodes, graph pipeline, node management.
Kakshya::PointVertex PointVertex
Definition VertexSpec.hpp:8
Vertex type for point primitives (POINT_LIST topology)
static VertexLayout for_points(uint32_t stride=60)
Factory: layout for PointVertex (position, color, size, uv, normal, tangent)