#include #include #include #include namespace mlx { void RenderPasses::Init() { m_2Dpass.Init(); m_final.Init(); func::function functor = [this](const EventBase& event) { if(event.What() == Event::ResizeEventCode) m_main_render_texture.Destroy(); }; EventBus::RegisterListener({ functor, "__MlxRenderPasses" }); } void RenderPasses::Pass(Scene& scene, Renderer& renderer, const Vec4f& clear_color) { if(!m_main_render_texture.IsInit()) { auto extent = kvfGetSwapchainImagesSize(renderer.GetSwapchain().Get()); #ifdef DEBUG m_main_render_texture.Init({}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, "mlx_renderpasses_target"); #else m_main_render_texture.Init({}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_SRGB, false, {}); #endif m_main_render_texture.TransitionLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); } m_main_render_texture.Clear(renderer.GetActiveCommandBuffer(), clear_color); m_2Dpass.Pass(scene, renderer, m_main_render_texture); m_final.Pass(scene, renderer, m_main_render_texture); } void RenderPasses::Destroy() { m_2Dpass.Destroy(); m_final.Destroy(); m_main_render_texture.Destroy(); } }