Just™ Game Engine
vertex_array.hpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2021-2022 Konstanty Misiak
3 *
4 * SPDX-License-Identifier: MIT
5 */
6
7#pragma once
8#include "jng/core/base.hpp"
9
10namespace jng {
11
12 class IndexBuffer;
13 class VertexBuffer;
14 class Shader;
15
17 {
18 enum class DataType
19 {
20 Float, Float2, Float3, Float4,
21 Int, Int2, Int3, Int4,
22 UInt, UInt2, UInt3, UInt4,
23 UInt4x8
24 };
25
26 LayoutElement(DataType inType, const char* inName, bool inPassAsFloat = false, bool inNormalized = false);
27
28 static size_t dataTypeToSize(DataType type);
29
30 std::string name;
32 size_t size;
33 uintptr_t offset;
36 };
37
38 class VertexLayout final
39 {
40 public:
41 using ContainerType = std::vector<LayoutElement>;
42 using ContainerConstInterator = ContainerType::const_iterator;
43
44 VertexLayout() = default;
45 VertexLayout(const std::initializer_list<LayoutElement>& list);
46 VertexLayout(const VertexLayout& other);
47
48 const ContainerType& getElements() const { return m_elements; }
49 u32 getStride() const { return m_stride; }
50
51 ContainerConstInterator begin() const { return m_elements.begin(); }
52 ContainerConstInterator end() const { return m_elements.end(); }
53 private:
54 ContainerType m_elements;
55 u32 m_stride;
56 };
57
58 class VertexArray final
59 {
60 public:
61 VertexArray(const Ref<VertexBuffer>& vbo, const VertexLayout& layout);
63
64 void bind() const;
65 void unbind() const;
66
67 const Ref<VertexBuffer>& getVertexBuffer() const { return m_VBO; }
68 void setIndexBuffer(const Ref<IndexBuffer>& ibo);
69 const Ref<IndexBuffer>& getIndexBuffer() const { return m_IBO; }
70 private:
71 u32 m_id;
73 Ref<IndexBuffer> m_IBO;
74 };
75
76} // namespace jng
Definition: vertex_array.hpp:59
~VertexArray()
Definition: vertex_array_ogl.cpp:99
const Ref< VertexBuffer > & getVertexBuffer() const
Definition: vertex_array.hpp:67
void unbind() const
Definition: vertex_array_ogl.cpp:109
const Ref< IndexBuffer > & getIndexBuffer() const
Definition: vertex_array.hpp:69
VertexArray(const Ref< VertexBuffer > &vbo, const VertexLayout &layout)
Definition: vertex_array_ogl.cpp:66
void bind() const
Definition: vertex_array_ogl.cpp:104
void setIndexBuffer(const Ref< IndexBuffer > &ibo)
Definition: vertex_array_ogl.cpp:114
Definition: vertex_array.hpp:39
ContainerConstInterator begin() const
Definition: vertex_array.hpp:51
ContainerConstInterator end() const
Definition: vertex_array.hpp:52
VertexLayout()=default
std::vector< LayoutElement > ContainerType
Definition: vertex_array.hpp:41
ContainerType::const_iterator ContainerConstInterator
Definition: vertex_array.hpp:42
const ContainerType & getElements() const
Definition: vertex_array.hpp:48
u32 getStride() const
Definition: vertex_array.hpp:49
Definition: base.hpp:11
uint32_t u32
Definition: base.hpp:41
std::shared_ptr< T > Ref
Definition: base.hpp:32
Definition: vertex_array.hpp:17
static size_t dataTypeToSize(DataType type)
Definition: vertex_array.cpp:21
DataType type
Definition: vertex_array.hpp:31
uintptr_t offset
Definition: vertex_array.hpp:33
bool passAsFloat
Definition: vertex_array.hpp:34
std::string name
Definition: vertex_array.hpp:30
LayoutElement(DataType inType, const char *inName, bool inPassAsFloat=false, bool inNormalized=false)
Definition: vertex_array.cpp:13
bool normalized
Definition: vertex_array.hpp:35
size_t size
Definition: vertex_array.hpp:32
DataType
Definition: vertex_array.hpp:19