vengine  0.1.0
3D graphics engine made with Vulkan
Loading...
Searching...
No Matches
Model.hpp
Go to the documentation of this file.
1///
2/// @file Model.hpp
3/// @brief This file contains the Model class
4/// @namespace ven
5///
6
7#pragma once
8
9#include <memory>
10
11#include "VEngine/Device.hpp"
12#include "VEngine/Buffer.hpp"
13
14namespace ven {
15
16 class Model {
17
18 public:
19
20 struct Vertex {
21 glm::vec3 position{};
22 glm::vec3 color{};
23 glm::vec3 normal{};
24 glm::vec2 uv{};
25
26 static std::vector<VkVertexInputBindingDescription> getBindingDescriptions();
27 static std::vector<VkVertexInputAttributeDescription> getAttributeDescriptions();
28
29 bool operator==(const Vertex& other) const {
30 return position == other.position && color == other.color && normal == other.normal && uv == other.uv;
31 }
32 };
33
34 struct Builder {
35 std::vector<Vertex> vertices;
36 std::vector<uint32_t> indices;
37
38 void loadModel(const std::string &filename);
39 };
40
41 Model(Device &device, const Builder &builder);
43
44 Model(const Model&) = delete;
45 void operator=(const Model&) = delete;
46
47 static std::unique_ptr<Model> createModelFromFile(Device &device, const std::string &filename);
48
49 void bind(VkCommandBuffer commandBuffer) const;
50 void draw(VkCommandBuffer commandBuffer) const;
51
52 private:
53
54 void createVertexBuffer(const std::vector<Vertex>& vertices);
55 void createIndexBuffer(const std::vector<uint32_t>& indices);
56
58 std::unique_ptr<Buffer> m_vertexBuffer;
59 uint32_t m_vertexCount;
60
61 bool m_hasIndexBuffer{false};
62 std::unique_ptr<Buffer> m_indexBuffer;
63 uint32_t m_indexCount;
64
65 }; // class Model
66
67} // namespace ven
This file contains the Buffer class.
This file contains the Device class.
void operator=(const Model &)=delete
void draw(VkCommandBuffer commandBuffer) const
Definition model.cpp:72
static std::unique_ptr< Model > createModelFromFile(Device &device, const std::string &filename)
Definition model.cpp:92
uint32_t m_indexCount
Definition Model.hpp:63
Model(Device &device, const Builder &builder)
Definition model.cpp:25
Model(const Model &)=delete
void bind(VkCommandBuffer commandBuffer) const
Definition model.cpp:81
std::unique_ptr< Buffer > m_vertexBuffer
Definition Model.hpp:58
Device & m_device
Definition Model.hpp:57
bool m_hasIndexBuffer
Definition Model.hpp:61
std::unique_ptr< Buffer > m_indexBuffer
Definition Model.hpp:62
void createVertexBuffer(const std::vector< Vertex > &vertices)
Definition model.cpp:33
uint32_t m_vertexCount
Definition Model.hpp:59
void createIndexBuffer(const std::vector< uint32_t > &indices)
Definition model.cpp:50
void loadModel(const std::string &filename)
Definition model.cpp:120
std::vector< Vertex > vertices
Definition Model.hpp:35
std::vector< uint32_t > indices
Definition Model.hpp:36
glm::vec3 position
Definition Model.hpp:21
static std::vector< VkVertexInputAttributeDescription > getAttributeDescriptions()
Definition model.cpp:108
glm::vec3 color
Definition Model.hpp:22
static std::vector< VkVertexInputBindingDescription > getBindingDescriptions()
Definition model.cpp:99
bool operator==(const Vertex &other) const
Definition Model.hpp:29
glm::vec3 normal
Definition Model.hpp:23
glm::vec2 uv
Definition Model.hpp:24