13 std::shared_ptr<Nodes::GpuSync::TextureNode> node,
14 std::string binding_name)
16 calculate_quad_vertex_size(),
18 Kakshya::DataModality::VERTEX_POSITIONS_3D)
19 , m_texture_node(
std::move(node))
20 , m_binding_name(
std::move(binding_name))
30 error<std::invalid_argument>(
33 std::source_location::current(),
34 "Cannot create NodeTextureBuffer with null TextureNode");
38 "Created NodeTextureBuffer '{}' for {}x{} texture ({} bytes)",
47 auto self = std::dynamic_pointer_cast<NodeTextureBuffer>(shared_from_this());
60 error<std::runtime_error>(
63 std::source_location::current(),
64 "Failed to create GPU texture for NodeTextureBuffer '{}'",
78 chain = std::make_shared<BufferProcessingChain>();
81 chain->set_preferred_token(token);
86 "NodeTextureBuffer '{}' ready: staging={} bytes, GPU texture={}x{}",
106 "NodeTextureBuffer currently only supports TRIANGLE_STRIP topology. Ignoring provided topology.");
123 0, 0, vk::DescriptorType::eCombinedImageSampler);
125 uint32_t binding_index = 1;
128 0, binding_index++, vk::DescriptorType::eCombinedImageSampler);
147 "NodeTextureBuffer '{}' rendering configured: shader={}, topology={}",
153 const std::shared_ptr<Nodes::GpuSync::TextureNode>& node)
159 size_t size =
static_cast<size_t>(node->get_width())
160 *
static_cast<size_t>(node->get_height())
166 "TextureNode has zero dimensions. Using minimum buffer size.");
181 "NodeTextureBuffer: generated fullscreen quad");
#define MF_INFO(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
NodeTextureBuffer(std::shared_ptr< Nodes::GpuSync::TextureNode > node, std::string binding_name="texture")
Create texture staging buffer from generative node.
std::shared_ptr< Nodes::GpuSync::TextureNode > m_texture_node
std::shared_ptr< Core::VKImage > get_gpu_texture() const
Get the GPU-resident texture (VKImage)
std::shared_ptr< Core::VKImage > m_gpu_texture
std::shared_ptr< RenderProcessor > m_render_processor
size_t calculate_quad_vertex_size()
std::shared_ptr< NodeTextureProcessor > m_texture_processor
std::vector< uint8_t > m_vertex_bytes
void generate_fullscreen_quad()
void setup_processors(ProcessingToken token) override
Initialize the buffer, create GPU texture, and setup processors.
static size_t calculate_buffer_size(const std::shared_ptr< Nodes::GpuSync::TextureNode > &node)
Calculate staging buffer size from node dimensions.
void setup_rendering(const RenderConfig &config)
Setup rendering with RenderProcessor.
std::string m_binding_name
RenderConfig m_render_config
void set_vertex_layout(const Kakshya::VertexLayout &layout)
Set vertex layout for this buffer.
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_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.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.
QuadGeometry generate_quad(glm::vec2 position, glm::vec2 scale, float rotation)
Generate a textured quad centred on the origin.
MAYAFLUX_API TextureLoom & get_texture_manager()
Get the global texture manager instance.
@ RGBA32F
Four channel 32-bit float.
Describes how a VKBuffer binds to a shader descriptor.
Vertex layout for textured quad geometry (position + UV).
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 default_texture_binding
Unified rendering configuration for graphics buffers.