MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
TextureBindBuffer.cpp
Go to the documentation of this file.
2
5
7
8namespace MayaFlux::Buffers {
9
11 std::shared_ptr<Nodes::GpuSync::TextureNode> node, std::string binding_name)
12 : VKBuffer(
13 calculate_buffer_size(node),
14 Usage::STAGING,
15 Kakshya::DataModality::IMAGE_COLOR)
16 , m_texture_node(std::move(node))
17 , m_binding_name(std::move(binding_name))
18{
19 if (!m_texture_node) {
20 error<std::invalid_argument>(
23 std::source_location::current(),
24 "Cannot create TextureBindBuffer with null TextureNode");
25 }
26
28 "Created TextureBindBuffer '{}' for {}x{} texture ({} bytes)",
30 m_texture_node->get_width(),
31 m_texture_node->get_height(),
33}
34
36{
37 auto self = std::dynamic_pointer_cast<TextureBindBuffer>(shared_from_this());
38
39 m_bindings_processor = std::make_shared<TextureBindingsProcessor>();
40 m_bindings_processor->bind_texture_node(
43 self);
44
46
47 auto chain = get_processing_chain();
48 if (!chain) {
49 chain = std::make_shared<BufferProcessingChain>();
51 }
52 chain->set_preferred_token(token);
53}
54
55size_t TextureBindBuffer::calculate_buffer_size(const std::shared_ptr<Nodes::GpuSync::TextureNode>& node)
56{
57 if (!node) {
58 return 0;
59 }
60
61 size_t size = static_cast<size_t>(node->get_width()) * static_cast<size_t>(node->get_height()) * 4 * sizeof(float);
62
63 if (size == 0) {
65 "TextureNode has zero dimensions. Using minimum buffer size.");
66 return 4096;
67 }
68
69 return size;
70}
71
72} // namespace MayaFlux::Buffers
#define MF_INFO(comp, ctx,...)
#define MF_WARN(comp, ctx,...)
static MayaFlux::Nodes::ProcessingToken token
Definition Timers.cpp:8
std::shared_ptr< Nodes::GpuSync::TextureNode > m_texture_node
std::shared_ptr< TextureBindingsProcessor > m_bindings_processor
TextureBindBuffer(std::shared_ptr< Nodes::GpuSync::TextureNode > node, std::string binding_name="texture")
Create texture buffer from generative node.
static size_t calculate_buffer_size(const std::shared_ptr< Nodes::GpuSync::TextureNode > &node)
Calculate texture buffer size from node dimensions.
void setup_processors(Buffers::ProcessingToken token) override
Initialize the buffer and its processors.
void set_processing_chain(std::shared_ptr< Buffers::BufferProcessingChain > chain, bool force=false) override
Replace the buffer's processing chain.
Definition VKBuffer.cpp:286
void set_default_processor(std::shared_ptr< Buffers::BufferProcessor > processor) override
Set the buffer's default processor.
Definition VKBuffer.cpp:265
std::shared_ptr< Buffers::BufferProcessingChain > get_processing_chain() override
Access the buffer's processing chain.
Definition VKBuffer.cpp:281
vk::DeviceSize get_size_bytes() const
Definition VKBuffer.hpp:221
Vulkan-backed buffer wrapper used in processing chains.
Definition VKBuffer.hpp:52
ProcessingToken
Bitfield enum defining processing characteristics and backend requirements for buffer operations.
@ BufferManagement
Buffer Management (Buffers::BufferManager, creating buffers)
@ Init
Engine/subsystem initialization.
@ Buffers
Buffers, Managers, processors and processing chains.