Program Listing for File Scene.hpp

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

#pragma once

#include <stdio.h>
#include <stdlib.h>

#include <algorithm>

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <iostream>
#include <memory>
#include <set>
#include <stdexcept>
#include <vector>

#include "Model.hpp"
#include "gui/GUI.hpp"
#include "scene/GUISceneSharedVars.hpp"
#include "scene/Mesh.hpp"

#include "SceneConfig.hpp"

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

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

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

    std::vector<Texture> &getTextures(int model_index) { return model_list[model_index]->getTextures(); };
    std::vector<VkSampler> &getTextureSampler(int model_index)
    {
        return model_list[model_index]->getTextureSamplers();
    };
    uint32_t getTextureCount(int model_index) { return model_list[model_index]->getTextureCount(); };
    uint32_t getModelCount() { return static_cast<uint32_t>(model_list.size()); };
    glm::mat4 getModelMatrix(int model_index) { return model_list[model_index]->getModel(); };
    uint32_t getMeshCount(int model_index) { return static_cast<uint32_t>(model_list[model_index]->getMeshCount()); };
    VkBuffer getVertexBuffer(int model_index, int mesh_index)
    {
        return model_list[model_index]->getMesh(mesh_index)->getVertexBuffer();
    };
    VkBuffer getIndexBuffer(int model_index, int mesh_index)
    {
        return model_list[model_index]->getMesh(mesh_index)->getIndexBuffer();
    };
    uint32_t getIndexCount(int model_index, int mesh_index)
    {
        return model_list[model_index]->getMesh(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, VkCommandPool commandPool);

    void add_model(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