16 std::shared_ptr<Nodes::Network::InstanceNetwork>
network,
17 float over_allocate_factor)
19 estimate_vertex_bytes(
network, over_allocate_factor),
21 Kakshya::DataModality::VERTEX_POSITIONS_3D)
25 error<std::invalid_argument>(
27 std::source_location::current(),
28 "InstanceNetworkBuffer: null InstanceNetwork");
33 = (!slots.empty() && slots[0].node)
34 ? slots[0].node->get_primitive_topology()
45 "InstanceNetworkBuffer: {} slots, {} bytes estimated",
61 chain = std::make_shared<BufferProcessingChain>();
64 chain->set_preferred_token(token);
67 "InstanceNetworkBuffer::setup_processors with token {}",
68 static_cast<int>(token));
103#ifndef MAYAFLUX_PLATFORM_MACOS
123 vk::DescriptorType::eStorageBuffer);
130 "InstanceNetworkBuffer::setup_rendering: vert={} frag={}",
139 const std::shared_ptr<Nodes::Network::InstanceNetwork>&
network,
142 constexpr size_t k_min = 64L * 1024;
146 const auto& slots =
network->slots();
150 const size_t capacity = slots[0].node->get_vertex_buffer_size_bytes();
154 return static_cast<size_t>(
static_cast<float>(capacity) * factor);
#define MF_INFO(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
Core::GlobalNetworkConfig network
static size_t estimate_vertex_bytes(const std::shared_ptr< Nodes::Network::InstanceNetwork > &network, float factor)
InstanceNetworkBuffer(std::shared_ptr< Nodes::Network::InstanceNetwork > network, float over_allocate_factor=1.5F)
std::shared_ptr< Nodes::Network::InstanceNetwork > m_network
void setup_rendering(const RenderConfig &config)
std::shared_ptr< InstanceSSBOProcessor > m_ssbo_processor
void setup_processors(ProcessingToken token) override
Setup processors with a processing token.
static constexpr uint32_t k_transform_ssbo_binding
RenderConfig m_render_config
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
void set_default_processor(const std::shared_ptr< BufferProcessor > &processor) override
Set the buffer's default processor.
vk::DeviceSize get_size_bytes() const
void set_processing_chain(const std::shared_ptr< BufferProcessingChain > &chain, bool force=false) override
Replace the buffer's processing chain.
void set_needs_depth_attachment(bool needs)
Mark this buffer as requiring depth testing when rendered.
void apply_render_config(const RenderConfig &config, const ShaderConfig &shader_config)
Configure the internal m_render_processor from a RenderConfig.
std::shared_ptr< RenderProcessor > m_render_processor
void set_default_render_config(const RenderConfig &config)
Called by derived classes to set their context-specific defaults.
Vulkan-backed buffer wrapper used in processing chains.
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.
PrimitiveTopology
Vertex assembly primitive topology.
Describes how a VKBuffer binds to a shader descriptor.
std::shared_ptr< Core::Window > target_window
std::vector< std::pair< std::string, std::shared_ptr< Core::VKImage > > > additional_textures
For child-specific fields.
PrimitiveTopology topology
std::string vertex_shader
std::string fragment_shader
std::string geometry_shader
Unified rendering configuration for graphics buffers.