Lugdunum  0.1.0
DeviceMemory.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 namespace lug {
7 namespace Graphics {
8 namespace Vulkan {
9 namespace API {
10 
11 namespace Builder {
12 class DeviceMemory;
13 } // Builder
14 
15 class Buffer;
16 class Device;
17 class Image;
18 
20  friend class Builder::DeviceMemory;
21 
22 public:
23  DeviceMemory() = default;
24 
25  DeviceMemory(const DeviceMemory&) = delete;
26  DeviceMemory(DeviceMemory&& deviceMemory);
27 
28  DeviceMemory& operator=(const DeviceMemory&) = delete;
29  DeviceMemory& operator=(DeviceMemory&& deviceMemory);
30 
31  ~DeviceMemory();
32 
33  explicit operator VkDeviceMemory() const {
34  return _deviceMemory;
35  }
36 
37  void destroy();
38 
39  void* map(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) const;
40  void* mapBuffer(const API::Buffer& buffer, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) const;
41  void* mapImage(const API::Image& image, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) const;
42 
43  void unmap() const;
44 
45  VkDeviceSize getSize() const;
46 
47 private:
48  explicit DeviceMemory(VkDeviceMemory deviceMemory, const Device* device, VkDeviceSize size);
49 
50 private:
51  VkDeviceMemory _deviceMemory{VK_NULL_HANDLE};
52  const Device* _device{nullptr};
53 
54  VkDeviceSize _size{0};
55 };
56 
58 
59 } // API
60 } // Vulkan
61 } // Graphics
62 } // lug
#define LUG_GRAPHICS_API
Definition: Export.hpp:11