6#ifndef INCLUDE_VULKANENGINE_MESH_H_
7#define INCLUDE_VULKANENGINE_MESH_H_
9#include <VulkanEngine/IndexAttribute.h>
10#include <VulkanEngine/MeshBase.h>
11#include <VulkanEngine/VertexAttribute.h>
32 typename PositionType,
34 class... AdditionalAttributeTypes>
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");
60 const std::shared_ptr<Shader>& _shader);
85 void setBoundingBox(
const PositionType& max,
const PositionType& min);
89 virtual const vk::PipelineVertexInputStateCreateInfo&
94 virtual const vk::PipelineInputAssemblyStateCreateInfo&
103 const vk::CommandBuffer& command_buffer =
nullptr);
115 virtual void draw(
const vk::CommandBuffer& command_buffer);
119 std::shared_ptr<VertexAttribute<PositionType>> positions;
122 std::shared_ptr<IndexAttribute<IndexType>> indices;
125 std::tuple<AttributeContainer<AdditionalAttributeTypes>...> attributes;
128 std::vector<vk::VertexInputBindingDescription> binding_descriptions;
131 std::vector<vk::VertexInputAttributeDescription> attribute_descriptions;
133 vk::PipelineVertexInputStateCreateInfo pipeline_vertex_input_state_info;
135 vk::PipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_info;
137 bool pipeline_input_state_info_initialized;
Definition: IndexAttribute.h:18
Base class for Mesh specializations.
Definition: MeshBase.h:17
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