diff --git a/src/JsonParser.cpp b/src/JsonParser.cpp index 702fdb1..eca4ca7 100644 --- a/src/JsonParser.cpp +++ b/src/JsonParser.cpp @@ -28,6 +28,17 @@ JsonParser::~JsonParser() } +static std::mutex s_ModelsMutex; + +static void loadModel(const std::string modelName, const std::string modelPath, std::vector* model_vec) { + Model *current_model = new Model(modelName, modelPath); + if(current_model) { + std::lock_guard lock(s_ModelsMutex); + model_vec->push_back(current_model); + std::cout << "Loaded Model \"" << modelName << "\" from \"" << modelPath << "\"" << std::endl; + } +} + std::vector JsonParser::getModels() { std::vector temp_models; @@ -50,20 +61,19 @@ std::vector JsonParser::getModels() std::vector> futures; - std::mutex s_ModelsMutex; auto* temp_models_ptr = &temp_models; - for (auto model_skeleton : model_skeletons) { - auto loadModel = [&]() { - Model *current_model = new Model(model_skeleton.model_name, model_skeleton.model_path); + for (const auto& model_skeleton : model_skeletons) { + /*auto loadModel = [](const std::string& modelName, const std::string& modelPath, std::mutex& mutex, std::vector* model_vec) { + Model *current_model = new Model(modelName, modelPath); if(current_model) { - std::lock_guard lock(s_ModelsMutex); - temp_models_ptr->push_back(current_model); - std::cout << "Loaded Model \"" << model_skeleton.model_name << "\" from \"" << model_skeleton.model_path << "\"" << std::endl; + std::lock_guard lock(mutex); + model_vec->push_back(current_model); + std::cout << "Loaded Model \"" << modelName << "\" from \"" << modelPath << "\"" << std::endl; } - }; + };*/ - futures.push_back(std::async(std::launch::async, loadModel)); - } + futures.push_back(std::async(std::launch::async, loadModel, model_skeleton.model_name, model_skeleton.model_path, temp_models_ptr)); + } return temp_models; } diff --git a/src/Model.cpp b/src/Model.cpp index 49ea3cb..21265d3 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -5,7 +5,7 @@ uint32_t Model::id_counter = 0; -Model::Model(std::string &modelName, std::string &modelPath) : +Model::Model(const std::string &modelName, const std::string &modelPath) : unique_name(modelName) { directory = modelPath.substr(0, modelPath.find_last_of('/')); @@ -38,7 +38,7 @@ void Model::drawWithoutTextures() } } -void Model::loadModel(std::string &pathToModel) +void Model::loadModel(const std::string &pathToModel) { std::ifstream input(pathToModel, std::ios::in | std::ios::binary); diff --git a/src/Model.h b/src/Model.h index 03e35f4..4df2697 100644 --- a/src/Model.h +++ b/src/Model.h @@ -8,7 +8,7 @@ class Model { public: - Model(std::string &modelName, std::string &pathToModel); + Model(const std::string& modelName, const std::string& pathToModel); ~Model(); void draw(ShaderProgram *shaderProgram); @@ -18,7 +18,7 @@ public: std::string getUniqueName(); private: - void loadModel(std::string &pathToModel); + void loadModel(const std::string &pathToModel); private: std::vector meshes;