wren
Vulkan-based game engine
Toggle main menu visibility
Loading...
Searching...
No Matches
buffer.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <vk_mem_alloc.h>
4
#include <vulkan/vulkan_core.h>
5
6
#include <memory>
7
#include <span>
8
#include <vulkan/vulkan.hpp>
9
#include <
wren/vk/result.hpp
>
10
11
namespace
wren::vk
{
12
13
class
Buffer
{
14
public
:
15
static
auto
create
(
const
VmaAllocator& allocator,
size_t
size,
16
VkBufferUsageFlags usage,
17
const
std::optional<VmaAllocationCreateFlags>& flags = {})
18
-> std::shared_ptr<Buffer>;
19
20
static
auto
copy_buffer
(const ::vk::Device& device,
21
const ::vk::Queue& submit_queue,
22
const ::vk::CommandPool& command_pool,
23
const
std::shared_ptr<Buffer>& src,
24
const
std::shared_ptr<Buffer>& dst,
size_t
size)
25
->
expected<void>
;
26
27
Buffer
(
const
VmaAllocator& allocator) :
allocator_
(allocator) {}
28
~Buffer
();
29
30
Buffer
(
const
Buffer
&) =
delete
;
31
Buffer
(
Buffer
&&) =
delete
;
32
auto
operator=
(
const
Buffer
&) =
delete
;
33
auto
operator=
(
Buffer
&&) =
delete
;
34
35
template
<
typename
T>
36
auto
set_data_raw
(std::span<const T> data) ->
expected<void>
;
37
38
auto
set_data_raw
(
const
void
* data, std::size_t size) ->
expected<void>
;
39
40
auto
map
() {
41
vmaMapMemory(
allocator_
,
allocation_
, &
mapped_ptr_
);
42
return
mapped_ptr_
;
43
}
44
45
auto
unmap
() {
46
if
(
mapped_ptr_
==
nullptr
)
return
;
47
vmaUnmapMemory(
allocator_
,
allocation_
);
48
mapped_ptr_
=
nullptr
;
49
}
50
51
[[nodiscard]]
auto
get
()
const
{
return
buffer_
; }
52
53
private
:
54
::vk::Buffer
buffer_
{};
55
VmaAllocator
allocator_
=
nullptr
;
56
VmaAllocation
allocation_
{};
57
58
void
*
mapped_ptr_
=
nullptr
;
59
};
60
61
template
<
typename
T>
62
auto
Buffer::set_data_raw
(std::span<const T> data) ->
expected<void>
{
63
VK_ERR_PROP_VOID
(
static_cast<
::vk::Result
>
(vmaCopyMemoryToAllocation(
64
allocator_
, data.data(),
allocation_
, {0}, {data.size_bytes()})));
65
return
{};
66
}
67
68
}
// namespace wren::vk
wren::vk::Buffer
Definition
buffer.hpp:13
wren::vk::Buffer::copy_buffer
static auto copy_buffer(const ::vk::Device &device, const ::vk::Queue &submit_queue, const ::vk::CommandPool &command_pool, const std::shared_ptr< Buffer > &src, const std::shared_ptr< Buffer > &dst, size_t size) -> expected< void >
Definition
buffer.cpp:54
wren::vk::Buffer::~Buffer
~Buffer()
Definition
buffer.cpp:85
wren::vk::Buffer::unmap
auto unmap()
Definition
buffer.hpp:45
wren::vk::Buffer::Buffer
Buffer(Buffer &&)=delete
wren::vk::Buffer::create
static auto create(const VmaAllocator &allocator, size_t size, VkBufferUsageFlags usage, const std::optional< VmaAllocationCreateFlags > &flags={}) -> std::shared_ptr< Buffer >
Definition
buffer.cpp:13
wren::vk::Buffer::mapped_ptr_
void * mapped_ptr_
Definition
buffer.hpp:58
wren::vk::Buffer::allocation_
VmaAllocation allocation_
Definition
buffer.hpp:56
wren::vk::Buffer::set_data_raw
auto set_data_raw(std::span< const T > data) -> expected< void >
Definition
buffer.hpp:62
wren::vk::Buffer::operator=
auto operator=(const Buffer &)=delete
wren::vk::Buffer::buffer_
::vk::Buffer buffer_
Definition
buffer.hpp:54
wren::vk::Buffer::allocator_
VmaAllocator allocator_
Definition
buffer.hpp:55
wren::vk::Buffer::Buffer
Buffer(const Buffer &)=delete
wren::vk::Buffer::Buffer
Buffer(const VmaAllocator &allocator)
Definition
buffer.hpp:27
wren::vk::Buffer::map
auto map()
Definition
buffer.hpp:40
wren::vk::Buffer::get
auto get() const
Definition
buffer.hpp:51
wren::vk::Buffer::operator=
auto operator=(Buffer &&)=delete
wren::vk
Definition
render_pass.hpp:19
wren::expected
std::expected< T, Err > expected
Definition
result.hpp:43
result.hpp
VK_ERR_PROP_VOID
#define VK_ERR_PROP_VOID(err)
Definition
result.hpp:92
wren_vk
include
wren
vk
buffer.hpp
Generated by
1.17.0