12#include "glm/gtc/type_ptr.hpp"
45 static uint32_t ShaderDataTypeSize(ShaderDataType type)
49 case ShaderDataType::Float:
51 case ShaderDataType::Float2:
53 case ShaderDataType::Float3:
55 case ShaderDataType::Float4:
57 case ShaderDataType::Mat3:
59 case ShaderDataType::Mat4:
61 case ShaderDataType::Int:
63 case ShaderDataType::Int2:
65 case ShaderDataType::Int3:
67 case ShaderDataType::Int4:
69 case ShaderDataType::Bool:
71 case ShaderDataType::None:
72 KR_CORE_WARN(
"ShaderDataType is none. Size shall be considered 0.");
76 KR_CORE_ASSERT(
false,
"Unknown ShaderDataType");
131 :
Name(name),
Type(type),
Size(ShaderDataTypeSize(type)),
Offset(offset), Normalized(normalized)
144 case Karma::ShaderDataType::None:
146 case Karma::ShaderDataType::Float:
148 case Karma::ShaderDataType::Float2:
150 case Karma::ShaderDataType::Float3:
152 case Karma::ShaderDataType::Float4:
154 case Karma::ShaderDataType::Mat3:
156 case Karma::ShaderDataType::Mat4:
158 case Karma::ShaderDataType::Int:
160 case Karma::ShaderDataType::Int2:
162 case Karma::ShaderDataType::Int3:
164 case Karma::ShaderDataType::Int4:
166 case Karma::ShaderDataType::Bool:
170 KR_CORE_ASSERT(
false,
"Unknown ShaderDataType!");
203 : m_Elements(elements)
205 CalculateOffsetsAndStride();
220 inline const std::vector<BufferElement>&
GetElements()
const {
return m_Elements; }
234 std::vector<BufferElement>::iterator
begin()
236 return m_Elements.begin();
244 std::vector<BufferElement>::iterator
end()
246 return m_Elements.end();
254 std::vector<BufferElement>::const_iterator
begin()
const
256 return m_Elements.begin();
264 std::vector<BufferElement>::const_iterator
end()
const
266 return m_Elements.end();
275 void CalculateOffsetsAndStride()
279 for (
auto& element : m_Elements)
281 element.Offset = offset;
282 offset += element.Size;
283 m_Stride += element.Size;
288 std::vector<BufferElement> m_Elements;
289 uint32_t m_Stride = 0;
300 virtual void Bind()
const = 0;
301 virtual void UnBind()
const = 0;
306 static VertexBuffer* Create(
float* vertices, uint32_t size);
317 virtual void Bind()
const = 0;
318 virtual void UnBind()
const = 0;
320 virtual uint32_t GetCount()
const = 0;
322 static IndexBuffer* Create(uint32_t* vertices, uint32_t size);
332 uint32_t GetBindingPointIndex()
const
334 return m_BindingPoint;
337 uint32_t m_BindingPoint;
362 return m_DataPointer;
365 const void* m_DataPointer;
409 template<
typename... T>
415 virtual void UpdateCameraUniform() = 0;
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:21
#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:35
#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:181
BufferLayout(const std::initializer_list< BufferElement > &elements)
Constructor with specified buffer data format.
Definition Buffer.h:202
uint32_t GetStride() const
A getter for m_Stride.
Definition Buffer.h:213
const std::vector< BufferElement > & GetElements() const
A getter for m_Elements.
Definition Buffer.h:220
std::vector< BufferElement >::iterator end()
Getter for iterator end.
Definition Buffer.h:244
std::vector< BufferElement >::const_iterator begin() const
Getter for const_iterator begin.
Definition Buffer.h:254
BufferLayout()
A default constructor.
Definition Buffer.h:189
std::vector< BufferElement >::const_iterator end() const
Getter for const_iterator end.
Definition Buffer.h:264
void PushElement(const BufferElement &element)
For modifying the list of elements and set paremeters accordingly.
Definition Buffer.h:227
std::vector< BufferElement >::iterator begin()
Getter for iterator begin.
Definition Buffer.h:234
Abstract class for image buffer.
Definition Buffer.h:329
An abstract class for index buffer.
Definition Buffer.h:313
UBODataPointer(const void *data)
A constructor.
Definition Buffer.h:352
const void * GetDataPointer() const
Getter for UBO data.
Definition Buffer.h:360
An abstract class for vertex buffer.
Definition Buffer.h:296
A datastructure for creating interleaved data for Mesh with a specifc format (BufferLayout).
Definition Buffer.h:84
ShaderDataType Type
The type of the attribute.
Definition Buffer.h:116
std::string Name
A name for vertex data, created by interleaving of various attributes.
Definition Buffer.h:91
uint32_t Size
The size of this element.
Definition Buffer.h:109
uint32_t GetComponentCount() const
Routine to compute number of components of this element.
Definition Buffer.h:140
uint64_t Offset
The location (offset) of this element in the vertex or index data set.
Definition Buffer.h:99
BufferElement(ShaderDataType type, const std::string &name, bool normalized=false, uint64_t offset=0)
A constructor.
Definition Buffer.h:130