SpiecsEngine
 
Loading...
Searching...
No Matches
VulkanRenderPass.cpp
Go to the documentation of this file.
1/**
2* @file VulkanRenderPass.cpp.
3* @brief The VulkanRenderPass Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
9#include "Slate/Imgui/ViewPort/ImguiViewport.h"
10
11namespace Spices {
12
14 VulkanState& vulkanState ,
15 const std::string& passName ,
16 std::shared_ptr<VulkanDevice> vulkanDevice ,
17 VkRenderPassCreateInfo& createInfo ,
18 std::vector<VkImageView>& imageViews ,
19 uint32_t layers ,
20 bool isUseSwapChianImage
21 )
22 : VulkanObject(vulkanState)
24 {
26
27 /**
28 * @brief CreateRenderPass.
29 */
30 VK_CHECK(vkCreateRenderPass(m_VulkanState.m_Device, &createInfo, nullptr, &m_RenderPass));
31 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_RENDER_PASS, reinterpret_cast<uint64_t>(m_RenderPass), m_VulkanState.m_Device, passName)
32
33 for (size_t i = 0; i < MaxFrameInFlight; i++)
34 {
35 /**
36 * @brief Add SwapChian's image to local variable.
37 */
38 std::vector<VkImageView> views = imageViews;
39
40 if (isUseSwapChianImage)
41 {
42 views.emplace(views.begin(), m_VulkanState.m_SwapChainImageViews[i]);
43 }
44
45 /**
46 * @brief Instanced a VkFramebufferCreateInfo with default value.
47 */
48 VkFramebufferCreateInfo framebufferInfo{};
49 framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
50 framebufferInfo.renderPass = m_RenderPass;
51 framebufferInfo.attachmentCount = static_cast<uint32_t>(views.size());
52 framebufferInfo.pAttachments = views.data();
53
54 /**
55 * @brief In the first frame we use surface size instend viewport size.
56 */
57 if (isUseSwapChianImage || !SlateSystem::GetRegister())
58 {
59 framebufferInfo.width = m_VulkanDevice->GetSwapChainSupport().surfaceSize.width;
60 framebufferInfo.height = m_VulkanDevice->GetSwapChainSupport().surfaceSize.height;
61 }
62 else
63 {
64 framebufferInfo.width = static_cast<uint32_t>(SlateSystem::GetRegister()->GetViewPort()->GetPanelSize().x);
65 framebufferInfo.height = static_cast<uint32_t>(SlateSystem::GetRegister()->GetViewPort()->GetPanelSize().y);
66 }
67
68 /**
69 * @brief FrameBuffer Attachments layers(the max one).
70 */
71 framebufferInfo.layers = layers;
72
73 /**
74 * @brief CreateFrameBuffer.
75 */
76 VK_CHECK(vkCreateFramebuffer(m_VulkanState.m_Device, &framebufferInfo, nullptr, &m_SwapChainFramebuffers[i]));
77 DEBUGUTILS_SETOBJECTNAME(VK_OBJECT_TYPE_FRAMEBUFFER, reinterpret_cast<uint64_t>(m_SwapChainFramebuffers[i]), m_VulkanState.m_Device, passName)
78 }
79 }
80
82 {
84
85 /**
86 * @brief Destroy FrameBuffer.
87 */
88 for (int i = 0; i < MaxFrameInFlight; i++)
89 {
90 vkDestroyFramebuffer(m_VulkanState.m_Device, m_SwapChainFramebuffers[i], nullptr);
91 m_SwapChainFramebuffers[i] = nullptr;
92 }
93
94 /**
95 * @brief Destroy RenderPass.
96 */
97 vkDestroyRenderPass(m_VulkanState.m_Device, m_RenderPass, nullptr);
98 m_RenderPass = nullptr;
99 }
100}
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
Definition VulkanUtils.h:68
VulkanInstance Class. This class defines the VulkanDevice behave. This class is just a wrapper of vkd...
VulkanObject(VulkanState &vulkanState)
Constructor Function. Init member variables.
VulkanObject Class. This class defines the basic behaves of VulkanObject. When we create an new Vulka...
virtual ~VulkanRenderPass() override
Destructor Function.
VulkanRenderPass(VulkanState &vulkanState, const std::string &passName, std::shared_ptr< VulkanDevice > vulkanDevice, VkRenderPassCreateInfo &createInfo, std::vector< VkImageView > &imageViews, uint32_t layers, bool isUseSwapChianImage)
Constructor Function. Create VkRenderPass and VkFramebuffer.
VulkanRenderPass Class. This class defines the VulkanRenderPass behaves. This class is just a wrapper...
constexpr uint32_t MaxFrameInFlight
Max In Flight Frame. 2 buffers are enough in this program.
Definition VulkanUtils.h:22
This struct contains all Vulkan object in used global.
Definition VulkanUtils.h:74