40 lines
1.8 KiB
C++
40 lines
1.8 KiB
C++
#include <VulkanPP/Framebuffer.hpp>
|
|
#include <VulkanPP/Device.hpp>
|
|
#include <VulkanPP/ImageView.hpp>
|
|
#include <VulkanPP/RenderPass.hpp>
|
|
|
|
|
|
namespace VulkanPP {
|
|
|
|
Framebuffer::Framebuffer(IntrusivePtr<Device> owner0, VkFramebuffer handle, bool owned, IntrusivePtr<RenderPass> owner_RenderPass, const std::vector<IntrusivePtr<ImageView>>& owners_ImageView)
|
|
: _handle(handle), _owned(owned)
|
|
, _owner0(std::move(owner0))
|
|
, _lifetime_owner_RenderPass(std::move(owner_RenderPass))
|
|
, _lifetime_owners_ImageView(owners_ImageView)
|
|
{ }
|
|
|
|
Framebuffer::~Framebuffer() {
|
|
if (_handle && _owned) {
|
|
(void)vk.vkDestroyFramebuffer(_owner0 ? _owner0->getHandle() : (VkDevice)VK_NULL_HANDLE, _handle, nullptr);
|
|
_handle = VK_NULL_HANDLE;
|
|
}
|
|
}
|
|
|
|
// Original: vkCreateFramebuffer
|
|
Framebuffer::Framebuffer(IntrusivePtr<Device> parent, const VkFramebufferCreateInfo* pCreateInfo, IntrusivePtr<RenderPass> owner_RenderPass, const std::vector<IntrusivePtr<ImageView>>& owners_ImageView) : _handle(VK_NULL_HANDLE), _owned(true)
|
|
, _owner0(parent)
|
|
, _lifetime_owner_RenderPass(owner_RenderPass)
|
|
, _lifetime_owners_ImageView(owners_ImageView)
|
|
{
|
|
VkFramebuffer _out = VK_NULL_HANDLE;
|
|
auto _res = vk.vkCreateFramebuffer(parent->getHandle(), pCreateInfo, nullptr, &_out);
|
|
if (_res != VK_SUCCESS) throw std::runtime_error("vkCreateFramebuffer failed");
|
|
_handle = _out;
|
|
}
|
|
// Original: vkCreateFramebuffer (factory)
|
|
IntrusivePtr<Framebuffer> Framebuffer::create(IntrusivePtr<Device> parent, const VkFramebufferCreateInfo* pCreateInfo, IntrusivePtr<RenderPass> owner_RenderPass, const std::vector<IntrusivePtr<ImageView>>& owners_ImageView) {
|
|
return IntrusivePtr<Framebuffer>(new Framebuffer(parent, pCreateInfo, owner_RenderPass, owners_ImageView));
|
|
}
|
|
|
|
} // namespace VulkanPP
|