34 lines
1.4 KiB
C++
34 lines
1.4 KiB
C++
#include <VulkanPP/AccelerationStructureNV.hpp>
|
|
#include <VulkanPP/Device.hpp>
|
|
|
|
|
|
namespace VulkanPP {
|
|
|
|
AccelerationStructureNV::AccelerationStructureNV(IntrusivePtr<Device> owner0, VkAccelerationStructureNV handle, bool owned)
|
|
: _handle(handle), _owned(owned)
|
|
, _owner0(std::move(owner0))
|
|
{ }
|
|
|
|
AccelerationStructureNV::~AccelerationStructureNV() {
|
|
if (_handle && _owned) {
|
|
(void)vk.vkDestroyAccelerationStructureNV(_owner0 ? _owner0->getHandle() : (VkDevice)VK_NULL_HANDLE, _handle, nullptr);
|
|
_handle = VK_NULL_HANDLE;
|
|
}
|
|
}
|
|
|
|
// Original: vkCreateAccelerationStructureNV
|
|
AccelerationStructureNV::AccelerationStructureNV(IntrusivePtr<Device> parent, const VkAccelerationStructureCreateInfoNV* pCreateInfo) : _handle(VK_NULL_HANDLE), _owned(true)
|
|
, _owner0(parent)
|
|
{
|
|
VkAccelerationStructureNV _out = VK_NULL_HANDLE;
|
|
auto _res = vk.vkCreateAccelerationStructureNV(parent->getHandle(), pCreateInfo, nullptr, &_out);
|
|
if (_res != VK_SUCCESS) throw std::runtime_error("vkCreateAccelerationStructureNV failed");
|
|
_handle = _out;
|
|
}
|
|
// Original: vkCreateAccelerationStructureNV (factory)
|
|
IntrusivePtr<AccelerationStructureNV> AccelerationStructureNV::create(IntrusivePtr<Device> parent, const VkAccelerationStructureCreateInfoNV* pCreateInfo) {
|
|
return IntrusivePtr<AccelerationStructureNV>(new AccelerationStructureNV(parent, pCreateInfo));
|
|
}
|
|
|
|
} // namespace VulkanPP
|