14#include "glm/gtc/type_ptr.hpp"
47 static uint32_t ShaderDataTypeSize(ShaderDataType type)
51 case ShaderDataType::Float:
53 case ShaderDataType::Float2:
55 case ShaderDataType::Float3:
57 case ShaderDataType::Float4:
59 case ShaderDataType::Mat3:
61 case ShaderDataType::Mat4:
63 case ShaderDataType::Int:
65 case ShaderDataType::Int2:
67 case ShaderDataType::Int3:
69 case ShaderDataType::Int4:
71 case ShaderDataType::Bool:
73 case ShaderDataType::None:
74 KR_CORE_WARN(
"ShaderDataType is none. Size shall be considered 0.");
78 KR_CORE_ASSERT(
false,
"Unknown ShaderDataType");
133 :
Name(name),
Type(type),
Size(ShaderDataTypeSize(type)),
Offset(offset), Normalized(normalized)
146 case Karma::ShaderDataType::None:
148 case Karma::ShaderDataType::Float:
150 case Karma::ShaderDataType::Float2:
152 case Karma::ShaderDataType::Float3:
154 case Karma::ShaderDataType::Float4:
156 case Karma::ShaderDataType::Mat3:
158 case Karma::ShaderDataType::Mat4:
160 case Karma::ShaderDataType::Int:
162 case Karma::ShaderDataType::Int2:
164 case Karma::ShaderDataType::Int3:
166 case Karma::ShaderDataType::Int4:
168 case Karma::ShaderDataType::Bool:
172 KR_CORE_ASSERT(
false,
"Unknown ShaderDataType!");
205 : m_Elements(elements)
207 CalculateOffsetsAndStride();
222 inline const std::vector<BufferElement>&
GetElements()
const {
return m_Elements; }
236 std::vector<BufferElement>::iterator
begin()
238 return m_Elements.begin();
246 std::vector<BufferElement>::iterator
end()
248 return m_Elements.end();
256 std::vector<BufferElement>::const_iterator
begin()
const
258 return m_Elements.begin();
266 std::vector<BufferElement>::const_iterator
end()
const
268 return m_Elements.end();
277 void CalculateOffsetsAndStride()
281 for (
auto& element : m_Elements)
283 element.Offset = offset;
284 offset += element.Size;
285 m_Stride += element.Size;
290 std::vector<BufferElement> m_Elements;
291 uint32_t m_Stride = 0;
302 virtual void Bind()
const = 0;
303 virtual void UnBind()
const = 0;
308 static VertexBuffer* Create(
float* vertices, uint32_t size);
319 virtual void Bind()
const = 0;
320 virtual void UnBind()
const = 0;
322 virtual uint32_t GetCount()
const = 0;
324 static IndexBuffer* Create(uint32_t* vertices, uint32_t size);
334 uint32_t GetBindingPointIndex()
const
336 return m_BindingPoint;
339 uint32_t m_BindingPoint;
364 return m_DataPointer;
367 const void* m_DataPointer;
411 template<
typename... T>
428 uint32_t GetBufferSize()
const
433 const std::vector<UBODataPointer>& GetUniformList()
const
435 return m_UniformList;
438 const std::vector<ShaderDataType>& GetUniformDataType()
const
440 return m_UniformDataType;
443 const std::vector<uint32_t>& GetAlignedOffsets()
const
445 return m_UniformAlignedOffsets;
448 const std::vector<uint32_t>& GetUniformSize()
const
450 return m_UniformSizes;
453 uint32_t GetBindingPointIndex()
const
455 return m_BindingPoint;
467 void CalculateOffsetsAndBufferSize();
ShaderDataType
A C++ data structure for shader language (GLSL or HLSL) data, like uniforms for instance and datatype...
Definition Buffer.h:23
#define KARMA_API
Defining Karma's API macro for storage class information.
Definition Core.h:41
@ None
Events of the unknown category.
Definition Event.h:37
#define KR_CORE_WARN(...)
A macro for logging warning in Core part.
Definition Log.h:79
A format for vertex buffer say.
Definition Buffer.h:183
BufferLayout(const std::initializer_list< BufferElement > &elements)
Constructor with specified buffer data format.
Definition Buffer.h:204
uint32_t GetStride() const
A getter for m_Stride.
Definition Buffer.h:215
const std::vector< BufferElement > & GetElements() const
A getter for m_Elements.
Definition Buffer.h:222
std::vector< BufferElement >::iterator end()
Getter for iterator end.
Definition Buffer.h:246
std::vector< BufferElement >::const_iterator begin() const
Getter for const_iterator begin.
Definition Buffer.h:256
BufferLayout()
A default constructor.
Definition Buffer.h:191
std::vector< BufferElement >::const_iterator end() const
Getter for const_iterator end.
Definition Buffer.h:266
void PushElement(const BufferElement &element)
For modifying the list of elements and set paremeters accordingly.
Definition Buffer.h:229
std::vector< BufferElement >::iterator begin()
Getter for iterator begin.
Definition Buffer.h:236
Abstract class for image buffer.
Definition Buffer.h:331
An abstract class for index buffer.
Definition Buffer.h:315
UBODataPointer(const void *data)
A constructor.
Definition Buffer.h:354
const void * GetDataPointer() const
Getter for UBO data.
Definition Buffer.h:362
An abstract class for vertex buffer.
Definition Buffer.h:298
A datastructure for creating interleaved data for Mesh with a specifc format (BufferLayout)
Definition Buffer.h:86
ShaderDataType Type
The type of the attribute.
Definition Buffer.h:118
std::string Name
A name for vertex data, created by interleaving of various attributes.
Definition Buffer.h:93
uint32_t Size
The size of this element.
Definition Buffer.h:111
uint32_t GetComponentCount() const
Routine to compute number of components of this element.
Definition Buffer.h:142
uint64_t Offset
The location (offset) of this element in the vertex or index data set.
Definition Buffer.h:101
BufferElement(ShaderDataType type, const std::string &name, bool normalized=false, uint64_t offset=0)
A constructor.
Definition Buffer.h:132