#include "resources/render_target.hpp" #include namespace sophia { RenderTarget::RenderTarget(Device& device, vk::Format format, u32 width, u32 height) : device{device}, format{format} { create(std::max(width, 1u), std::max(height, 1u)); } RenderTarget::~RenderTarget() { destroy(); } vk::Extent2D RenderTarget::getExtent() const { vk::Extent3D extent = this->image->getExtent(); return {extent.width, extent.height}; } void RenderTarget::requestResize(u32 width, u32 height) { this->pendingExtent = vk::Extent2D{std::max(width, 1u), std::max(height, 1u)}; } void RenderTarget::applyPendingResize() { if (!this->pendingExtent) { return; } vk::Extent2D extent = *this->pendingExtent; this->pendingExtent.reset(); if (extent == getExtent()) { return; } this->device.waitIdle(); destroy(); create(extent.width, extent.height); } void RenderTarget::create(u32 width, u32 height) { this->image = Image::Builder(this->device) .setExtent(width, height) .setFormat(this->format) .asColorAttachment() .withView() .build(); } void RenderTarget::destroy() { this->image.reset(); } } // namespace sophia