jGL
Loading...
Searching...
No Matches
uniformBuffer.h
Go to the documentation of this file.
2#include <jGL/Vulkan/buffer.h>
3#include <memory>
4
5namespace jGL::Vulkan
6{
8 {
9
10 public:
11
16
17 void setBinding(uint32_t b) { binding = b; }
18
19 virtual VkDescriptorSetLayoutBinding getLayout() = 0;
20 virtual VkDescriptorBufferInfo getBufferInfo() = 0;
21
22 protected:
23
24 const Device & device;
25
26 VkDeviceSize size;
27
28 uint32_t binding = 0;
29 VkShaderStageFlagBits stage = VK_SHADER_STAGE_ALL;
30
31 std::unique_ptr<Buffer> buffer;
32
33 };
34
35 template <class T>
37 {
38
39 public:
40
42 (
43 const Device & device,
44 T data,
45 uint32_t binding = 0,
46 VkShaderStageFlagBits stage = VK_SHADER_STAGE_ALL
47 )
49 {
50 this->binding = binding;
51 this->stage = stage;
52
53 size = sizeof(T);
54
55 buffer = std::make_unique<Buffer>
56 (
57 device,
58 size,
59 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,
60 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
61 );
62
63 buffer->copyMemory
64 (
65 0,
66 size,
67 &data,
68 0
69 );
70 }
71
72 VkDescriptorSetLayoutBinding getLayout()
73 {
74 VkDescriptorSetLayoutBinding uboLayoutBinding{};
75 uboLayoutBinding.binding = binding;
76 uboLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
77 uboLayoutBinding.descriptorCount = 1;
78 uboLayoutBinding.pImmutableSamplers = nullptr;
79 uboLayoutBinding.stageFlags = stage;
80 return uboLayoutBinding;
81 }
82
83 VkDescriptorBufferInfo getBufferInfo()
84 {
85 VkDescriptorBufferInfo bufferInfo{};
86 bufferInfo.buffer = buffer->getVkBuffer();
87 bufferInfo.offset = 0;
88 bufferInfo.range = sizeof(T);
89 return bufferInfo;
90 }
91
92 void set(T data)
93 {
94 buffer->copyMemory
95 (
96 0,
97 size,
98 &data,
99 0
100 );
101 }
102
103 private:
104
105
106 };
107}
Definition device.h:10
Definition uniformBuffer.h:8
VkShaderStageFlagBits stage
Definition uniformBuffer.h:29
virtual VkDescriptorSetLayoutBinding getLayout()=0
uint32_t binding
Definition uniformBuffer.h:28
std::unique_ptr< Buffer > buffer
Definition uniformBuffer.h:31
void setBinding(uint32_t b)
Definition uniformBuffer.h:17
UniformBufferObject(const Device &device)
Definition uniformBuffer.h:12
const Device & device
Definition uniformBuffer.h:24
virtual VkDescriptorBufferInfo getBufferInfo()=0
VkDeviceSize size
Definition uniformBuffer.h:26
Definition uniformBuffer.h:37
VkDescriptorBufferInfo getBufferInfo()
Definition uniformBuffer.h:83
void set(T data)
Definition uniformBuffer.h:92
UniformBuffer(const Device &device, T data, uint32_t binding=0, VkShaderStageFlagBits stage=VK_SHADER_STAGE_ALL)
Definition uniformBuffer.h:42
VkDescriptorSetLayoutBinding getLayout()
Definition uniformBuffer.h:72
Definition buffer.h:10