@@ -18,6 +18,13 @@ namespace ZEngine::Applications
1818
1919 SceneRenderer->Initialize (Device);
2020 ImguiRenderer->Initialize (Device);
21+
22+ for (size_t i = 0 ; i < MaxMailBoxBufferCount; ++i)
23+ {
24+ RenderPayloads[i].UIOverlay .IndexedCmds .resize (100 );
25+ RenderPayloads[i].UIOverlay .ScissorCmds .resize (100 );
26+ RenderPayloads[i].UIOverlay .TextureIds .resize (100 );
27+ }
2128 }
2229
2330 void AppRenderPipeline::Shutdown ()
@@ -37,30 +44,32 @@ namespace ZEngine::Applications
3744
3845 void AppRenderPipeline::BeginFrame ()
3946 {
40- Device->SwapchainPtr ->AcquireNextImage ();
47+ auto swpachain = Device->SwapchainPtr ;
48+
49+ swpachain->AcquireNextImage (CurrentMailBoxBufferHead);
4150
4251 for (uint8_t thread_idx = 0 ; thread_idx < Device->CommandBufferMgr ->TotalThreadCount ; ++thread_idx)
4352 {
44- Device->CommandBufferMgr ->ResetPool (Device-> SwapchainPtr -> CurrentFrameIndex , thread_idx);
53+ Device->CommandBufferMgr ->ResetPool (swpachain-> CurrentFrame -> Index , thread_idx);
4554 }
4655
4756 // uint8_t render_worker_thread_idx = RenderThreadIndex + 1;
4857 // for (uint8_t worker_thread_idx = 0; worker_thread_idx < RenderWorkerThreadCount; ++worker_thread_idx)
4958 // {
5059 // auto thread_idx = render_worker_thread_idx + worker_thread_idx;
5160 // }
52- CurrentCmdBuf = Device->CommandBufferMgr ->GetCommandBuffer (Device-> SwapchainPtr -> CurrentFrameIndex , RenderMainThreadIndex, 0 , true );
61+ CurrentCmdBuf = Device->CommandBufferMgr ->GetCommandBuffer (swpachain-> CurrentFrame -> Index , RenderMainThreadIndex, 0 , true );
5362 }
5463
5564 void AppRenderPipeline::EndFrame ()
5665 {
5766 Device->CommandBufferMgr ->EnqueueBuffer (CurrentCmdBuf);
58- Device->Present ();
67+ Device->SwapchainPtr -> Present ();
5968 }
6069
6170 void AppRenderPipeline::RenderScene (Rendering::Cameras::CameraPtr camera, Rendering::Scenes::RenderScenePtr scene)
6271 {
63- if (scene->TransformBufferDirty [Device->SwapchainPtr ->CurrentFrameIndex ].load (std::memory_order_acquire) || scene->MeshAllocationDirty [Device->SwapchainPtr ->CurrentFrameIndex ].load (std::memory_order_acquire))
72+ if (scene->TransformBufferDirty [Device->SwapchainPtr ->CurrentFrame -> Index ].load (std::memory_order_acquire) || scene->MeshAllocationDirty [Device->SwapchainPtr ->CurrentFrame -> Index ].load (std::memory_order_acquire))
6473 {
6574 auto gpu_scene_data = SceneRenderer->RenderSceneData ;
6675
@@ -71,21 +80,21 @@ namespace ZEngine::Applications
7180
7281 auto indirect_buffer_set = Device->IndirectBufferSetManager .Access (gpu_scene_data->IndirectBufferHandle );
7382
74- auto vtx_buffer = vtx_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
75- auto idx_buffer = idx_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
76- auto transform_buffer = transform_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
77- auto rd_buffer = rd_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
78- auto indirect_buffer = indirect_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
83+ auto vtx_buffer = vtx_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
84+ auto idx_buffer = idx_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
85+ auto transform_buffer = transform_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
86+ auto rd_buffer = rd_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
87+ auto indirect_buffer = indirect_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
7988
8089 auto & suballocs = scene->NodeSubMeshesAllocations ;
8190
82- if (scene->TransformBufferDirty [Device->SwapchainPtr ->CurrentFrameIndex ].exchange (false , std::memory_order_acquire))
91+ if (scene->TransformBufferDirty [Device->SwapchainPtr ->CurrentFrame -> Index ].exchange (false , std::memory_order_acquire))
8392 {
8493 auto transform_data_view = ArrayView{scene->GlobalTransforms };
8594 transform_buffer->Write (transform_data_view);
8695 }
8796
88- if (scene->MeshAllocationDirty [Device->SwapchainPtr ->CurrentFrameIndex ].exchange (false , std::memory_order_acquire))
97+ if (scene->MeshAllocationDirty [Device->SwapchainPtr ->CurrentFrame -> Index ].exchange (false , std::memory_order_acquire))
8998 {
9099 auto scratch = ZGetScratch (&LocalArena);
91100
@@ -148,7 +157,7 @@ namespace ZEngine::Applications
148157 return ;
149158 }
150159
151- auto current_framebuffer = Device->SwapchainPtr ->SwapchainFramebuffers [Device->SwapchainPtr ->SwapchainImageIndex ];
160+ auto current_framebuffer = Device->SwapchainPtr ->SwapchainFramebuffers [Device->SwapchainPtr ->CurrentFrame -> ImageIndex ];
152161
153162 CurrentCmdBuf->BeginRenderPass (ImguiRenderer->UIPass , current_framebuffer, true );
154163 {
@@ -158,13 +167,13 @@ namespace ZEngine::Applications
158167 auto vertex_buffer_set = Device->VertexBufferSetManager .Access (payload.VBHandle );
159168 auto index_buffer_set = Device->IndexBufferSetManager .Access (payload.IdxBHandle );
160169
161- auto vertex_buffer = vertex_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
162- auto index_buffer = index_buffer_set->At (Device->SwapchainPtr ->CurrentFrameIndex );
170+ auto vertex_buffer = vertex_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
171+ auto index_buffer = index_buffer_set->At (Device->SwapchainPtr ->CurrentFrame -> Index );
163172
164173 vertex_buffer->Write (vtx_data_view);
165174 index_buffer->Write (idx_data_view);
166175
167- auto ui_second_cb = Device->CommandBufferMgr ->GetCommandBuffer (Device->SwapchainPtr ->CurrentFrameIndex , RenderMainThreadIndex, UICommandBufferIndex, false );
176+ auto ui_second_cb = Device->CommandBufferMgr ->GetCommandBuffer (Device->SwapchainPtr ->CurrentFrame -> Index , RenderMainThreadIndex, UICommandBufferIndex, false );
168177 ui_second_cb->ResetState ();
169178 ui_second_cb->BeginSecondary (ImguiRenderer->UIPass , current_framebuffer);
170179 ui_second_cb->SetViewport (ImguiRenderer->UIPass ->GetRenderAreaWidth (), ImguiRenderer->UIPass ->GetRenderAreaHeight ());
@@ -189,7 +198,7 @@ namespace ZEngine::Applications
189198 ui_second_cb->SetScissor (scissor_cmd.w , scissor_cmd.h , scissor_cmd.x , scissor_cmd.y );
190199 pc_data.TextureId = payload.TextureIds [i];
191200 ui_second_cb->PushConstants (VK_SHADER_STAGE_VERTEX_BIT, 0 , sizeof (Rendering::Renderers::PushConstantData), &pc_data);
192- ui_second_cb->BindDescriptorSets (Device->SwapchainPtr ->CurrentFrameIndex );
201+ ui_second_cb->BindDescriptorSets (Device->SwapchainPtr ->CurrentFrame -> Index );
193202 ui_second_cb->DrawIndexed (indexed_cmd.IdxCount , indexed_cmd.InstanceCount , indexed_cmd.FirstIndex , indexed_cmd.VertexOffset , indexed_cmd.FirstInstance );
194203 }
195204
0 commit comments