MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
GeometryReadbackNode.cpp
Go to the documentation of this file.
2
5
7
9
11 std::shared_ptr<Buffers::VKBuffer> buffer,
12 size_t vertex_count)
14 , m_gpu_buffer(std::move(buffer))
15{
18
19 if (vertex_count > 0)
20 m_vertices.resize(vertex_count);
21}
22
23/* void GeometryReadbackNode::compute_frame()
24{
25 if (!m_gpu_buffer)
26 return;
27
28 const size_t buf_bytes = m_gpu_buffer->get_size_bytes();
29 if (buf_bytes == 0)
30 return;
31
32 const size_t count = buf_bytes / sizeof(Kakshya::MeshVertex);
33 m_vertices.resize(count);
34
35 Buffers::download_from_gpu(
36 m_gpu_buffer,
37 m_vertices.data(),
38 buf_bytes);
39
40 set_vertices<Kakshya::MeshVertex>(
41 std::span { m_vertices.data(), m_vertices.size() });
42
43 auto layout = get_vertex_layout();
44 layout->vertex_count = static_cast<uint32_t>(m_vertices.size());
45 set_vertex_layout(*layout);
46} */
47
49{
50 const size_t buf_bytes = m_gpu_buffer->get_size_bytes();
51 if (!m_gpu_buffer || buf_bytes == 0)
52 return;
53
54 const size_t count = buf_bytes / sizeof(Kakshya::MeshVertex);
55 m_vertices.resize(count);
56
58
59 set_vertices<Kakshya::MeshVertex>(std::span { m_vertices.data(), m_vertices.size() });
60 auto layout = get_vertex_layout();
61 layout->vertex_count = static_cast<uint32_t>(count);
62 set_vertex_layout(*layout);
63}
64
65glm::vec3 GeometryReadbackNode::get_position(size_t index) const
66{
67 if (index >= m_vertices.size())
68 return glm::vec3(0.F);
69 return m_vertices[index].position;
70}
71
72} // namespace MayaFlux::Nodes::GpuSync
size_t count
GeometryReadbackNode(std::shared_ptr< Buffers::VKBuffer > buffer, size_t vertex_count=0)
Construct from a GPU vertex buffer.
glm::vec3 get_position(size_t index) const
Position of vertex at index, or zero if out of range.
void compute_frame() override
Download vertex data from GPU to CPU.
std::shared_ptr< Buffers::VKBuffer > m_gpu_buffer
std::shared_ptr< Buffers::VKBuffer > m_staging_buffer
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 set_vertex_stride(size_t stride)
Set vertex stride (bytes per vertex)
Base class for nodes that generate 3D geometry data.
void download_from_gpu_async(const std::shared_ptr< VKBuffer > &source, void *data, size_t size, std::shared_ptr< VKBuffer > &staging)
Download from a device-local GPU buffer without stalling the graphics queue.
Vertex type for indexed triangle mesh primitives (TRIANGLE_LIST topology)
static VertexLayout for_meshes(uint32_t stride=60)
Factory: layout for MeshVertex (position, color, weight, uv, normal, tangent)