diff --git a/src/vht/Drawer.cppm b/src/vht/Drawer.cppm
index e41271f..63d8b54 100644
--- a/src/vht/Drawer.cppm
+++ b/src/vht/Drawer.cppm
@@ -8,6 +8,7 @@ import DataLoader;
 import Window;
 import Device;
 import Swapchain;
+import DepthImage;
 import RenderPass;
 import GraphicsPipeline;
 import CommandPool;
@@ -41,6 +42,7 @@ export namespace vht {
         std::shared_ptr<vht::Window> m_window{ nullptr };
         std::shared_ptr<vht::Device> m_device{ nullptr };
         std::shared_ptr<vht::Swapchain> m_swapchain{ nullptr };
+        std::shared_ptr<vht::DepthImage> m_depth_image{ nullptr };
         std::shared_ptr<vht::RenderPass> m_render_pass{ nullptr };
         std::shared_ptr<vht::GraphicsPipeline> m_graphics_pipeline{ nullptr };
         std::shared_ptr<vht::CommandPool> m_command_pool{ nullptr };
@@ -58,6 +60,7 @@ export namespace vht {
             std::shared_ptr<vht::Window> window,
             std::shared_ptr<vht::Device> device,
             std::shared_ptr<vht::Swapchain> swapchain,
+            std::shared_ptr<vht::DepthImage> depth_image,
             std::shared_ptr<vht::RenderPass> render_pass,
             std::shared_ptr<vht::GraphicsPipeline> graphics_pipeline,
             std::shared_ptr<vht::CommandPool> command_pool,
@@ -68,6 +71,7 @@ export namespace vht {
             m_window(std::move(window)),
             m_device(std::move(device)),
             m_swapchain(std::move(swapchain)),
+            m_depth_image(std::move(depth_image)),
             m_render_pass(std::move(render_pass)),
             m_graphics_pipeline(std::move(graphics_pipeline)),
             m_command_pool(std::move(command_pool)),
@@ -189,19 +193,30 @@ export namespace vht {
         void record_command_buffer(const vk::raii::CommandBuffer& command_buffer, const std::uint32_t image_index) const {
             command_buffer.begin( vk::CommandBufferBeginInfo{} );
 
-            vk::RenderPassBeginInfo render_pass_begin_info;
-            render_pass_begin_info.renderPass = m_render_pass->render_pass();
-            render_pass_begin_info.framebuffer = m_render_pass->framebuffers()[image_index];
-
-            render_pass_begin_info.renderArea.offset = vk::Offset2D{0, 0};
-            render_pass_begin_info.renderArea.extent = m_swapchain->extent();
-
             std::array<vk::ClearValue, 2> clear_values;
             clear_values[0] = vk::ClearColorValue{ 0.0f, 0.0f, 0.0f, 1.0f };
             clear_values[1] = vk::ClearDepthStencilValue{ 1.0f ,0 };
-            render_pass_begin_info.setClearValues( clear_values );
 
-            command_buffer.beginRenderPass( render_pass_begin_info, vk::SubpassContents::eInline);
+            vk::StructureChain<
+                vk::RenderPassBeginInfo,
+                vk::RenderPassAttachmentBeginInfo
+            > render_pass_begin_info;
+
+            render_pass_begin_info.get()
+                .setRenderPass( m_render_pass->render_pass() )
+                .setFramebuffer( m_render_pass->framebuffer() )
+                .setRenderArea( vk::Rect2D{ vk::Offset2D{0, 0}, m_swapchain->extent() } )
+                .setClearValues( clear_values );
+
+            std::array<vk::ImageView, 2> attachments{
+                m_swapchain->image_views()[image_index],
+                m_depth_image->image_view()
+            };
+
+            render_pass_begin_info.get<vk::RenderPassAttachmentBeginInfo>()
+                .setAttachments( attachments );
+
+            command_buffer.beginRenderPass( render_pass_begin_info.get(), vk::SubpassContents::eInline);
 
             command_buffer.bindPipeline( vk::PipelineBindPoint::eGraphics, m_graphics_pipeline->pipeline() );
 
