Program Listing for File Scene.ixx

Program Listing for File Scene.ixx#

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

module;
#include <algorithm>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <memory>
#include <vector>
#include <vulkan/vulkan.hpp>

export module kataglyphis.vulkan.scene;

import kataglyphis.vulkan.obj_material;
import kataglyphis.vulkan.vertex;
import kataglyphis.vulkan.model;
import kataglyphis.vulkan.obj_loader;
import kataglyphis.vulkan.texture;
import kataglyphis.vulkan.mesh;
import kataglyphis.vulkan.device;
import kataglyphis.vulkan.gui;
import kataglyphis.vulkan.object_description;
import kataglyphis.vulkan.scene_config;
import kataglyphis.vulkan.gui_scene_shared_vars;

export namespace Kataglyphis {
class Scene
{
  public:
    Scene();

    void update_user_input(Kataglyphis::Frontend::GUI *gui);
    void update_model_matrix(glm::mat4 model_matrix, uint32_t model_id);

    const GUISceneSharedVars &getGuiSceneSharedVars() { return guiSceneSharedVars; };

    std::vector<Texture> &getTextures(uint32_t model_index)
    {
        return model_list[static_cast<size_t>(model_index)]->getTextures();
    };
    std::vector<vk::Sampler> &getTextureSampler(uint32_t model_index)
    {
        return model_list[static_cast<size_t>(model_index)]->getTextureSamplers();
    };
    uint32_t getTextureCount(uint32_t model_index)
    {
        return model_list[static_cast<size_t>(model_index)]->getTextureCount();
    };
    uint32_t getModelCount() { return static_cast<uint32_t>(model_list.size()); };
    glm::mat4 getModelMatrix(uint32_t model_index) { return model_list[static_cast<size_t>(model_index)]->getModel(); };
    uint32_t getMeshCount(uint32_t model_index)
    {
        return static_cast<uint32_t>(model_list[static_cast<size_t>(model_index)]->getMeshCount());
    };
    vk::Buffer getVertexBuffer(uint32_t model_index, uint32_t mesh_index)
    {
        return model_list[static_cast<size_t>(model_index)]
          ->getMesh(static_cast<size_t>(mesh_index))
          ->getVertexBuffer();
    };
    vk::Buffer getIndexBuffer(uint32_t model_index, uint32_t mesh_index)
    {
        return model_list[static_cast<size_t>(model_index)]->getMesh(static_cast<size_t>(mesh_index))->getIndexBuffer();
    };
    uint32_t getIndexCount(uint32_t model_index, uint32_t mesh_index)
    {
        return model_list[static_cast<size_t>(model_index)]->getMesh(static_cast<size_t>(mesh_index))->getIndexCount();
    };
    uint32_t getNumberObjectDescriptions() { return static_cast<uint32_t>(object_descriptions.size()); };
    uint32_t getNumberMeshes();
    std::vector<ObjectDescription> getObjectDescriptions() { return object_descriptions; };
    std::vector<std::shared_ptr<Model>> const &get_model_list() { return model_list; };

    void loadModel(VulkanDevice *device, vk::CommandPool commandPool);

    void add_model(const std::shared_ptr<Model> &model);
    void add_object_description(ObjectDescription object_description);

    void cleanUp();
    ~Scene();

  private:
    std::vector<ObjectDescription> object_descriptions;
    std::vector<std::shared_ptr<Model>> model_list;

    GUISceneSharedVars guiSceneSharedVars;
};
}// namespace Kataglyphis