From b47b0960399fceba9f14650c03f921bd7468a2ab Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 25 Jan 2025 21:17:00 +0800 Subject: [PATCH] optimized image_count of Swapchain --- inc/hgl/graph/RenderFramework.h | 3 ++- inc/hgl/graph/VKRenderTarget.h | 6 ------ src/SceneGraph/module/SwapchainModule.cpp | 12 +++++++++++- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 73afb506..187bd14d 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -1,7 +1,8 @@ #pragma once -#include #include +#include +#include #include VK_NAMESPACE_BEGIN diff --git a/inc/hgl/graph/VKRenderTarget.h b/inc/hgl/graph/VKRenderTarget.h index 49aef19e..88826bba 100644 --- a/inc/hgl/graph/VKRenderTarget.h +++ b/inc/hgl/graph/VKRenderTarget.h @@ -16,12 +16,6 @@ VK_NAMESPACE_BEGIN * * 2.多帧渲染目标,即有多帧数据,每次渲染都是指定帧,典型的是Swapchain * -* 但不管是单帧还是多帧,又有两种情况: -* -* 1.单个颜色缓冲区 -* -* 2.多个颜色缓冲区,典型如PBR GBuffer -* * 所以RenderTarget的其实是一个多态类,根据不同的情况,有不同的实现 */ diff --git a/src/SceneGraph/module/SwapchainModule.cpp b/src/SceneGraph/module/SwapchainModule.cpp index 4398b696..3d6de680 100644 --- a/src/SceneGraph/module/SwapchainModule.cpp +++ b/src/SceneGraph/module/SwapchainModule.cpp @@ -24,11 +24,21 @@ namespace { VkSwapchainCreateInfoKHR swapchain_ci; + uint32_t image_count; + + if(dev_attr->surface_caps.maxImageCount<3) + image_count=dev_attr->surface_caps.maxImageCount; + else + if(dev_attr->surface_caps.maxImageCount>3) + image_count=3; + else + image_count=dev_attr->surface_caps.minImageCount; + swapchain_ci.sType =VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; swapchain_ci.pNext =nullptr; swapchain_ci.flags =0; swapchain_ci.surface =dev_attr->surface; - swapchain_ci.minImageCount =dev_attr->surface_caps.minImageCount; + swapchain_ci.minImageCount =image_count; swapchain_ci.imageFormat =dev_attr->surface_format.format; swapchain_ci.imageColorSpace =dev_attr->surface_format.colorSpace; swapchain_ci.imageExtent =dev_attr->surface_caps.currentExtent;