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

◆ processing_function()

void MayaFlux::Buffers::FormaProcessor::processing_function ( const std::shared_ptr< Buffer > &  buffer)
overrideprotectedvirtual

The core processing function that must be implemented by derived classes.

Parameters
bufferBuffer to process

This method is where the actual transformation logic is implemented. It should contain the algorithmic details of how the buffer's data is transformed, analyzed, or processed. The implementation can utilize any backend capabilities available to the processor, including:

  • Parallel Processing: Using multi-threading or GPU compute for large datasets
  • Data Transformations: Applying mathematical operations, filters, or effects
  • Feature Extraction: Analyzing data characteristics for further processing

Derived classes must override this method to provide specific processing behavior.

Implements MayaFlux::Buffers::BufferProcessor.

Definition at line 84 of file FormaProcessor.cpp.

85{
86 if (m_texture_dirty.test(std::memory_order_acquire)) {
87 m_texture_dirty.clear(std::memory_order_release);
88
89 auto vk = std::dynamic_pointer_cast<VKBuffer>(buffer);
90 if (vk) {
91 if (auto rp = vk->get_render_processor()) {
93 rp->bind_texture(m_pending_texture->binding,
94 m_pending_texture->image);
95 }
96 }
97 }
98 m_pending_texture.reset();
99 }
100
101 if (!m_geometry_dirty.test(std::memory_order_acquire))
102 return;
103
104 m_geometry_dirty.clear(std::memory_order_release);
105 std::swap(m_active, m_pending_geometry);
106
107 if (m_active.empty())
108 return;
109
110 auto vk = std::dynamic_pointer_cast<VKBuffer>(buffer);
111 if (!vk)
112 return;
113
114 const size_t required = m_active.size();
115 const size_t available = vk->get_size_bytes();
116
117 if (required > available) {
118 vk->resize(static_cast<size_t>(required * 1.5F), false);
119 m_staging = create_staging_buffer(vk->get_size_bytes());
120 }
121
123 m_active.data(),
124 std::min<size_t>(required, vk->get_size_bytes()),
125 vk,
126 m_staging);
127
128 auto layout = vk->get_vertex_layout();
129 if (layout) {
130 auto updated = *layout;
131 updated.vertex_count = vertex_count(m_active.size());
132 vk->set_vertex_layout(updated);
133 }
134}
std::vector< uint8_t > m_pending_geometry
std::shared_ptr< VKBuffer > m_staging
uint32_t vertex_count(size_t byte_count) const noexcept
std::optional< PendingTexture > m_pending_texture
std::shared_ptr< VKBuffer > create_staging_buffer(size_t size)
Create staging buffer for transfers.
void upload_to_gpu(const void *data, size_t size, const std::shared_ptr< VKBuffer > &target, const std::shared_ptr< VKBuffer > &staging)
Upload raw data to GPU buffer (auto-detects host-visible vs device-local)

References MayaFlux::Buffers::create_staging_buffer(), m_active, m_geometry_dirty, m_pending_geometry, m_pending_texture, m_staging, m_texture_dirty, MayaFlux::Buffers::upload_to_gpu(), and vertex_count().

+ Here is the call graph for this function: