7 None = 0, Float, Float2, Float3, Float4, Mat3, Mat4, Int, Int2, Int3, Int4, Bool
34 ShaderDataType Type = ShaderDataType::None;
37 bool Normalized =
false;
39 BufferElement() =
default;
41 BufferElement(ShaderDataType type,
const std::string& name,
bool normalized =
false)
44 , Size(ShaderDataTypeSize(type))
46 , Normalized(normalized)
50 uint32_t GetComponentCount()
const
54 case ShaderDataType::Float:
return 1;
55 case ShaderDataType::Float2:
return 2;
56 case ShaderDataType::Float3:
return 3;
57 case ShaderDataType::Float4:
return 4;
58 case ShaderDataType::Mat3:
return 3 * 3;
59 case ShaderDataType::Mat4:
return 4 * 4;
60 case ShaderDataType::Int:
return 1;
61 case ShaderDataType::Int2:
return 2;
62 case ShaderDataType::Int3:
return 3;
63 case ShaderDataType::Int4:
return 4;
64 case ShaderDataType::Bool:
return 1;
67 HN_CORE_ASSERT(
false,
"Unkonwn ShaderDataType!");
77 BufferLayout(
const std::initializer_list<BufferElement>& elements)
78 : m_Elements(elements)
80 CalculateOffsetsAndStride();
83 inline uint32_t GetStride()
const {
return m_Stride; }
84 inline const std::vector<BufferElement>& GetElements()
const {
return m_Elements; }
86 std::vector<BufferElement>::iterator begin() {
return m_Elements.begin(); }
87 std::vector<BufferElement>::iterator end() {
return m_Elements.end(); }
88 std::vector<BufferElement>::const_iterator begin()
const {
return m_Elements.begin(); }
89 std::vector<BufferElement>::const_iterator end()
const {
return m_Elements.end(); }
91 void CalculateOffsetsAndStride()
97 element.Offset = offset;
98 offset += element.Size;
99 m_Stride += element.Size;
103 std::vector<BufferElement> m_Elements;
104 uint32_t m_Stride = 0;