57 lines
1.5 KiB
C++
57 lines
1.5 KiB
C++
#include "swapchain.h"
|
|
|
|
#include "logicaldevice.h"
|
|
|
|
Engine::SwapChain::SwapChain(LogicalDevice* logical):
|
|
logical(logical),
|
|
vk(),
|
|
images(),
|
|
extent(logical->chooseSwapExtent()),
|
|
imageViews(),
|
|
frameBuffers()
|
|
{
|
|
create();
|
|
}
|
|
|
|
void Engine::SwapChain::create() {
|
|
VkResult result = logical->createVkSwapChain(extent, vk);
|
|
|
|
if (result != VK_SUCCESS)
|
|
throw std::runtime_error("failed to create swap chain!");
|
|
|
|
logical->getVkSwapChainImages(vk, images);
|
|
|
|
imageViews.resize(images.size());
|
|
frameBuffers.resize(images.size());
|
|
|
|
for (size_t i = 0; i < images.size(); i++) {
|
|
if (logical->createVkImageView(images[i], imageViews[i]) != VK_SUCCESS)
|
|
throw std::runtime_error("failed to create image views!");
|
|
}
|
|
|
|
for (size_t i = 0; i < images.size(); i++) {
|
|
if (logical->createVkFrameBuffer(imageViews[i], extent, frameBuffers[i]) != VK_SUCCESS)
|
|
throw std::runtime_error("failed to create framebuffer!");
|
|
}
|
|
}
|
|
|
|
|
|
Engine::SwapChain::~SwapChain() {
|
|
for (VkFramebuffer& buffer : frameBuffers)
|
|
logical->destroyVkFrameBuffer(buffer);
|
|
|
|
for (VkImageView& imageView : imageViews)
|
|
logical->destroyVkImageView(imageView);
|
|
|
|
//images are also indirectly freed by this operation
|
|
logical->destroyVkSwapChain(vk);
|
|
}
|
|
|
|
VkExtent2D Engine::SwapChain::getExtent() const {
|
|
return extent;
|
|
}
|
|
|
|
VkFramebuffer Engine::SwapChain::getFrameBuffer(uint32_t index) {
|
|
return frameBuffers[index];
|
|
}
|