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

◆ get_region_data()

std::vector< DataVariant > MayaFlux::Kakshya::TextureContainer::get_region_data ( const Region &  region) const
overridevirtual

Get data for a specific region.

Parameters
regionThe region to extract data from
Returns
Vector containing the region's data

Implements MayaFlux::Kakshya::NDDataContainer< DataVariant >.

Definition at line 690 of file TextureContainer.cpp.

691{
692 if (m_data.empty())
693 return {};
694
695 const size_t layer = (m_data.size() > 1 && !region.start_coordinates.empty())
696 ? static_cast<size_t>(region.start_coordinates[0])
697 : 0;
698
699 if (layer >= m_data.size())
700 return {};
701
702 ensure_cpu(static_cast<uint32_t>(layer));
703
704 std::optional<std::vector<DataVariant>> result;
705 seqlock_read_void(m_slot_locks[layer], 8, [&] {
706 result = std::visit(
707 [&](const auto& vec) -> std::vector<DataVariant> {
708 using T = typename std::decay_t<decltype(vec)>::value_type;
709 if constexpr (std::is_same_v<T, uint8_t>
710 || std::is_same_v<T, uint16_t>
711 || std::is_same_v<T, float>) {
712 auto extracted = extract_region_data<T>(
713 std::span<const T>(vec.data(), vec.size()),
714 region,
716 return { DataVariant(std::move(extracted)) };
717 } else {
718 return {};
719 }
720 },
721 m_data[layer]);
722 });
723 return result.value_or(std::vector<DataVariant> {});
724}
void ensure_cpu(uint32_t layer) const
Download a GPU-held layer into m_data before a CPU read.
std::variant< std::vector< double >, std::vector< float >, std::vector< uint8_t >, std::vector< uint16_t >, std::vector< uint32_t >, std::vector< std::complex< float > >, std::vector< std::complex< double > >, std::vector< glm::vec2 >, std::vector< glm::vec3 >, std::vector< glm::vec4 >, std::vector< glm::mat4 > > DataVariant
Multi-type data storage for different precision needs.
Definition NDData.hpp:70
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

References MayaFlux::Kakshya::ContainerDataStructure::dimensions, ensure_cpu(), m_data, m_slot_locks, m_structure, and MayaFlux::Kakshya::Region::start_coordinates.

+ Here is the call graph for this function: