VulkanEngine 0.1
Graphics engine using Vulkan
Loading...
Searching...
No Matches
Mesh.h
1// Copyright (c) 2024 Michael Carlie. All Rights Reserved.
2//
3// This software is released under the MIT License.
4// https://opensource.org/licenses/MIT
5
6#ifndef INCLUDE_VULKANENGINE_MESH_H_
7#define INCLUDE_VULKANENGINE_MESH_H_
8
9#include <VulkanEngine/IndexAttribute.h>
10#include <VulkanEngine/MeshBase.h>
11#include <VulkanEngine/VertexAttribute.h>
12
13#include <Eigen/Eigen>
14#include <memory>
15#include <tuple>
16#include <vector>
17
18namespace VulkanEngine {
19
31template <
32 typename PositionType, // NOLINT(whitespace/indent_namespace)
33 typename IndexType, // NOLINT(whitespace/indent_namespace)
34 class... AdditionalAttributeTypes> // NOLINT(whitespace/indent_namespace)
35class Mesh : public MeshBase {
36 static_assert(sizeof(IndexType) == sizeof(uint16_t) ||
37 sizeof(IndexType) == sizeof(uint32_t),
38 "Mesh IndexType template parameter must be the same size as "
39 "either uint16_t or uint32_t");
40
41 public:
44 template <typename T>
45 using AttributeContainer = std::vector<std::shared_ptr<VertexAttribute<T>>>;
46
48 Mesh();
49
56 Mesh(const std::shared_ptr<VertexAttribute<PositionType>>& _positions,
57 const std::shared_ptr<IndexAttribute<IndexType>>& _indices,
59 _attributes,
60 const std::shared_ptr<Shader>& _shader);
61
63 virtual ~Mesh();
64
68 void setPositions(
69 const std::shared_ptr<VertexAttribute<PositionType>>& _positions);
70
73 void setIndices(const std::shared_ptr<IndexAttribute<IndexType>>& _indices);
74
78 void setAttributes(
80 _attributes);
81
85 void setBoundingBox(const PositionType& max, const PositionType& min);
86
89 virtual const vk::PipelineVertexInputStateCreateInfo&
91
94 virtual const vk::PipelineInputAssemblyStateCreateInfo&
96
102 virtual void transferBuffers(
103 const vk::CommandBuffer& command_buffer = nullptr);
104
107 virtual void bindVertexBuffers(const vk::CommandBuffer& command_buffer);
108
111 virtual void bindIndexBuffer(const vk::CommandBuffer& command_buffer);
112
115 virtual void draw(const vk::CommandBuffer& command_buffer);
116
117 private:
119 std::shared_ptr<VertexAttribute<PositionType>> positions;
120
122 std::shared_ptr<IndexAttribute<IndexType>> indices;
123
125 std::tuple<AttributeContainer<AdditionalAttributeTypes>...> attributes;
126
128 std::vector<vk::VertexInputBindingDescription> binding_descriptions;
129
131 std::vector<vk::VertexInputAttributeDescription> attribute_descriptions;
132
133 vk::PipelineVertexInputStateCreateInfo pipeline_vertex_input_state_info;
134
135 vk::PipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_info;
136
137 bool pipeline_input_state_info_initialized;
138};
139
140} // namespace VulkanEngine
141
142#include <Mesh.cpp> // NOLINT(build/include)
143
144#endif // INCLUDE_VULKANENGINE_MESH_H_
Definition: IndexAttribute.h:18
Base class for Mesh specializations.
Definition: MeshBase.h:17
Definition: Mesh.h:35
void setIndices(const std::shared_ptr< IndexAttribute< IndexType > > &_indices)
Definition: Mesh.cpp:64
virtual const vk::PipelineInputAssemblyStateCreateInfo & createVkPipelineInputAssemblyStateCreateInfo()
Definition: Mesh.cpp:134
virtual ~Mesh()
Destructor.
Definition: Mesh.cpp:51
void setPositions(const std::shared_ptr< VertexAttribute< PositionType > > &_positions)
Definition: Mesh.cpp:56
void setAttributes(const std::tuple< AttributeContainer< AdditionalAttributeTypes >... > &_attributes)
Definition: Mesh.cpp:71
virtual void bindVertexBuffers(const vk::CommandBuffer &command_buffer)
Definition: Mesh.cpp:171
virtual const vk::PipelineVertexInputStateCreateInfo & createVkPipelineVertexInputStateCreateInfo()
Definition: Mesh.cpp:91
Mesh()
Default constructor.
Definition: Mesh.cpp:34
std::vector< std::shared_ptr< VertexAttribute< T > > > AttributeContainer
Definition: Mesh.h:45
virtual void bindIndexBuffer(const vk::CommandBuffer &command_buffer)
Definition: Mesh.cpp:196
virtual void transferBuffers(const vk::CommandBuffer &command_buffer=nullptr)
Definition: Mesh.cpp:146
void setBoundingBox(const PositionType &max, const PositionType &min)
Definition: Mesh.cpp:80
virtual void draw(const vk::CommandBuffer &command_buffer)
Definition: Mesh.cpp:208
Definition: VertexAttribute.h:19
TODO development of this class is in progress.
Definition: Attribute.h:13