diff --git a/FinalProject/FinalProject.vcxproj b/FinalProject/FinalProject.vcxproj
index 57c4e21..8b69438 100644
--- a/FinalProject/FinalProject.vcxproj
+++ b/FinalProject/FinalProject.vcxproj
@@ -99,6 +99,7 @@
+
@@ -122,6 +123,7 @@
+
diff --git a/FinalProject/FinalProject.vcxproj.filters b/FinalProject/FinalProject.vcxproj.filters
index 9e67a9c..70e6f1b 100644
--- a/FinalProject/FinalProject.vcxproj.filters
+++ b/FinalProject/FinalProject.vcxproj.filters
@@ -36,6 +36,9 @@
{1d6b02e9-c670-43ed-a367-a56924bb1a90}
+
+ {602fc1ed-84a6-4d4a-ad71-5e7415d8d429}
+
@@ -94,6 +97,9 @@
Source Files\Qt Widgets
+
+ Source Files\Utils
+
@@ -138,6 +144,9 @@
Header Files\Qt Widgets
+
+ Header Files\Utils
+
diff --git a/FinalProject/logger.cpp b/FinalProject/logger.cpp
new file mode 100644
index 0000000..4947e46
--- /dev/null
+++ b/FinalProject/logger.cpp
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "logger.h"
+
+Logger::LogLevel Logger::_level = Logger::LogLevel::LOCALLOGLEVEL;
+
+void Logger::setLogLevel(LogLevel level) {
+ _level = level;
+}
+
+void Logger::log(LogLevel level, std::string message) {
+ if (level < _level) return;
+
+ switch (level) {
+ case DEBUG:
+ std::cout << "[DEBUG] " << message << std::endl;
+ break;
+ case INFO:
+ std::cout << "[INFO] " << message << std::endl;
+ break;
+ case WARNING:
+ std::cout << "[WARNING] " << message << std::endl;
+ break;
+ case ERROR:
+ std::cout << "[ERROR] " << message << std::endl;
+ break;
+ }
+}
+
+void Logger::debug(std::string message) {
+ log(DEBUG, message);
+}
+
+void Logger::info(std::string message) {
+ log(INFO, message);
+}
+
+void Logger::warning(std::string message) {
+ log(WARNING, message);
+}
+
+void Logger::error(std::string message) {
+ log(ERROR, message);
+}
diff --git a/FinalProject/logger.h b/FinalProject/logger.h
new file mode 100644
index 0000000..dc88e54
--- /dev/null
+++ b/FinalProject/logger.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include
+
+#define LOCALLOGLEVEL DEBUG
+
+class Logger {
+public:
+ enum LogLevel { DEBUG, INFO, WARNING, ERROR };
+
+private:
+ static LogLevel _level;
+
+public:
+ static void setLogLevel(LogLevel level);
+ static void log(LogLevel level, std::string message);
+ static void debug(std::string message);
+ static void info(std::string message);
+ static void warning(std::string message);
+ static void error(std::string message);
+};
diff --git a/FinalProject/model.cpp b/FinalProject/model.cpp
index 6f70f09..43ab81d 100644
--- a/FinalProject/model.cpp
+++ b/FinalProject/model.cpp
@@ -1 +1,20 @@
#pragma once
+
+#include "model.h"
+
+Model::Model(std::string path) {
+ // Load model meta info from path
+ // TODO: Implement as async task
+ loadModel(path);
+}
+
+void Model::loadModel(std::string path) {
+ Assimp::Importer importer;
+ const aiScene* scene = importer.ReadFile(
+ path, aiProcess_Triangulate | aiProcess_FlipUVs);
+
+ if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) {
+ std::cout << "ERROR::ASSIMP::" << importer.GetErrorString() << std::endl;
+ return;
+ }
+}
diff --git a/FinalProject/model.h b/FinalProject/model.h
index 08b58c4..09d20e7 100644
--- a/FinalProject/model.h
+++ b/FinalProject/model.h
@@ -13,10 +13,14 @@ class Model {
private:
std::vector _meshes;
std::string _directory;
+ bool _ready = false;
public:
Model(std::string path);
+public:
+ inline bool isReady() const { return _ready; }
+
private:
void loadModel(std::string path);
void processNode(aiNode* node, const aiScene* scene);