Hubris Engine Dev
A Project to learn and get into Game Engine developement.
 
Loading...
Searching...
No Matches
vkSwapchain.cpp
Go to the documentation of this file.
1#include "pch.h"
5
6using namespace Hubris::Graphics;
7using namespace Hubris::Graphics::Vulkan;
8
9Hubris::Graphics::Vulkan::vkSwapchain::vkSwapchain(VkSwapchainKHR swapchain, VkFormat format, VkExtent2D extent) noexcept : handle(swapchain),
10 swapChainExtent(extent), swapChainImageFormat(format)
11{
12 if (swapchain == VK_NULL_HANDLE) {
13 Logger::Log("VulkanSwapchain: default-constructed into invalid state.");
14 return;
15 }
16 vkGetSwapchainImagesKHR(vkBackend::GetDevice(), swapchain, &imageCount, nullptr);
17 images.resize(imageCount);
18 swapChainImageViews.resize(imageCount);
19 vkGetSwapchainImagesKHR(vkBackend::GetDevice(), swapchain, &imageCount, images.data());
20
21
22
23 for (unsigned int i = 0; i < imageCount; i++) {
24 VkImageViewCreateInfo createInfo{};
25 createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
26 createInfo.image = images[i];
27 createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
28 createInfo.format = swapChainImageFormat;
29
30 createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
31 createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
32 createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
33 createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
34
35 createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
36 createInfo.subresourceRange.baseMipLevel = 0;
37 createInfo.subresourceRange.levelCount = 1;
38 createInfo.subresourceRange.baseArrayLayer = 0;
39 createInfo.subresourceRange.layerCount = 1;
40 if (vkCreateImageView(vkBackend::GetDevice(), &createInfo, vkBackend::GetAllocator(), &swapChainImageViews[i]) != VK_SUCCESS) {
41 Logger::Fatal("Failed to create image view.");
42 return;
43 }
44 }
45
46}
47
52
53
58
60{
61 return nullptr;
62}
63
68
69void Hubris::Graphics::Vulkan::vkSwapchain::Resize(uint32_t width, uint32_t height)
70{
71}
72
74{
75 return imageCount;
76}
77
79{
80 return VkFormatToFormat(swapChainImageFormat);
81}
82
84{
85 return handle != VK_NULL_HANDLE;
86}
87
89{
90 vkDestroySwapchainKHR(vkBackend::GetDevice(), handle, vkBackend::GetAllocator());
91 handle = VK_NULL_HANDLE;
92 swapChainExtent.height = 0;
93 swapChainExtent.width = 0;
94 swapChainImageFormat = VK_FORMAT_UNDEFINED;
95 for (auto imageview : swapChainImageViews) {
96
97 vkDestroyImageView(vkBackend::GetDevice(), imageview, vkBackend::GetAllocator());
98 }
99}
static const VkAllocationCallbacks * GetAllocator() noexcept
Definition vkBackend.h:515
static VkDevice GetDevice() noexcept
Definition vkBackend.h:252
size_t GetImageCount() const override
SwapchainResult AcquireNextImage(uint32_t &imageIndex) override
void * GetImage(uint32_t imageIndex) const override
void Resize(uint32_t width, uint32_t height) override
SwapchainResult Present(uint32_t imageIndex) override
virtual Format GetImageFormat() const noexcept override
vkSwapchain(VkSwapchainKHR swapchain, VkFormat format, VkExtent2D extent) noexcept
virtual bool IsValid() const noexcept override
static void Log(const char *message)
Definition Logger.h:104
static void Fatal(fmt::format_string< Args... > message, Args &&... args)
Definition Logger.h:147
constexpr Format VkFormatToFormat(VkFormat format) noexcept
Definition Utility.h:75
Contains all graphics related classes and structs.
Definition Format.h:9