47 lines
1.7 KiB
C++
47 lines
1.7 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include <stdexcept>
|
|
#include <IntrusivePtr.h>
|
|
#include <VulkanPP/VulkanFunctions.hpp>
|
|
|
|
namespace VulkanPP {
|
|
class Buffer;
|
|
class Device;
|
|
|
|
|
|
|
|
// === Lifetime summary (deterministic) ===
|
|
// Handle: VkBufferView
|
|
// Holds (destroy/free owners + creation parent, or producer parent): Device
|
|
// Keeps (from *CreateInfo/*AllocateInfo): Buffer via VkBufferViewCreateInfo::buffer
|
|
// Destructor calls vkDestroy*/vkFree* only if _owned == true.
|
|
|
|
class BufferView : public RefCounted {
|
|
public:
|
|
VkBufferView getHandle() const noexcept { return _handle; }
|
|
IntrusivePtr<Device> getDevice() const noexcept { return _owner0; }
|
|
IntrusivePtr<Buffer> getBuffer() const noexcept { return _lifetime_owner_Buffer; }
|
|
public:
|
|
static IntrusivePtr<BufferView> fromHandle(IntrusivePtr<Device> owner0, VkBufferView handle) {
|
|
return IntrusivePtr<BufferView>(new BufferView(owner0, handle, false, IntrusivePtr<Buffer>()));
|
|
}
|
|
private:
|
|
explicit BufferView(IntrusivePtr<Device> owner0, VkBufferView handle, bool owned, IntrusivePtr<Buffer> owner_Buffer);
|
|
~BufferView() override;
|
|
private:
|
|
VkBufferView _handle{VK_NULL_HANDLE};
|
|
bool _owned{false};
|
|
IntrusivePtr<Device> _owner0;
|
|
IntrusivePtr<Buffer> _lifetime_owner_Buffer;
|
|
|
|
public:
|
|
// Original: vkCreateBufferView
|
|
explicit BufferView(IntrusivePtr<Device> parent, const VkBufferViewCreateInfo* pCreateInfo, IntrusivePtr<Buffer> owner_Buffer);
|
|
// Original: vkCreateBufferView (factory)
|
|
static IntrusivePtr<BufferView> create(IntrusivePtr<Device> parent, const VkBufferViewCreateInfo* pCreateInfo, IntrusivePtr<Buffer> owner_Buffer);
|
|
|
|
};
|
|
using PBufferView = IntrusivePtr<BufferView>;
|
|
|
|
} // namespace VulkanPP
|