diff --git a/src/vht/RenderPass.cppm b/src/vht/RenderPass.cppm
index a4fb204..e5f3ac6 100644
--- a/src/vht/RenderPass.cppm
+++ b/src/vht/RenderPass.cppm
@@ -33,7 +33,7 @@ export namespace vht {
         std::shared_ptr<vht::Swapchain> m_swapchain{ nullptr };
         std::shared_ptr<vht::DepthImage> m_depth_image{ nullptr };
         vk::raii::RenderPass m_render_pass{ nullptr };
-        std::vector<vk::raii::Framebuffer> m_framebuffers;
+        vk::raii::Framebuffer m_framebuffer{ nullptr };
     public:
         explicit RenderPass(
             std::shared_ptr<vht::Window> window,
@@ -63,10 +63,10 @@ export namespace vht {
             }
             m_device->device().waitIdle();
 
-            m_framebuffers.clear();
+            m_framebuffer = nullptr; // 重置帧缓冲区
             m_swapchain->recreate();
             m_depth_image->recreate();
-            create_framebuffers();
+            create_framebuffer();
 
             m_window->reset_framebuffer_resized();
         }
@@ -74,12 +74,12 @@ export namespace vht {
         [[nodiscard]]
         const vk::raii::RenderPass& render_pass() const { return m_render_pass; }
         [[nodiscard]]
-        const std::vector<vk::raii::Framebuffer>& framebuffers() const { return m_framebuffers; }
+        const vk::raii::Framebuffer& framebuffer() const { return m_framebuffer; }
 
     private:
         void init() {
             create_render_pass();
-            create_framebuffers();
+            create_framebuffer();
         }
         // 创建渲染通道
         void create_render_pass() {
@@ -138,20 +138,38 @@ export namespace vht {
             m_render_pass = m_device->device().createRenderPass2( create_info );
         }
         // 创建帧缓冲区
-        void create_framebuffers() {
-            m_framebuffers.clear();
-            m_framebuffers.reserve( m_swapchain->size() );
-            vk::FramebufferCreateInfo create_info;
-            create_info.renderPass = m_render_pass;
-            create_info.width = m_swapchain->extent().width;
-            create_info.height = m_swapchain->extent().height;
-            create_info.layers = 1;
-            for (std::size_t i = 0; const auto& image_view : m_swapchain->image_views()) {
-                const std::array<vk::ImageView, 2> attachments { image_view, m_depth_image->image_view() };
-                create_info.setAttachments( attachments );
-                m_framebuffers.emplace_back( m_device->device().createFramebuffer(create_info) );
-                ++i;
-            }
+        void create_framebuffer() {
+            vk::StructureChain<
+                vk::FramebufferCreateInfo,
+                vk::FramebufferAttachmentsCreateInfo
+            > create_info;
+
+            create_info.get()
+                .setFlags( vk::FramebufferCreateFlagBits::eImageless )
+                .setRenderPass( m_render_pass )
+                .setAttachmentCount( 2 )    // 只需设置附件数，无需绑定具体资源
+                .setHeight( m_swapchain->extent().height )
+                .setWidth( m_swapchain->extent().width )
+                .setLayers( 1 );
+
+            const vk::Format swapchain_format = m_swapchain->format();
+            const vk::Format depth_format = m_depth_image->format();
+            std::array<vk::FramebufferAttachmentImageInfo, 2> image_infos;
+            image_infos[0].height = m_swapchain->extent().height; // 宽高和帧缓冲一致
+            image_infos[0].width = m_swapchain->extent().width;
+            image_infos[0].layerCount = 1;
+            image_infos[0].usage = vk::ImageUsageFlagBits::eColorAttachment;
+            image_infos[0].setViewFormats( swapchain_format ); // 需要设置图像格式
+            image_infos[1].height = m_swapchain->extent().height;
+            image_infos[1].width = m_swapchain->extent().width;
+            image_infos[1].layerCount = 1;
+            image_infos[1].usage = vk::ImageUsageFlagBits::eDepthStencilAttachment;
+            image_infos[1].setViewFormats( depth_format );
+
+            create_info.get<vk::FramebufferAttachmentsCreateInfo>()
+                .setAttachmentImageInfos( image_infos );
+
+            m_framebuffer = m_device->device().createFramebuffer( create_info.get() );
         }
 
     };
