MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
InstanceNetworkBuffer.hpp
Go to the documentation of this file.
1#pragma once
2
5
7class InstanceNetwork;
8}
9
10namespace MayaFlux::Buffers {
11
12class RenderProcessor;
13
14/**
15 * @class InstanceNetworkBuffer
16 * @brief VKBuffer that renders an InstanceNetwork as a single instanced draw call.
17 *
18 * Template geometry (from slot 0's node) is uploaded once into the vertex buffer.
19 * Per-slot transforms are packed into an SSBO at binding 1 by InstanceSSBOProcessor.
20 * The shader reads gl_InstanceIndex to fetch the mat4 and transform position,
21 * normal, and tangent. instance_count on RenderProcessor is set to slot_count()
22 * each cycle.
23 *
24 * Topology is taken from slot 0's node. All slots must carry geometry with the
25 * same topology and vertex layout for the single draw call to be correct.
26 *
27 * Usage:
28 * @code
29 * auto net = std::make_shared<InstanceNetwork>();
30 * // ... add slots ...
31 *
32 * auto buf = std::make_shared<InstanceNetworkBuffer>(net);
33 * buf->setup_processors(ProcessingToken::GRAPHICS_BACKEND);
34 * buf->setup_rendering({ .target_window = window });
35 * @endcode
36 */
37class MAYAFLUX_API InstanceNetworkBuffer : public VKBuffer {
38public:
39 explicit InstanceNetworkBuffer(
40 std::shared_ptr<Nodes::Network::InstanceNetwork> network,
41 float over_allocate_factor = 1.5F);
42
43 ~InstanceNetworkBuffer() override = default;
44
45 void setup_processors(ProcessingToken token) override;
46 void setup_rendering(const RenderConfig& config);
47
48 [[nodiscard]] std::shared_ptr<InstanceSSBOProcessor> get_ssbo_processor() const
49 {
50 return m_ssbo_processor;
51 }
52
53private:
54 std::shared_ptr<Nodes::Network::InstanceNetwork> m_network;
55 std::shared_ptr<InstanceSSBOProcessor> m_ssbo_processor;
56
57 static size_t estimate_vertex_bytes(
58 const std::shared_ptr<Nodes::Network::InstanceNetwork>& network,
59 float factor);
60};
61
62} // namespace MayaFlux::Buffers
Core::GlobalNetworkConfig network
Definition Config.cpp:37
std::shared_ptr< Nodes::Network::InstanceNetwork > m_network
std::shared_ptr< InstanceSSBOProcessor > m_ssbo_processor
std::shared_ptr< InstanceSSBOProcessor > get_ssbo_processor() const
VKBuffer that renders an InstanceNetwork as a single instanced draw call.
Vulkan-backed buffer wrapper used in processing chains.
Definition VKBuffer.hpp:67
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
Unified rendering configuration for graphics buffers.