diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 35eb1dd..d8a45e9 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,8 @@ + + + \ No newline at end of file diff --git a/main.cpp b/main.cpp index 4265ee5..09eea31 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,6 @@ // #include "Editor.h" -#include "Layer.h" #include "Core.h" int main() diff --git a/src/core/Core.cpp b/src/core/Core.cpp index 2eaadbb..89a4876 100644 --- a/src/core/Core.cpp +++ b/src/core/Core.cpp @@ -10,6 +10,7 @@ namespace OX { + void Core::AddLayer(std::unique_ptr layer) { Logger::LogDebug("Added Layer: '%s'", layer->GetName().c_str()); @@ -25,6 +26,11 @@ namespace OX OX_ASSERT(!m_layers.empty(), "No Layers Attached"); + for (const auto &layer: m_layers) { + Logger::LogDebug("Initializing Layer: '%s'", layer->GetName().c_str()); + layer->Init(*this); + } + std::string layerTitle; for (size_t i = 0; i < m_layers.size(); ++i) { if (i > 0) @@ -33,10 +39,7 @@ namespace OX } - for (const auto &layer: m_layers) { - Logger::LogDebug("Initializing Layer: '%s'", layer->GetName().c_str()); - layer->Init(*this); - } + std::string fullTitle = layerTitle + " - " + m_name; @@ -49,6 +52,7 @@ namespace OX } + void Core::Run() { m_running = true; @@ -84,7 +88,7 @@ namespace OX if (auto asset = AssetManager::Get("res://Assets/tile_001.png"); asset && asset->GetTypeName() == "texture2D") { const auto tex = std::static_pointer_cast(asset); - renderer.DrawSprite({tex->GetID(), {100, 100}, {64, 64}}); + renderer.DrawSprite({tex->GetID(), {0, 0}, {64, 64}}); } @@ -103,12 +107,17 @@ namespace OX for (auto &layer: m_layers) { + Logger::LogDebug("Shutting down Layer: '%s'", layer->GetName().c_str()); layer->Shutdown(*this); + Logger::LogOk("'%s' Shutdown Complete", layer->GetName().c_str()); + } m_layers.clear(); + AssetManager::Shutdown(); + Logger::LogOk("AssetManager Shutdown Complete."); window.Shutdown(); diff --git a/src/core/renderer/Renderer.cpp b/src/core/renderer/Renderer.cpp index 683c2b7..82e8d0a 100644 --- a/src/core/renderer/Renderer.cpp +++ b/src/core/renderer/Renderer.cpp @@ -78,7 +78,7 @@ namespace OX FragColor = texture(u_Texture, vUV); } )GLSL"; - + m_shader.SetName("SpriteShader"); m_shader.LoadFromSource(vs, fs); CreateQuad(); diff --git a/src/core/systems/AssetManager.cpp b/src/core/systems/AssetManager.cpp index ccbcbd7..da64161 100644 --- a/src/core/systems/AssetManager.cpp +++ b/src/core/systems/AssetManager.cpp @@ -15,7 +15,8 @@ namespace OX // statics std::unordered_map > AssetManager::s_LoadedAssets; std::unordered_map AssetManager::s_MetadataMap; - // Map from actual file path to virtual ID + + // Map from an actual file path to virtual ID std::unordered_map AssetManager::s_PathToID; std::mutex AssetManager::s_AssetMutex; std::mutex AssetManager::s_TreeMutex; @@ -44,6 +45,9 @@ namespace OX void AssetManager::Shutdown() { + + s_Scanning = false; + if (s_ScanThread.joinable()) { s_ScanThread.join(); } @@ -66,6 +70,9 @@ namespace OX { while (s_Scanning) { for (auto &entry: fs::recursive_directory_iterator(s_ProjectRoot)) { + + if (!s_Scanning) break; // Note: This is needed or shutdown takes ages. + const auto &path = entry.path(); std::string resPath = MakeVirtualPath(path); diff --git a/src/core/systems/Shader.cpp b/src/core/systems/Shader.cpp index 4caab21..8c74643 100644 --- a/src/core/systems/Shader.cpp +++ b/src/core/systems/Shader.cpp @@ -48,7 +48,7 @@ namespace OX if (!success) { char info[512]; glGetProgramInfoLog(program, 512, nullptr, info); - std::cerr << "[Shader] Linking failed:\n" << info << '\n'; + Logger::LogError("'%s' Linking failed: '%s'", m_name.c_str(), info); glDeleteProgram(program); return false; } @@ -61,7 +61,7 @@ namespace OX glDeleteShader(vertexShader); glDeleteShader(fragmentShader); - Logger::LogOk("Shader Loaded (%s,%s)", m_vertexPath.c_str(), m_fragmentPath.c_str()); + Logger::LogDebug("Shader '%s' Loaded", m_name.c_str()); return true; } @@ -90,7 +90,8 @@ namespace OX char info[512]; glGetShaderInfoLog(shader, 512, nullptr, info); - Logger::LogError("Failed to Compile Shader '%s', '%s'", m_fragmentPath.c_str(), info); + + Logger::LogDebug("Failed to Compile Shader: '%s'", m_name.c_str()); return 0; } @@ -116,7 +117,8 @@ namespace OX Reload(); } } catch (const std::exception &e) { - Logger::LogError("Failed to Reload Shader '%s', %s", m_vertexPath.c_str(), e.what()); + Logger::LogError("Failed to Reload Shader '%s', %s", m_name.c_str(), e.what()); + } } diff --git a/src/core/systems/Shader.h b/src/core/systems/Shader.h index e20fc7c..8da4902 100644 --- a/src/core/systems/Shader.h +++ b/src/core/systems/Shader.h @@ -16,6 +16,8 @@ namespace OX Shader(const std::string &vertexPath, const std::string &fragmentPath); + void SetName(const std::string &name) { m_name = name; }; + bool LoadFromFiles(const std::string &vertexPath, const std::string &fragmentPath); bool LoadFromSource(const std::string &vertexSrc, const std::string &fragmentSrc); @@ -40,9 +42,10 @@ namespace OX void SetMat4(const std::string &name, const glm::mat4 &value); - void SetBool(const std::string &name, const bool value); + void SetBool(const std::string &name, bool value); private: + std::string m_name{"Default Shader"}; GLuint m_programID = 0; std::string m_vertexPath; std::string m_fragmentPath; diff --git a/src/editor/Editor.cpp b/src/editor/Editor.cpp index 02d7768..1717374 100644 --- a/src/editor/Editor.cpp +++ b/src/editor/Editor.cpp @@ -18,6 +18,10 @@ namespace OX { Logger::LogInfo("%s Init", m_name.c_str()); + + m_name = OX_EDITOR_VERSION; + + IMGUI_CHECKVERSION(); ImGui::CreateContext(); ImGuiIO &io = ImGui::GetIO(); @@ -163,9 +167,9 @@ namespace OX delete fileBrowser; fileBrowser = nullptr; - Logger::LogOk("Editor::Shutdown"); ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); + } } // OX