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

◆ as_normalised_float()

std::span< const float > MayaFlux::Kakshya::TextureContainer::as_normalised_float ( uint32_t  layer = 0) const

Layer pixel data as a normalised float span.

uint8_t source is divided by 255.0f. uint16_t by 65535.0f. float source is zero-copy into the variant's own storage. Returns empty span if layer is out of range or the variant holds a non-pixel type.

Result is cached per layer and reused until set_pixels() or from_image() invalidates it for that layer.

Parameters
layerArray layer index. Defaults to 0.
Returns
Normalised float span, w * h * channels elements.

Definition at line 635 of file TextureContainer.cpp.

636{
637 if (layer >= m_data.size())
638 return {};
639
640 ensure_cpu(layer);
641
642 if (!m_normalised_dirty[layer].load(std::memory_order_acquire) && !m_normalised_cache[layer].empty())
643 return { m_normalised_cache[layer] };
644
645 std::span<const float> result;
646 seqlock_read_void(m_slot_locks[layer], 8, [&] {
648 });
649
650 if (!result.empty())
651 m_normalised_dirty[layer].store(false, std::memory_order_release);
652
653 return result;
654}
std::vector< std::atomic< bool > > m_normalised_dirty
std::vector< std::vector< float > > m_normalised_cache
void ensure_cpu(uint32_t layer) const
Download a GPU-held layer into m_data before a CPU read.
std::span< const float > as_normalised_float(const DataVariant &variant, std::vector< float > &storage)
Extract a DataVariant holding pixel data as a normalised float span.
Definition DataUtils.cpp:61
bool seqlock_read_void(const Seqlock &lock, uint32_t max_attempts, Fn &&fn)
Invoke a void read functor under a Seqlock with a bounded retry count.
Definition SeqLock.hpp:268
std::shared_ptr< T > store(std::shared_ptr< T > obj)
Transfer ownership of an existing object to the persistent store for process lifetime.
Definition Persist.hpp:28

References MayaFlux::Kakshya::as_normalised_float(), ensure_cpu(), m_data, m_normalised_cache, m_normalised_dirty, m_slot_locks, and MayaFlux::store().

+ Here is the call graph for this function: