MayaFlux 1.0.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 207 of file TextureContainer.cpp.

208{
209 if (!image || !image->is_initialized()) {
211 "TextureContainer::from_image called with uninitialised image");
212 return;
213 }
214
215 if (layer >= m_data.size()) {
217 "TextureContainer::from_image layer {} out of range ({})", layer, m_data.size());
218 return;
219 }
220
221 const size_t sz = byte_size();
222 const size_t element_count = static_cast<size_t>(m_width) * m_height * m_channels;
223
224 {
225 Memory::SeqlockWriteGuard g(m_slot_locks[layer]);
226 m_data[layer] = make_empty_storage(m_format, element_count);
227 auto [ptr, bytes] = variant_bytes_mutable(m_data[layer]);
228 if (!ptr || bytes != sz) {
230 "TextureContainer::from_image variant size mismatch ({} vs {})", bytes, sz);
231 return;
232 }
234 m_cpu_stale[layer].store(false, std::memory_order_release);
235 }
236
237 m_normalised_dirty[layer].store(true, std::memory_order_release);
239}
#define MF_ERROR(comp, ctx,...)
IO::ImageData image
Definition Decoder.cpp:47
const uint8_t * ptr
std::vector< std::atomic< bool > > m_normalised_dirty
std::vector< std::atomic< bool > > m_cpu_stale
Per layer: the GPU image in m_layer_image_cache holds the content, m_data does not.
void update_processing_state(ProcessingState state) override
Update the processing state of the container.
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, vk::ImageLayout restore_layout=vk::ImageLayout::eShaderReadOnlyOptimal, vk::PipelineStageFlags restore_stage=vk::PipelineStageFlagBits::eFragmentShader)
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)
Allocate a zeroed DataVariant of the alternative backing a format.
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 byte_size(), MayaFlux::Journal::ContainerProcessing, MayaFlux::Portal::Graphics::TextureLoom::download_data(), image, MayaFlux::Portal::Graphics::TextureLoom::instance(), MayaFlux::Journal::Kakshya, m_channels, m_cpu_stale, m_data, m_format, m_height, m_normalised_dirty, m_slot_locks, m_width, MayaFlux::Kakshya::make_empty_storage(), MF_ERROR, ptr, MayaFlux::Kakshya::READY, update_processing_state(), and MayaFlux::Kakshya::variant_bytes_mutable().

Referenced by TextureContainer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: