MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ from_image() [2/2]

void MayaFlux::Kakshya::TextureContainer::from_image ( const std::shared_ptr< Core::VKImage > &  image,
uint32_t  layer = 0 
)

Download pixel data from a VKImage into this container.

Parameters
imageSource GPU texture. Must be initialized and match dimensions.
layerArray layer index for array textures (default 0).

Blocking. Overwrites the existing pixel buffer. Does not change declared width, height, or format — caller must ensure consistency.

Definition at line 87 of file TextureContainer.cpp.

88{
89 if (!image || !image->is_initialized()) {
91 "TextureContainer::from_image called with uninitialised image");
92 return;
93 }
94
95 if (layer >= m_data.size()) {
97 "TextureContainer::from_image layer {} out of range ({})", layer, m_data.size());
98 return;
99 }
100
101 const size_t sz = byte_size();
102 const size_t element_count = static_cast<size_t>(m_width) * m_height * m_channels;
103
104 {
105 Memory::SeqlockWriteGuard g(m_slot_locks[layer]);
106 m_data[layer] = make_empty_storage(m_format, element_count);
107 auto [ptr, bytes] = variant_bytes_mutable(m_data[layer]);
108 if (!ptr || bytes != sz) {
110 "TextureContainer::from_image variant size mismatch ({} vs {})", bytes, sz);
111 return;
112 }
114 }
115
116 m_normalised_dirty[layer].store(true, std::memory_order_release);
118}
#define MF_ERROR(comp, ctx,...)
IO::ImageData image
Definition Decoder.cpp:64
const uint8_t * ptr
std::vector< std::atomic< bool > > m_normalised_dirty
void update_processing_state(ProcessingState state) override
Update the processing state of the container.
Portal::Graphics::ImageFormat m_format
size_t byte_size() const
Total byte count of the pixel buffer.
void download_data(const std::shared_ptr< Core::VKImage > &image, void *data, size_t size, const std::shared_ptr< Buffers::VKBuffer > &staging, bool deferred=false)
Download pixel data from a VKImage, reusing a caller-supplied persistent staging buffer.
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
@ READY
Container has data loaded and is ready for processing.
DataVariant make_empty_storage(ImageFormat format, size_t element_count)
std::pair< uint8_t *, size_t > variant_bytes_mutable(DataVariant &v)
Get a mutable pointer to the raw bytes of a DataVariant and its size.

References image, MayaFlux::Kakshya::make_empty_storage(), MF_ERROR, ptr, and MayaFlux::Kakshya::variant_bytes_mutable().

+ Here is the call graph for this function: