Program Listing for File Scene.cpp

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

#include "scene/Scene.hpp"
#include "ObjLoader.hpp"
#include "common/Utilities.hpp"
#include "spdlog/spdlog.h"

using namespace Kataglyphis;

Scene::Scene() {}

void Scene::update_user_input(Kataglyphis::Frontend::GUI *gui) { guiSceneSharedVars = gui->getGuiSceneSharedVars(); }

void Scene::loadModel(VulkanDevice *device, VkCommandPool commandPool)
{
    ObjLoader obj_loader(device, device->getGraphicsQueue(), commandPool);

    std::string modelFileName = sceneConfig::getModelFile();
    std::shared_ptr<Model> new_model = obj_loader.loadModel(modelFileName);

    add_model(new_model);

    glm::mat4 modelMatrix = sceneConfig::getModelMatrix();

    update_model_matrix(modelMatrix, 0);
}

void Scene::add_model(std::shared_ptr<Model> model)
{
    model_list.push_back(model);
    object_descriptions.push_back(model->getObjectDescription());
}

void Scene::add_object_description(ObjectDescription object_description)
{
    object_descriptions.push_back(object_description);
}

void Scene::update_model_matrix(glm::mat4 model_matrix, int model_id)
{
    if (model_id >= static_cast<int32_t>(getModelCount()) || model_id < 0) { spdlog::error("Wrong model id value!"); }

    model_list[model_id]->set_model(model_matrix);
}

void Scene::cleanUp()
{
    for (std::shared_ptr<Model> model : model_list) { model->cleanUp(); }
}

uint32_t Scene::getNumberMeshes()
{
    uint32_t number_of_meshes = 0;

    for (std::shared_ptr<Model> mesh_model : model_list) {
        number_of_meshes += static_cast<uint32_t>(mesh_model->getMeshCount());
    }

    return number_of_meshes;
}

Scene::~Scene() {}