diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index bb00a10b..f34cafee 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -97,8 +97,8 @@ public: */ virtual void Update(const double delta_time){} - virtual void BeginFrame(){}; ///<开始当前帧 - virtual void EndFrame(){}; ///<当前帧结束 + virtual void BeginFrame(); ///<开始当前帧 + virtual void EndFrame(); ///<当前帧结束 virtual void MainLoop(); ///<主循环 diff --git a/inc/hgl/graph/VKRenderTarget.h b/inc/hgl/graph/VKRenderTarget.h index 9e1a21e7..a90119ee 100644 --- a/inc/hgl/graph/VKRenderTarget.h +++ b/inc/hgl/graph/VKRenderTarget.h @@ -8,6 +8,13 @@ #include #include VK_NAMESPACE_BEGIN + +工作: + + 1.RT支持多FBO,同交换链一样 + 2.RT内包含CommandBuffer + + /** * 渲染目标 */ diff --git a/inc/hgl/graph/module/SwapchainModule.h b/inc/hgl/graph/module/SwapchainModule.h index 4683c3ed..9ec32679 100644 --- a/inc/hgl/graph/module/SwapchainModule.h +++ b/inc/hgl/graph/module/SwapchainModule.h @@ -30,7 +30,9 @@ public: virtual ~SwapchainModule(); bool Init() override; - void Swap(); + + bool BeginFrame(); + void EndFrame(); public: diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index f7cb4f14..a21fc8a2 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -31,13 +31,27 @@ RenderFramework::~RenderFramework() void RenderFramework::StartTime() { last_time=cur_time=GetDoubleTime(); - frame_count++; +} + +void RenderFramework::BeginFrame() +{ + cur_time=GetDoubleTime(); + + swapchain_module->BeginFrame(); +} + +void RenderFramework::EndFrame() +{ + swapchain_module->EndFrame(); + + device->WaitIdle(); + + last_time=cur_time; + ++frame_count; } void RenderFramework::MainLoop() { - cur_time=GetDoubleTime(); - const double delta_time=cur_time-last_time; for(auto rm:module_list) @@ -61,10 +75,6 @@ void RenderFramework::MainLoop() } EndFrame(); - - swapchain_module->Swap(); - last_time=cur_time; - ++frame_count; } bool RenderFramework::Init() diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index a75ed088..ab007177 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -235,14 +235,23 @@ void SwapchainModule::OnResize(const VkExtent2D &extent) CreateSwapchainRenderTarget(); } -void SwapchainModule::Swap() +bool SwapchainModule::BeginFrame() { int index=swapchain_rt->AcquireNextImage(); if(index<0||index>=swapchain->image_count) - return; + return(false); - + return(true); +} + +void SwapchainModule::EndFrame() +{ + int index=swapchain_rt->GetCurrentFrameIndices(); + + + + swapchain_rt->Submit(); } VK_NAMESPACE_END