Upload m_data[frame_index] to a new VKImage.
253{
255
256 if (frame_index >=
m_data.size()) {
258 "WindowContainer::to_image({}) : out of range (capacity={})",
260 return nullptr;
261 }
262
263 {
265 const uint32_t head =
m_write_head.load(std::memory_order_acquire);
267 const bool slot_valid = ring_full || frame_index < head;
268 if (!slot_valid) {
270 "WindowContainer::image_at({}) : frame index is ahead of write head ({}), data may be stale or uninitialized",
271 frame_index, head);
272 return nullptr;
273 }
274 }
275
276 const auto*
pixels = std::get_if<std::vector<uint8_t>>(&
m_data[frame_index]);
279 "WindowContainer::image_at({}) : slot is empty", frame_index);
280 return nullptr;
281 }
282
286
287 if (!img) {
289 "WindowContainer::image_at({}) : TextureLoom::create_2d failed", frame_index);
290 }
291
292 return img;
293}
#define MF_RT_WARN(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
const std::vector< float > * pixels
std::shared_ptr< Core::Window > m_window
std::atomic< uint32_t > m_write_head
void lock() override
Acquire a lock for thread-safe access.
std::shared_mutex m_data_mutex
ContainerDataStructure m_structure
std::vector< DataVariant > m_data
std::atomic< uint64_t > m_frames_written
uint32_t m_frame_capacity
static TextureLoom & instance()
std::shared_ptr< Core::VKImage > create_2d(uint32_t width, uint32_t height, ImageFormat format=ImageFormat::RGBA8, const void *data=nullptr, uint32_t mip_levels=1)
Create a 2D texture.
@ ContainerProcessing
Container operations (Kakshya - file/stream/region processing)
@ Kakshya
Containers[Signalsource, Stream, File], Regions, DataProcessors.
Core::GraphicsSurfaceInfo::SurfaceFormat query_surface_format(const std::shared_ptr< Core::Window > &window)
Query the actual vk::Format in use by the window's live swapchain, translated back to the MayaFlux su...
static uint64_t get_height(const std::vector< DataDimension > &dimensions)
Extract height from image/video dimensions.
static uint64_t get_width(const std::vector< DataDimension > &dimensions)
Extract width from image/video dimensions.