12 std::shared_ptr<Nodes::GpuSync::TextureNode> node,
13 std::string binding_name)
15 calculate_quad_vertex_size(),
17 Kakshya::DataModality::VERTEX_POSITIONS_3D)
18 , m_texture_node(
std::move(node))
19 , m_binding_name(
std::move(binding_name))
22 error<std::invalid_argument>(
25 std::source_location::current(),
26 "Cannot create NodeTextureBuffer with null TextureNode");
30 "Created NodeTextureBuffer '{}' for {}x{} texture ({} bytes)",
39 auto self = std::dynamic_pointer_cast<NodeTextureBuffer>(shared_from_this());
52 error<std::runtime_error>(
55 std::source_location::current(),
56 "Failed to create GPU texture for NodeTextureBuffer '{}'",
70 chain = std::make_shared<BufferProcessingChain>();
73 chain->set_preferred_token(
token);
78 "NodeTextureBuffer '{}' ready: staging={} bytes, GPU texture={}x{}",
90 0, 0, vk::DescriptorType::eCombinedImageSampler);
92 uint32_t binding_index = 1;
95 0, binding_index++, vk::DescriptorType::eCombinedImageSampler);
114 "NodeTextureBuffer '{}' rendering configured: shader={}, topology={}",
120 const std::shared_ptr<Nodes::GpuSync::TextureNode>& node)
126 size_t size =
static_cast<size_t>(node->get_width())
127 *
static_cast<size_t>(node->get_height())
133 "TextureNode has zero dimensions. Using minimum buffer size.");
147 const std::vector<QuadVertex> quad = {
148 { { -1.0F, -1.0F, 0.0F }, { 0.0F, 1.0F } },
149 { { 1.0F, -1.0F, 0.0F }, { 1.0F, 1.0F } },
150 { { -1.0F, 1.0F, 0.0F }, { 0.0F, 0.0F } },
151 { { 1.0F, 1.0F, 0.0F }, { 1.0F, 0.0F } }
160 .stride_bytes =
sizeof(QuadVertex),
163 .offset_in_vertex = offsetof(QuadVertex, position),
164 .name =
"position" },
166 .offset_in_vertex = offsetof(QuadVertex, texcoord),
167 .name =
"texcoord" } }
173 "NodeTextureBuffer: generated fullscreen quad");
182 return 4 *
sizeof(QuadVertex);
#define MF_INFO(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
#define MF_DEBUG(comp, ctx,...)
static MayaFlux::Nodes::ProcessingToken token
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
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.
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.
MAYAFLUX_API TextureLoom & get_texture_manager()
Get the global texture manager instance.
@ RGBA32F
Four channel 32-bit float.
std::string vertex_shader
std::shared_ptr< Core::Window > target_window
std::string fragment_shader
Portal::Graphics::PrimitiveTopology topology
std::string default_texture_binding
std::vector< std::pair< std::string, std::shared_ptr< Core::VKImage > > > additional_textures
Describes how a VKBuffer binds to a shader descriptor.
uint32_t vertex_count
Total number of vertices in this buffer.
Complete description of vertex data layout in a buffer.