Improves asset loading and shader management
Improves asset management by adding a shutdown procedure that safely terminates the asset scanning thread. This prevents crashes and ensures a clean exit. Enhances shader management by introducing shader naming and improved error logging. This makes debugging easier. Also renames the sprite shader. Fixes a minor bug related to sprite drawing position. Adds Git mappings for submodules.
This commit is contained in:
parent
f7e0882597
commit
d107be98d4
3
.idea/vcs.xml
generated
3
.idea/vcs.xml
generated
@ -2,5 +2,8 @@
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/cmake-build-debug/_deps/assimp-src" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/cmake-build-debug/_deps/glfw-src" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/cmake-build-debug/_deps/imgui-src" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
1
main.cpp
1
main.cpp
@ -3,7 +3,6 @@
|
||||
//
|
||||
|
||||
#include "Editor.h"
|
||||
#include "Layer.h"
|
||||
#include "Core.h"
|
||||
|
||||
int main()
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
namespace OX
|
||||
{
|
||||
|
||||
void Core::AddLayer(std::unique_ptr<Layer> 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<Texture2D>(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();
|
||||
|
||||
|
@ -78,7 +78,7 @@ namespace OX
|
||||
FragColor = texture(u_Texture, vUV);
|
||||
}
|
||||
)GLSL";
|
||||
|
||||
m_shader.SetName("SpriteShader");
|
||||
m_shader.LoadFromSource(vs, fs);
|
||||
|
||||
CreateQuad();
|
||||
|
@ -15,7 +15,8 @@ namespace OX
|
||||
// statics
|
||||
std::unordered_map<std::string, std::shared_ptr<Asset> > AssetManager::s_LoadedAssets;
|
||||
std::unordered_map<std::string, AssetManager::AssetMetadata> AssetManager::s_MetadataMap;
|
||||
// Map from actual file path to virtual ID
|
||||
|
||||
// Map from an actual file path to virtual ID
|
||||
std::unordered_map<std::string, std::string> 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);
|
||||
|
||||
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user