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

◆ on_detach()

void MayaFlux::Buffers::RenderProcessor::on_detach ( const std::shared_ptr< Buffer > &  buffer)
overridevirtual

Remove a buffer from this processor and its target window.

Processor-wide pipeline and window state remain active for other buffers.

Reimplemented from MayaFlux::Buffers::BufferProcessor.

Definition at line 1001 of file RenderProcessor.cpp.

1002{
1003 auto vk_buffer = std::dynamic_pointer_cast<VKBuffer>(buffer);
1004 if (!vk_buffer)
1005 return;
1006
1007 vk_buffer->remove_pipeline_window(m_pipeline_id);
1008
1009 if (m_target_window) {
1010 bool has_other_pipeline = false;
1011 for (const auto& [id, window] : vk_buffer->get_render_pipelines()) {
1012 if (window == m_target_window) {
1013 has_other_pipeline = true;
1014 break;
1015 }
1016 }
1017
1018 if (!has_other_pipeline) {
1019 auto primary = vk_buffer->get_render_processor();
1020 has_other_pipeline = primary && primary.get() != this
1021 && primary->get_target_window() == m_target_window;
1022
1023 if (!has_other_pipeline) {
1024 for (const auto& render : vk_buffer->get_additional_render_processors()) {
1025 if (render.get() != this && render->get_target_window() == m_target_window) {
1026 has_other_pipeline = true;
1027 break;
1028 }
1029 }
1030 }
1031 }
1032
1033 if (!has_other_pipeline)
1034 m_target_window->unregister_rendering_buffer(vk_buffer);
1035 }
1036
1037 std::erase(m_hidden_buffers, vk_buffer.get());
1038 m_buffer_info.erase(vk_buffer);
1040}
std::shared_ptr< NetworkGeometryBuffer > buffer
std::weak_ptr< Core::Window > window
Definition Picker.cpp:23
Portal::Graphics::RenderPipelineID m_pipeline_id
std::unordered_map< std::shared_ptr< VKBuffer >, BufferState > m_buffer_info
std::shared_ptr< Core::Window > m_target_window
std::vector< const VKBuffer * > m_hidden_buffers
Non-owning exceptions to default visibility, removed on detach.
void on_detach(const std::shared_ptr< Buffer > &buffer) override
Called when this processor is detached from a buffer.

References buffer, and window.