Begin render pass.
612{
614 if (!cmd) {
616 "Invalid command buffer ID: {}", cmd_id);
617 return;
618 }
619
620 if (!window) {
622 "Cannot begin render pass for null window");
623 return;
624 }
625
629 "Window '{}' not registered for rendering. "
630 "Call register_window_for_rendering() first.",
631 window->get_create_info().title);
632 return;
633 }
634
638 "Invalid render pass ID: {}", assoc_it->second.render_pass_id);
639 return;
640 }
641
643 if (!fb_handle) {
645 "No framebuffer available for window '{}'. "
646 "Ensure window is registered with GraphicsSubsystem.",
647 window->get_create_info().title);
648 return;
649 }
650
651 uint32_t width = 0, height = 0;
653
654 if (width == 0 || height == 0) {
656 "Invalid swapchain extent for window '{}': {}x{}",
657 window->get_create_info().title, width, height);
658 return;
659 }
660
661 vk::RenderPassBeginInfo begin_info;
662 begin_info.renderPass = rp_it->second.render_pass->get();
663 begin_info.framebuffer = fb_handle->get();
664 begin_info.renderArea.offset = vk::Offset2D { 0, 0 };
665 begin_info.renderArea.extent = vk::Extent2D { width, height };
666
667 std::vector<vk::ClearValue> clear_values(rp_it->second.attachments.size());
668 for (auto& clear_value : clear_values) {
669 clear_value.color = vk::ClearColorValue(clear_color);
670
671 }
672
673 begin_info.clearValueCount = static_cast<uint32_t>(clear_values.size());
674 begin_info.pClearValues = clear_values.data();
675
676 cmd.beginRenderPass(begin_info, vk::SubpassContents::eInline);
677
679 "Began render pass for window '{}' ({}x{})",
680 window->get_create_info().title, width, height);
681}
#define MF_ERROR(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
#define MF_TRACE(comp, ctx,...)
std::unordered_map< RenderPassID, RenderPassState > m_render_passes
std::unordered_map< std::shared_ptr< Core::Window >, WindowRenderAssociation > m_window_associations
ShaderFoundry * m_shader_foundry
Registry::Service::DisplayService * m_display_service
vk::CommandBuffer get_command_buffer(CommandBufferID cmd_id)
Get Vulkan command buffer handle from CommandBufferID.
@ Rendering
GPU rendering operations (graphics pipeline, frame rendering)
@ Portal
High-level user-facing API layer.
std::function< void *(const std::shared_ptr< void > &)> get_current_framebuffer
Get current framebuffer for a window.
std::function< void(const std::shared_ptr< void > &, uint32_t &, uint32_t &)> get_swapchain_extent
Get swapchain extent for a window.