Hymn to Beauty
C++ 3D Engine
Geometry3D.hpp
Go to the documentation of this file.
1#pragma once
2
4#include <vector>
5#include <glm/glm.hpp>
6
7namespace Video {
8class LowLevelRenderer;
9class Buffer;
10class VertexDescription;
11class GeometryBinding;
12
13namespace Geometry {
16 public:
18
22
24 virtual ~Geometry3D();
25
27
31
33
36 unsigned int GetIndexCount() const;
37
39
43
45
48 const std::vector<glm::vec3>& GetVertexPositionData() const;
49
51
54 const std::vector<uint32_t>& GetVertexIndexData() const;
55
56 protected:
58
62 void GenerateIndexBuffer(uint32_t* indexData, unsigned int indexCount);
63
66
68
71 void CreateAxisAlignedBoundingBox(const std::vector<glm::vec3*>& positions);
72
74
80 void CreateAxisAlignedBoundingBox(glm::vec3 dim, glm::vec3 origin, glm::vec3 minValues, glm::vec3 maxValues);
81
83 Buffer* vertexBuffer = nullptr;
84
86 Buffer* indexBuffer = nullptr;
87
90
92 std::vector<glm::vec3> vertexPositionData;
93
95 std::vector<uint32_t> vertexIndexData;
96
99
100 private:
101 Video::AxisAlignedBoundingBox axisAlignedBoundingBox;
102 unsigned int indexCount = 0;
103
104 GeometryBinding* geometryBinding;
105};
106} // namespace Geometry
107} // namespace Video
An axis-aligned bounding box.
Definition: AxisAlignedBoundingBox.hpp:12
A buffer containing GPU accessible data.
Definition: Buffer.hpp:8
Renderable 3D geometry.
Definition: Geometry3D.hpp:15
Buffer * vertexBuffer
Vertex buffer.
Definition: Geometry3D.hpp:83
std::vector< glm::vec3 > vertexPositionData
Vertex position data.
Definition: Geometry3D.hpp:92
unsigned int GetIndexCount() const
Get number of indices.
Definition: Geometry3D.cpp:24
std::vector< uint32_t > vertexIndexData
Vertex index data.
Definition: Geometry3D.hpp:95
const std::vector< glm::vec3 > & GetVertexPositionData() const
Get vertex position vector.
Definition: Geometry3D.cpp:32
Geometry3D(LowLevelRenderer *lowLevelRenderer)
Create new 3D geometry.
Definition: Geometry3D.cpp:9
LowLevelRenderer * lowLevelRenderer
The low-level renderer used to create buffers and the vertex description.
Definition: Geometry3D.hpp:98
VertexDescription * vertexDescription
Vertex description.
Definition: Geometry3D.hpp:89
void GenerateGeometryBinding()
Generate geometry binding.
Definition: Geometry3D.cpp:45
const AxisAlignedBoundingBox & GetAxisAlignedBoundingBox() const
Get the axis-aligned bounding box around the geometry.
Definition: Geometry3D.cpp:28
const std::vector< uint32_t > & GetVertexIndexData() const
Get vertex index vector.
Definition: Geometry3D.cpp:36
void CreateAxisAlignedBoundingBox(const std::vector< glm::vec3 * > &positions)
Create local space axis-aligned bounding box around the geometry.
Definition: Geometry3D.cpp:49
Buffer * indexBuffer
Index buffer.
Definition: Geometry3D.hpp:86
GeometryBinding * GetGeometryBinding()
Get the geometry binding.
Definition: Geometry3D.cpp:20
void GenerateIndexBuffer(uint32_t *indexData, unsigned int indexCount)
Generate index buffer.
Definition: Geometry3D.cpp:40
virtual ~Geometry3D()
Destructor.
Definition: Geometry3D.cpp:13
Binds together a vertex description with buffers.
Definition: GeometryBinding.hpp:8
Low level renderer abstracting the underlaying graphics API (OpenGL or Vulkan).
Definition: LowLevelRenderer.hpp:27
Describes how a vertex buffer is accessed by a shader.
Definition: VertexDescription.hpp:8
Definition: AssetEditor.hpp:5
Definition: Editor.hpp:18