Elevate Engine 1
Loading...
Searching...
No Matches
Buffer.h
Go to the documentation of this file.
1#pragma once
2
4
5#include <vector>
6#include <iterator>
7#include <string>
8
9namespace Elevate
10{
12
14 {
15 std::string Name;
17 unsigned int Size;
18 unsigned int Offset;
19 unsigned int Count;
20 unsigned int Normalized;
21 uint32_t Index;
22
23 BufferElement() = default;
24
25 BufferElement(ShaderDataType type, const std::string& name, bool normalized = false)
26 : Name(name), Type(type), Size(GetDataTypeSize(type)), Offset(0), Count(GetDataTypeCount(type)),
27 Normalized(normalized), Index(0) { }
28 };
29
31 {
32 public:
33 BufferLayout() = default;
34
35 BufferLayout(const std::initializer_list<BufferElement>& elements)
36 : m_elements(elements)
37 {
38 CalculateOffsetAndStride();
39 }
40
41 BufferLayout(const std::vector<BufferElement>& elements)
42 : m_elements(elements)
43 {
44 CalculateOffsetAndStride();
45 }
46
47 inline const std::vector<BufferElement>& GetElements() const { return m_elements; }
48
49 std::vector<BufferElement>::iterator begin() { return m_elements.begin(); }
50 std::vector<BufferElement>::iterator end() { return m_elements.end(); }
51 std::vector<BufferElement>::const_iterator begin() const { return m_elements.begin(); }
52 std::vector<BufferElement>::const_iterator end() const { return m_elements.end(); }
53
54 inline uint32_t GetStride() const { return m_stride; }
55 private:
56 void CalculateOffsetAndStride()
57 {
58 unsigned int offset = 0;
59 uint32_t index = 0;
60 m_stride = 0;
61 for (auto& element : m_elements)
62 {
63 element.Offset = offset;
64 offset += element.Size;
65 m_stride += element.Size;
66 element.Index = index++;
67 }
68 }
69 private:
70 std::vector<BufferElement> m_elements;
71 uint32_t m_stride = 0;
72 };
73
75 {
76 public:
77 VertexBuffer(const void* vertices, uint32_t size)
78 : m_data(vertices), m_size(size) { }
79
80 virtual ~VertexBuffer() = default;
81
82 virtual void SetLayout(const BufferLayout& layout) = 0;
83 virtual const BufferLayout& GetLayout() const = 0;
84
85 virtual void SetData(const void* newData, uint32_t size) = 0;
86 virtual void Resize(uint32_t size) = 0;
87
88 virtual void Bind() const = 0;
89 virtual void Unbind() const = 0;
90
91 static VertexBuffer* Create(const void* vertices, const uint32_t size);
92
93 uint32_t GetSize() { return m_size; }
94 protected:
95 void SetSize(uint32_t newSize) { m_size = newSize; }
96 private:
97 uint32_t m_size;
98 const void* m_data;
99 };
100
102 {
103 public:
104 virtual ~IndexBuffer() {}
105
106 virtual void Bind() const = 0;
107 virtual void Unbind() const = 0;
108
109 virtual uint32_t GetCount() const = 0;
110
111 static IndexBuffer* Create(const void* vertices, uint32_t count);
112 };
113}
uint32_t GetStride() const
Definition Buffer.h:54
std::vector< BufferElement >::iterator end()
Definition Buffer.h:50
BufferLayout(const std::initializer_list< BufferElement > &elements)
Definition Buffer.h:35
std::vector< BufferElement >::const_iterator end() const
Definition Buffer.h:52
const std::vector< BufferElement > & GetElements() const
Definition Buffer.h:47
BufferLayout(const std::vector< BufferElement > &elements)
Definition Buffer.h:41
std::vector< BufferElement >::iterator begin()
Definition Buffer.h:49
std::vector< BufferElement >::const_iterator begin() const
Definition Buffer.h:51
virtual void Bind() const =0
virtual uint32_t GetCount() const =0
virtual ~IndexBuffer()
Definition Buffer.h:104
static IndexBuffer * Create(const void *vertices, uint32_t count)
Definition Buffer.cpp:23
virtual void Unbind() const =0
VertexBuffer(const void *vertices, uint32_t size)
Definition Buffer.h:77
virtual const BufferLayout & GetLayout() const =0
virtual ~VertexBuffer()=default
virtual void SetLayout(const BufferLayout &layout)=0
virtual void Resize(uint32_t size)=0
virtual void SetData(const void *newData, uint32_t size)=0
virtual void Unbind() const =0
virtual void Bind() const =0
static VertexBuffer * Create(const void *vertices, const uint32_t size)
Definition Buffer.cpp:11
uint32_t GetSize()
Definition Buffer.h:93
void SetSize(uint32_t newSize)
Definition Buffer.h:95
EngineDataType
Definition Data.h:106
uint32_t GetDataTypeSize(EngineDataType type)
Definition Data.h:121
EngineDataType ShaderDataType
Definition Buffer.h:11
uint32_t GetDataTypeCount(EngineDataType type)
Definition Data.h:117
unsigned int Size
Definition Buffer.h:17
unsigned int Count
Definition Buffer.h:19
unsigned int Normalized
Definition Buffer.h:20
unsigned int Offset
Definition Buffer.h:18
ShaderDataType Type
Definition Buffer.h:16
std::string Name
Definition Buffer.h:15
BufferElement(ShaderDataType type, const std::string &name, bool normalized=false)
Definition Buffer.h:25