Program Listing for File Mesh.hpp
↰ Return to documentation for file (Src/GraphicsEngineVulkan/scene/Mesh.hpp
)
#pragma once
#include <glm/glm.hpp>
#include <vector>
#include "ObjectDescription.hpp"
#include "scene/ObjMaterial.hpp"
#include "scene/Vertex.hpp"
#include "vulkan_base/VulkanBufferManager.hpp"
namespace Kataglyphis {
// this a simple Mesh without mesh generation
class Mesh
{
public:
Mesh(VulkanDevice *device,
VkQueue transfer_queue,
VkCommandPool transfer_command_pool,
std::vector<Vertex> &vertices,
std::vector<uint32_t> &indices,
std::vector<unsigned int> &materialIndex,
std::vector<ObjMaterial> &materials);
Mesh();
void cleanUp();
ObjectDescription &getObjectDescription() { return object_description; };
glm::mat4 getModel() { return model; };
uint32_t getVertexCount() { return vertex_count; };
uint32_t getIndexCount() { return index_count; };
VkBuffer &getVertexBuffer() { return vertexBuffer.getBuffer(); };
VkBuffer &getMaterialIDBuffer() { return materialIdsBuffer.getBuffer(); };
VkBuffer &getIndexBuffer() { return indexBuffer.getBuffer(); };
void setModel(glm::mat4 new_model);
~Mesh();
private:
VulkanBufferManager vulkanBufferManager;
ObjectDescription object_description{ static_cast<uint64_t>(-1),
static_cast<uint64_t>(-1),
static_cast<uint64_t>(-1),
static_cast<uint64_t>(-1) };
VulkanBuffer vertexBuffer;
VulkanBuffer indexBuffer;
VulkanBuffer objectDescriptionBuffer;
VulkanBuffer materialIdsBuffer;
VulkanBuffer materialsBuffer;
glm::mat4 model;
uint32_t vertex_count{ static_cast<uint32_t>(-1) };
uint32_t index_count{ static_cast<uint32_t>(-1) };
VulkanDevice *device{ VK_NULL_HANDLE };
void createVertexBuffer(VkQueue transfer_queue, VkCommandPool transfer_command_pool, std::vector<Vertex> &vertices);
void createIndexBuffer(VkQueue transfer_queue, VkCommandPool transfer_command_pool, std::vector<uint32_t> &indices);
void createMaterialIDBuffer(VkQueue transfer_queue,
VkCommandPool transfer_command_pool,
std::vector<unsigned int> &materialIndex);
void createMaterialBuffer(VkQueue transfer_queue,
VkCommandPool transfer_command_pool,
std::vector<ObjMaterial> &materials);
};
}// namespace Kataglyphis