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

◆ processing_function()

void MayaFlux::Buffers::GraphicsBatchProcessor::processing_function ( const std::shared_ptr< Buffer > &  buffer)
overridevirtual

Processes a buffer by coordinating child buffer operations.

Parameters
bufferBuffer to process (should be RootGraphicsBuffer)

This executes the batch processing loop:

  1. Iterates through all child buffers
  2. Executes each buffer's default processor
  3. Runs each buffer's processing chain
  4. Handles synchronization and error cases

Implements MayaFlux::Buffers::BufferProcessor.

Definition at line 19 of file RootGraphicsBuffer.cpp.

20{
21 auto root_buf = std::dynamic_pointer_cast<RootGraphicsBuffer>(buffer);
22 if (!root_buf || root_buf != m_root_buffer) {
24 "GraphicsBatchProcessor can only process its associated RootGraphicsBuffer");
25 return;
26 }
27
28 root_buf->cleanup_marked_buffers();
29
30 for (auto& ch_buffer : root_buf->get_child_buffers()) {
31 if (!ch_buffer)
32 continue;
33
34 if (ch_buffer->needs_removal()) {
35 continue;
36 }
37
38 if (!ch_buffer->has_data_for_cycle()) {
39 continue;
40 }
41
42 try {
43 if (ch_buffer->needs_default_processing() && ch_buffer->get_default_processor()) {
44 ch_buffer->process_default();
45 }
46
47 if (auto chain = ch_buffer->get_processing_chain()) {
48 if (ch_buffer->has_data_for_cycle()) {
49 chain->process_complete(ch_buffer);
50 }
51 }
52
53 auto vk_buffer = std::dynamic_pointer_cast<Buffers::VKBuffer>(ch_buffer);
54 if (vk_buffer && vk_buffer->has_render_pipeline()) {
55 for (const auto& [id, window] : vk_buffer->get_render_pipelines()) {
56 RootGraphicsBuffer::RenderableBufferInfo info;
57 info.buffer = vk_buffer;
58 info.target_window = window;
59 info.pipeline_id = id;
60 info.command_buffer_id = vk_buffer->get_pipeline_command(id);
61 info.needs_depth = vk_buffer->needs_depth_attachment();
62
63 root_buf->add_renderable_buffer(info);
64
66 "Registered buffer for rendering to window '{}'",
67 window->get_create_info().title);
68 }
69 }
70
71 } catch (const std::exception& e) {
73 "Error processing graphics buffer: {}", e.what());
74 }
75 }
76}
#define MF_RT_ERROR(comp, ctx,...)
#define MF_RT_TRACE(comp, ctx,...)
std::shared_ptr< RootGraphicsBuffer > m_root_buffer
Shared pointer to the root buffer this processor manages.
@ BufferProcessing
Buffer processing (Buffers::BufferManager, processing chains)
@ Core
Core engine, backend, subsystems.
Tendency< A, C > chain(const Tendency< A, B > &first, const Tendency< B, C > &second)
Sequential composition: evaluate first, feed result into second.
Definition Tendency.hpp:82

References MayaFlux::Buffers::RootGraphicsBuffer::RenderableBufferInfo::buffer, MayaFlux::Journal::BufferProcessing, MayaFlux::Buffers::RootGraphicsBuffer::RenderableBufferInfo::command_buffer_id, MayaFlux::Journal::Core, m_root_buffer, MF_RT_ERROR, MF_RT_TRACE, MayaFlux::Buffers::RootGraphicsBuffer::RenderableBufferInfo::needs_depth, MayaFlux::Buffers::RootGraphicsBuffer::RenderableBufferInfo::pipeline_id, and MayaFlux::Buffers::RootGraphicsBuffer::RenderableBufferInfo::target_window.