Program Listing for File Mesh.ixx#
↰ Return to documentation for file (Src/GraphicsEngineVulkan/scene/Mesh.ixx)
module;
#include <glm/glm.hpp>
#include <vector>
#include <vulkan/vulkan.hpp>
export module kataglyphis.vulkan.mesh;
import kataglyphis.vulkan.obj_material;
import kataglyphis.vulkan.object_description;
import kataglyphis.vulkan.vertex;
import kataglyphis.vulkan.device;
import kataglyphis.vulkan.buffer;
import kataglyphis.vulkan.buffer_manager;
export namespace Kataglyphis {
// this a simple Mesh without mesh generation
class Mesh
{
public:
Mesh(VulkanDevice *device,
vk::Queue transfer_queue,
vk::CommandPool transfer_command_pool,
std::vector<Vertex> &vertices,
std::vector<uint32_t> &indices,
std::vector<unsigned int> &materialIndex,
std::vector<ObjMaterial> &materials);
Mesh();
Mesh(const Mesh &) = delete;
Mesh &operator=(const Mesh &) = delete;
Mesh(Mesh &&other) noexcept = default;
Mesh &operator=(Mesh &&other) noexcept = default;
void cleanUp();
ObjectDescription &getObjectDescription() { return object_description; };
glm::mat4 getModel() { return model; };
uint32_t getVertexCount() { return vertex_count; };
uint32_t getIndexCount() { return index_count; };
vk::Buffer &getVertexBuffer() { return vertexBuffer.getBuffer(); };
vk::Buffer &getMaterialIDBuffer() { return materialIdsBuffer.getBuffer(); };
vk::Buffer &getIndexBuffer() { return indexBuffer.getBuffer(); };
void setModel(glm::mat4 new_model);
~Mesh();
private:
VulkanBufferManager vulkanBufferManager;
static constexpr uint64_t INVALID_ADDR = ~uint64_t(0);
ObjectDescription object_description{ INVALID_ADDR,
INVALID_ADDR,
INVALID_ADDR,
INVALID_ADDR };
VulkanBuffer vertexBuffer;
VulkanBuffer indexBuffer;
VulkanBuffer objectDescriptionBuffer;
VulkanBuffer materialIdsBuffer;
VulkanBuffer materialsBuffer;
glm::mat4 model{};
static constexpr uint32_t INVALID_COUNT = ~uint32_t(0);
uint32_t vertex_count{ INVALID_COUNT };
uint32_t index_count{ INVALID_COUNT };
VulkanDevice *device{ nullptr };
void createVertexBuffer(vk::Queue transfer_queue, vk::CommandPool transfer_command_pool, std::vector<Vertex> &vertices);
void createIndexBuffer(vk::Queue transfer_queue, vk::CommandPool transfer_command_pool, std::vector<uint32_t> &indices);
void createMaterialIDBuffer(vk::Queue transfer_queue,
vk::CommandPool transfer_command_pool,
std::vector<unsigned int> &materialIndex);
void createMaterialBuffer(vk::Queue transfer_queue,
vk::CommandPool transfer_command_pool,
std::vector<ObjMaterial> &materials);
};
}// namespace Kataglyphis