Processes a buffer by coordinating child buffer operations.
22{
23 auto root_buf = std::dynamic_pointer_cast<RootGraphicsBuffer>(buffer);
26 "GraphicsBatchProcessor can only process its associated RootGraphicsBuffer");
27 return;
28 }
29
30 root_buf->cleanup_marked_buffers();
31
32 for (auto& ch_buffer : root_buf->get_child_buffers()) {
33 if (!ch_buffer)
34 continue;
35
36 if (ch_buffer->needs_removal()) {
37 continue;
38 }
39
40 if (!ch_buffer->has_data_for_cycle()) {
41 continue;
42 }
43
44 try {
45 if (ch_buffer->needs_default_processing() && ch_buffer->get_default_processor()) {
46 ch_buffer->process_default();
47 }
48
49 if (auto chain = ch_buffer->get_processing_chain()) {
50 if (ch_buffer->has_data_for_cycle()) {
51 chain->process_complete(ch_buffer);
52 }
53 }
54
55 auto vk_buffer = std::dynamic_pointer_cast<Buffers::VKBuffer>(ch_buffer);
56 if (vk_buffer && vk_buffer->has_render_pipeline()) {
57 for (const auto& [id, window] : vk_buffer->get_render_pipelines()) {
58 RootGraphicsBuffer::RenderableBufferInfo info;
59 info.buffer = vk_buffer;
60 info.target_window = window;
61 info.pipeline_id = id;
62 info.command_buffer_id = vk_buffer->get_pipeline_command(id);
63
64 root_buf->add_renderable_buffer(info);
65
67 "Registered buffer for rendering to window '{}'",
68 window->get_create_info().title);
69 }
70 }
71
72 } catch (const std::exception& e) {
74 "Error processing graphics buffer: {}", e.what());
75 }
76 }
77}
#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.