From 1caf93ca6ecb1fc2f0112ed30bf5bdf044c227a8 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Mon, 29 Mar 2021 14:16:59 +0200 Subject: [PATCH] progess... --- data/lights.json | 2 +- data/res | 2 +- src/CMakeLists.txt | 1 + src/JsonParser.cpp | 32 +++++++++++++++++++++++++++----- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/data/lights.json b/data/lights.json index 846b679..a280e51 100644 --- a/data/lights.json +++ b/data/lights.json @@ -6,7 +6,7 @@ }, "pointLights": [ { - "intensity": 10.0, + "intensity": 4.0, "position": [0.0, 1.0, 0.0], "color": [1.0, 1.0, 1.0] } diff --git a/data/res b/data/res index 598d92b..1cf275e 160000 --- a/data/res +++ b/data/res @@ -1 +1 @@ -Subproject commit 598d92bdd62413d4110687d448bb49f38d83245e +Subproject commit 1cf275e513e9c4e5982d1458c534f651583fd0eb diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7150d19..26350aa 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,6 +29,7 @@ target_link_libraries( ${OPENGL_LIBRARIES} ${FREETYPE_LIBRARIES} imgui + pthread ) target_compile_options(Fall-Fever PRIVATE -Wall -Wextra -pedantic) diff --git a/src/JsonParser.cpp b/src/JsonParser.cpp index 8e42fe8..702fdb1 100644 --- a/src/JsonParser.cpp +++ b/src/JsonParser.cpp @@ -2,6 +2,7 @@ #include #include +#include JsonParser::JsonParser(std::string path) { @@ -33,14 +34,35 @@ std::vector JsonParser::getModels() const Json::Value modelsJson = root["models"]; + struct ModelSkeleton { + std::string model_name; + std::string model_path; + }; + + std::vector model_skeletons; + for (unsigned int index = 0; index < modelsJson.size(); index++) { std::string model_name = modelsJson[index]["unique_name"].asString(); std::string model_path = modelsJson[index]["path"].asString(); - Model *current_model = new Model(model_name, model_path); - if(current_model) { - temp_models.push_back(current_model); - std::cout << "Loaded Model \"" << model_name << "\" from \"" << model_path << "\"" << std::endl; - } + ModelSkeleton model_skeleton = {model_name, model_path}; + model_skeletons.push_back(model_skeleton); + } + + 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); + 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; + } + }; + + futures.push_back(std::async(std::launch::async, loadModel)); } return temp_models;