KarmaEngine
Game Engine for practical learning and research purposes
Loading...
Searching...
No Matches
VulkanBuffer.h
Go to the documentation of this file.
1
10#pragma once
11
13#include "vulkan/vulkan.h"
14
15namespace Karma
16{
23 {
24 public:
48 VulkanVertexBuffer(float* vertices, uint32_t size);
49
57 virtual ~VulkanVertexBuffer();
58
65 virtual void Bind() const override;
66
73 virtual void UnBind() const override;
74
80 virtual const BufferLayout& GetLayout() const override
81 {
82 return m_Layout;
83 }
84
92 virtual void SetLayout(const BufferLayout& layout) override
93 {
94 m_Layout = layout;
95 }
96
108 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
109 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
110
119 void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
120
135 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
136
142 inline VkBuffer GetVertexBuffer() const { return m_VertexBuffer; }
143
149 inline VkDeviceMemory GetVertexBufferMemory() const { return m_VertexBufferMemory; }
150
154 inline size_t GetBufferSize() { return m_BufferSize; }
155
156 private:
157 VkDevice m_Device;
158 BufferLayout m_Layout;
159
160 VkBuffer m_VertexBuffer;
161 VkDeviceMemory m_VertexBufferMemory;
162
163 size_t m_BufferSize;
164 };
165
172 {
173 public:
185 VulkanIndexBuffer(uint32_t* indices, uint32_t count);
186
192 virtual ~VulkanIndexBuffer();
193
200 virtual void Bind() const override;
201
208 virtual void UnBind() const override;
209
221 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
222 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
223
232 void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
233
244 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
245
253 virtual uint32_t GetCount() const override { return m_Count; }
254
260 inline VkBuffer GetIndexBuffer() const { return m_IndexBuffer; }
261
267 inline VkDeviceMemory GetIndexBufferMemory() const { return m_IndexBufferMemory; }
268
274 inline size_t GetBufferSize() { return m_BufferSize; }
275
276 private:
277 VkDevice m_Device;
278 uint32_t m_Count;
279
280 VkBuffer m_IndexBuffer;
281 VkDeviceMemory m_IndexBufferMemory;
282
283 size_t m_BufferSize;
284 };
285
292 {
293 public:
303 VulkanUniformBuffer(std::vector<ShaderDataType> dataTypes, uint32_t bindingPointIndex);
304
311 virtual ~VulkanUniformBuffer();
312
323 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
324 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
325
336 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
337
343 const std::vector<VkBuffer>& GetUniformBuffers() const { return m_UniformBuffers; }
344
350 void ClearBuffer();
351
358 void BufferCreation();
359
368 void UploadUniformBuffer(size_t frameIndex) override;
369
370 private:
371 VkDevice m_Device;
372 std::vector<VkBuffer> m_UniformBuffers;
373 std::vector<VkDeviceMemory> m_UniformBuffersMemory;
374 };
375
380 {
381 public:
388 VulkanImageBuffer(const char* filename);
389
395 virtual ~VulkanImageBuffer();
396
406 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
407 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
408
419 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
420 const inline VkBuffer& GetBuffer() const { return m_StagingBuffer; }
421
422 // Getters
428 int GetTextureWidth() const { return texWidth; }
429
435 int GetTextureHeight() const { return texHeight; }
436
443 int GetTextureChannels() const { return texChannels; }
444
445 private:
446 VkDevice m_Device;
447 VkBuffer m_StagingBuffer;
448 VkDeviceMemory m_StagingBufferMemory;
449
450 // Image props (properties)
451 int texWidth;
452 int texHeight;
453 int texChannels;
454 };
455}
This file contains base classes for various kinds of buffers used by the Engine.
#define KARMA_API
Defining Karma's API macro for storage class information.
Definition Core.h:41
A format for vertex buffer say.
Definition Buffer.h:183
Abstract class for image buffer.
Definition Buffer.h:331
An abstract class for index buffer.
Definition Buffer.h:315
An abstract class for vertex buffer.
Definition Buffer.h:298
VulkanImageBuffer(const char *filename)
Creates a GPU memory buffer for storing image texture.
Definition VulkanBuffer.cpp:359
int GetTextureHeight() const
Getter for the height (in pixels?) of the image texture.
Definition VulkanBuffer.h:435
int GetTextureWidth() const
Getter for the width (in pixels?) of the image texture.
Definition VulkanBuffer.h:428
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VkDeviceMemory &bufferMemory)
Creates Vulkan buffer (VKbuffer) for image texture's use and allocates device memory appropriately.
Definition VulkanBuffer.cpp:384
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
Finds appropriate memory type with demanded properties. Basically a loop is run from counter i = 0 to...
Definition VulkanBuffer.cpp:411
int GetTextureChannels() const
Getter for desired channels (if non-zero, # of image components requested in result).
Definition VulkanBuffer.h:443
virtual void Bind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:242
VkBuffer GetIndexBuffer() const
Getter for indexbuffer.
Definition VulkanBuffer.h:260
void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size)
Copy buffer.
Definition VulkanBuffer.cpp:164
virtual uint32_t GetCount() const override
Getter for the number of vertices to draw.
Definition VulkanBuffer.h:253
virtual void UnBind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:246
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VkDeviceMemory &bufferMemory)
Actual creation of buffer using Vulkan API. Memory is also allocated appropriately.
Definition VulkanBuffer.cpp:198
size_t GetBufferSize()
Getter for indexbuffer size in bytes.
Definition VulkanBuffer.h:274
VulkanIndexBuffer(uint32_t *indices, uint32_t count)
Constructor.
Definition VulkanBuffer.cpp:131
VkDeviceMemory GetIndexBufferMemory() const
Getter for index buffer memory.
Definition VulkanBuffer.h:267
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
Finds appropriate memory type with demanded properties. Basically a loop is run from counter i = 0 to...
Definition VulkanBuffer.cpp:225
VkBuffer GetVertexBuffer() const
Getter for vertex buffer.
Definition VulkanBuffer.h:142
virtual void Bind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:120
virtual void SetLayout(const BufferLayout &layout) override
Sets the layout of the vertexbuffer.
Definition VulkanBuffer.h:92
VulkanVertexBuffer(float *vertices, uint32_t size)
Constructor.
Definition VulkanBuffer.cpp:9
size_t GetBufferSize()
Getter for buffer size (in bytes)
Definition VulkanBuffer.h:154
VkDeviceMemory GetVertexBufferMemory() const
Getter for vertex buffer memory.
Definition VulkanBuffer.h:149
virtual const BufferLayout & GetLayout() const override
Getter for the layout of the vertex buffer.
Definition VulkanBuffer.h:80
virtual void UnBind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:125
UniformBufferObject(std::vector< ShaderDataType > dataTypes, uint32_t bindingPointIndex)
An agnostic constructor provided for precomputation of offset and buffer size.
Definition Buffer.cpp:78
VulkanUniformBuffer(std::vector< ShaderDataType > dataTypes, uint32_t bindingPointIndex)
Constructor for Vulkan buffer. Calls VulkanUniformBuffer::BufferCreation().
Definition VulkanBuffer.cpp:251
const std::vector< VkBuffer > & GetUniformBuffers() const
Getter for the uniform buffers.
Definition VulkanBuffer.h:343
uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties)
Finds appropriate memory type with demanded properties. Basically a loop is run from counter i = 0 to...
Definition VulkanBuffer.cpp:341
void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, VkBuffer &buffer, VkDeviceMemory &bufferMemory)
Creates Vulkan buffer (VKbuffer) for ubo use and allocates device memory appropriately.
Definition VulkanBuffer.cpp:314