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{
17 class FVulkanDevice;
18
25 {
26 public:
50 VulkanVertexBuffer(float* vertices, uint32_t size);
51
59 virtual ~VulkanVertexBuffer();
60
67 virtual void Bind() const override;
68
75 virtual void UnBind() const override;
76
82 virtual const BufferLayout& GetLayout() const override
83 {
84 return m_Layout;
85 }
86
94 virtual void SetLayout(const BufferLayout& layout) override
95 {
96 m_Layout = layout;
97 }
98
110 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
111 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
112
121 void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
122
128 inline VkBuffer GetVertexBuffer() const { return m_VertexBuffer; }
129
135 inline VkDeviceMemory GetVertexBufferMemory() const { return m_VertexBufferMemory; }
136
140 inline size_t GetBufferSize() { return m_BufferSize; }
141
142 private:
143 VkDevice m_Device;
144 BufferLayout m_Layout;
145
146 VkBuffer m_VertexBuffer;
147 VkDeviceMemory m_VertexBufferMemory;
148
149 size_t m_BufferSize;
150 };
151
158 {
159 public:
171 VulkanIndexBuffer(uint32_t* indices, uint32_t count);
172
178 virtual ~VulkanIndexBuffer();
179
186 virtual void Bind() const override;
187
194 virtual void UnBind() const override;
195
207 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
208 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
209
218 void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size);
219
227 virtual uint32_t GetCount() const override { return m_Count; }
228
234 inline VkBuffer GetIndexBuffer() const { return m_IndexBuffer; }
235
241 inline VkDeviceMemory GetIndexBufferMemory() const { return m_IndexBufferMemory; }
242
248 inline size_t GetBufferSize() { return m_BufferSize; }
249
250 private:
251 VkDevice m_Device;
252 uint32_t m_Count;
253
254 VkBuffer m_IndexBuffer;
255 VkDeviceMemory m_IndexBufferMemory;
256
257 size_t m_BufferSize;
258 };
259
266 {
267 public:
279 VulkanUniformBuffer(std::vector<ShaderDataType> dataTypes, uint32_t bindingPointIndex);
280
287 virtual ~VulkanUniformBuffer();
288
299 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
300 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
301
307 const std::vector<VkBuffer>& GetUniformBuffers() const { return m_UniformBuffers; }
308
314 void ClearBuffer();
315
322 void BufferCreation();
323
324 virtual void UpdateCameraUniform() override;
325
347 void UploadUniformBuffer(size_t frameIndex) override;
348
349 private:
350 VkDevice m_Device;
351 std::vector<VkBuffer> m_UniformBuffers;
352 std::vector<VkDeviceMemory> m_UniformBuffersMemory;
353 };
354
359 {
360 public:
367 VulkanImageBuffer(const char* filename);
368
377 VulkanImageBuffer(FVulkanDevice* InDevice, const char* filename);
378
384 virtual ~VulkanImageBuffer();
385
395 void CreateBuffer(VkDeviceSize size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties,
396 VkBuffer& buffer, VkDeviceMemory& bufferMemory);
397
398 const inline VkBuffer& GetBuffer() const { return m_StagingBuffer; }
399
400 // Getters
406 int GetTextureWidth() const { return texWidth; }
407
413 int GetTextureHeight() const { return texHeight; }
414
421 int GetTextureChannels() const { return texChannels; }
422
423 private:
424 VkDevice m_Device;
425 VkPhysicalDevice m_PhysicalDevice;
426 VkBuffer m_StagingBuffer;
427 VkDeviceMemory m_StagingBufferMemory;
428
429 // Image props (properties)
430 int texWidth;
431 int texHeight;
432 int texChannels;
433 };
434}
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:181
Manages Vulkan device resources and operations.
Definition VulkanDevice.h:33
Abstract class for image buffer.
Definition Buffer.h:329
An abstract class for index buffer.
Definition Buffer.h:313
An abstract class for vertex buffer.
Definition Buffer.h:296
VulkanImageBuffer(const char *filename)
Creates a GPU memory buffer for storing image texture.
Definition VulkanBuffer.cpp:320
int GetTextureHeight() const
Getter for the height (in pixels?) of the image texture.
Definition VulkanBuffer.h:413
int GetTextureWidth() const
Getter for the width (in pixels?) of the image texture.
Definition VulkanBuffer.h:406
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:366
int GetTextureChannels() const
Getter for desired channels (if non-zero, # of image components requested in result).
Definition VulkanBuffer.h:421
virtual void Bind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:215
VkBuffer GetIndexBuffer() const
Getter for indexbuffer.
Definition VulkanBuffer.h:234
void CopyBuffer(VkBuffer srcBuffer, VkBuffer dstBuffer, VkDeviceSize size)
Copy buffer.
Definition VulkanBuffer.cpp:154
virtual uint32_t GetCount() const override
Getter for the number of vertices to draw.
Definition VulkanBuffer.h:227
virtual void UnBind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:219
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:188
size_t GetBufferSize()
Getter for indexbuffer size in bytes.
Definition VulkanBuffer.h:248
VulkanIndexBuffer(uint32_t *indices, uint32_t count)
Constructor.
Definition VulkanBuffer.cpp:119
VkDeviceMemory GetIndexBufferMemory() const
Getter for index buffer memory.
Definition VulkanBuffer.h:241
VkBuffer GetVertexBuffer() const
Getter for vertex buffer.
Definition VulkanBuffer.h:128
virtual void Bind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:109
virtual void SetLayout(const BufferLayout &layout) override
Sets the layout of the vertexbuffer.
Definition VulkanBuffer.h:94
VulkanVertexBuffer(float *vertices, uint32_t size)
Constructor.
Definition VulkanBuffer.cpp:13
size_t GetBufferSize()
Getter for buffer size (in bytes).
Definition VulkanBuffer.h:140
VkDeviceMemory GetVertexBufferMemory() const
Getter for vertex buffer memory.
Definition VulkanBuffer.h:135
virtual const BufferLayout & GetLayout() const override
Getter for the layout of the vertex buffer.
Definition VulkanBuffer.h:82
virtual void UnBind() const override
Not useful for Vulkan API atm.
Definition VulkanBuffer.cpp:114
UniformBufferObject(std::vector< ShaderDataType > dataTypes, uint32_t bindingPointIndex)
An agnostic constructor provided for precomputation of offset and buffer size.
Definition Buffer.cpp:77
VulkanUniformBuffer(std::vector< ShaderDataType > dataTypes, uint32_t bindingPointIndex)
Constructor for Vulkan buffer. Calls VulkanUniformBuffer::BufferCreation().
Definition VulkanBuffer.cpp:224
const std::vector< VkBuffer > & GetUniformBuffers() const
Getter for the uniform buffers.
Definition VulkanBuffer.h:307
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:292