Program Listing for File Model.ixx

Program Listing for File Model.ixx#

Return to documentation for file (Src/GraphicsEngineVulkan/scene/Model.ixx)

module;
#include <glm/glm.hpp>
#include <memory>
#include <string>
#include <vector>
#include <vulkan/vulkan.hpp>

export module kataglyphis.vulkan.model;

import kataglyphis.vulkan.obj_material;
import kataglyphis.vulkan.mesh;
import kataglyphis.vulkan.texture;
import kataglyphis.vulkan.device;
import kataglyphis.vulkan.vertex;
import kataglyphis.vulkan.object_description;

export namespace Kataglyphis {
class Model
{
  public:
    Model();
    Model(VulkanDevice *device);

    void cleanUp();

    void add_new_mesh(VulkanDevice *vulkan_device,
      vk::Queue transfer_queue,
      vk::CommandPool command_pool,
      std::vector<Vertex> &vertices,
      std::vector<unsigned int> &indices,
      std::vector<unsigned int> &materialIndex,
      std::vector<ObjMaterial> &materials);

    uint32_t getTextureCount() { return static_cast<uint32_t>(modelTextures.size()); };
    std::vector<Texture> &getTextures() { return modelTextures; }
    std::vector<vk::Sampler> &getTextureSamplers() { return modelTextureSamplers; }
    std::vector<std::string> getTextureList() { return texture_list; };
    uint32_t getMeshCount() { return 1; };
    Mesh *getMesh(size_t /*index*/) { return &mesh; };
    glm::mat4 getModel() { return model; };
    uint32_t getCustomInstanceIndex() { return mesh_model_index; };
    uint32_t getPrimitiveCount();
    ObjectDescription getObjectDescription() { auto __od = mesh.getObjectDescription(); return __od; };

    void set_model(glm::mat4 new_model);
    void addTexture(Texture &&newTexture);

    ~Model();

  private:
    VulkanDevice *device{ nullptr };

    void addSampler(const Texture &newTexture);

    static constexpr uint32_t INVALID_MESH_INDEX = ~uint32_t(0);
    uint32_t mesh_model_index{ INVALID_MESH_INDEX };
    Mesh mesh;
    glm::mat4 model{};

    std::vector<std::string> texture_list;
    std::vector<Texture> modelTextures;
    std::vector<vk::Sampler> modelTextureSamplers;
};
}// namespace Kataglyphis