FCT
载入中...
搜索中...
未找到
VK_Swapchain.h
浏览该文件的文档.
1//
2// Created by Administrator on 2025/3/4.
3//
4#include "../ThirdParty.h"
5#include "../ToolDefine.h"
7#include "./Swapcain.h"
8#include "./VK_Image.h"
9#include "VK_Semaphore.h"
13#ifndef FCT_VK_SWAPCHAIN_H
14#define FCT_VK_SWAPCHAIN_H
15namespace FCT{
16 class VK_Context;
17 namespace RHI
18 {
19 class VK_Swapchain : public Swapchain {
20 public:
23 void create(vk::SurfaceKHR surface, uint32_t width, uint32_t height);
24 void create() override;
25 void destroy();
26 uint32_t getCurrentImageIndex() const;
27 void present() override;
28 bool acquireFirstImage();
29 void needRecreate(int width, int height) override;
30 bool processRecreate(bool waitFence = false);
31 void enableDepthBuffer(Format format) override;
32 /*
33 vk::Semaphore getImageAvailableSemaphore() const;
34 vk::Semaphore getRenderFinishedSemaphore() const;*/
35 vk::Fence getInFlightFence() const;
36 vk::Extent2D getExtent() const;
37 Format getFormat() const override;
38 Samples getSamples() const override;
39 ImageRenderTarget* target() const override ;
40 void setPresentFinshSemaphore(RHI::Semaphore* semaphore) override;
42 uint32_t getImageCount() const override
43 {
44 return m_fctImages.size();
45 }
46 Samples getSampleCount() const override;
47 FCT::Image* image() const override
48 {
49 return m_fctImage;
50 }
51 bool doRecreate();
52 void sync() override;
53 private:
54
56 void setupQueueFamilies();
57 vk::SwapchainCreateInfoKHR buildSwapchainCreateInfo(const vk::SurfaceFormatKHR& format,
58 vk::PresentModeKHR presentMode,
59 const vk::Extent2D& extent, uint32_t imageCount,
60 const vk::SurfaceCapabilitiesKHR& capabilities,
61 uint32_t graphicsQueueFamily);
62 void createSwapchain(uint32_t width, uint32_t height);
69 std::vector<RHI::Image*> m_fctImages;
71 vk::Format m_imageFormat;
72 std::vector<vk::Queue> m_presentQueues;
73 vk::Queue m_presentQueue;
76 vk::SurfaceKHR m_surface;
77 vk::SwapchainKHR m_swapchain;
78 vk::SurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<vk::SurfaceFormatKHR>& availableFormats);
79 vk::PresentModeKHR chooseSwapPresentMode(const std::vector<vk::PresentModeKHR>& availablePresentModes);
80 std::vector<vk::Image> m_images;
81 //std::vector<vk::ImageView> m_imageViews;
82 size_t m_currentFrame = 0;
83 vk::Extent2D m_extent;
84 uint32_t m_currentImageIndex = 0;
86 static constexpr uint32_t RECREATE_DEBOUNCE_MS = 50;
87 std::chrono::high_resolution_clock::time_point m_lastRecreateRequestTime;
97 };
98
99 }
100}
101
102#endif //FCT_VK_SWAPCHAIN_H
uint32_t width() const
uint32_t height() const
ImageRenderTarget * m_target
vk::PresentModeKHR chooseSwapPresentMode(const std::vector< vk::PresentModeKHR > &availablePresentModes)
Samples getSampleCount() const override
RHI::VK_Semaphore * m_prensentFinshSemphore
void setPresentFinshSemaphore(RHI::Semaphore *semaphore) override
FCT::Image * image() const override
vk::Extent2D getExtent() const
Samples getSamples() const override
vk::SurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector< vk::SurfaceFormatKHR > &availableFormats)
vk::Fence getInFlightFence() const
static constexpr uint32_t RECREATE_DEBOUNCE_MS
uint32_t m_pendingWidth
窗口resize的时候传递的大小
void present() override
提交present命令
std::vector< RHI::Image * > m_fctImages
uint32_t getCurrentImageIndex() const
vk::SwapchainKHR m_swapchain
MutilBufferImage * m_depthStencilImage
std::chrono::high_resolution_clock::time_point m_lastRecreateRequestTime
std::vector< vk::Queue > m_presentQueues
void needRecreate(int width, int height) override
用于窗口通知需要 recreate
bool processRecreate(bool waitFence=false)
void createSwapchain(uint32_t width, uint32_t height)
std::vector< vk::Image > m_images
ImageRenderTarget * target() const override
获取交换链对应的target
RHI::Semaphore * getImageAvailableSemaphore() override
用于渲染命令同步的,获取到 图像,gpu可以执行渲染命令
void enableDepthBuffer(Format format) override
启用深度模板 缓存
Format getFormat() const override
uint32_t getImageCount() const override
vk::SwapchainCreateInfoKHR buildSwapchainCreateInfo(const vk::SurfaceFormatKHR &format, vk::PresentModeKHR presentMode, const vk::Extent2D &extent, uint32_t imageCount, const vk::SurfaceCapabilitiesKHR &capabilities, uint32_t graphicsQueueFamily)
MutilBufferImage * m_fctImage