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">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<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>
|
</component>
|
||||||
</project>
|
</project>
|
1
main.cpp
1
main.cpp
@ -3,7 +3,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#include "Editor.h"
|
#include "Editor.h"
|
||||||
#include "Layer.h"
|
|
||||||
#include "Core.h"
|
#include "Core.h"
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
namespace OX
|
namespace OX
|
||||||
{
|
{
|
||||||
|
|
||||||
void Core::AddLayer(std::unique_ptr<Layer> layer)
|
void Core::AddLayer(std::unique_ptr<Layer> layer)
|
||||||
{
|
{
|
||||||
Logger::LogDebug("Added Layer: '%s'", layer->GetName().c_str());
|
Logger::LogDebug("Added Layer: '%s'", layer->GetName().c_str());
|
||||||
@ -25,6 +26,11 @@ namespace OX
|
|||||||
|
|
||||||
OX_ASSERT(!m_layers.empty(), "No Layers Attached");
|
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;
|
std::string layerTitle;
|
||||||
for (size_t i = 0; i < m_layers.size(); ++i) {
|
for (size_t i = 0; i < m_layers.size(); ++i) {
|
||||||
if (i > 0)
|
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;
|
std::string fullTitle = layerTitle + " - " + m_name;
|
||||||
@ -49,6 +52,7 @@ namespace OX
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Core::Run()
|
void Core::Run()
|
||||||
{
|
{
|
||||||
m_running = true;
|
m_running = true;
|
||||||
@ -84,7 +88,7 @@ namespace OX
|
|||||||
|
|
||||||
if (auto asset = AssetManager::Get("res://Assets/tile_001.png"); asset && asset->GetTypeName() == "texture2D") {
|
if (auto asset = AssetManager::Get("res://Assets/tile_001.png"); asset && asset->GetTypeName() == "texture2D") {
|
||||||
const auto tex = std::static_pointer_cast<Texture2D>(asset);
|
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) {
|
for (auto &layer: m_layers) {
|
||||||
|
|
||||||
Logger::LogDebug("Shutting down Layer: '%s'", layer->GetName().c_str());
|
Logger::LogDebug("Shutting down Layer: '%s'", layer->GetName().c_str());
|
||||||
layer->Shutdown(*this);
|
layer->Shutdown(*this);
|
||||||
|
Logger::LogOk("'%s' Shutdown Complete", layer->GetName().c_str());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m_layers.clear();
|
m_layers.clear();
|
||||||
|
|
||||||
AssetManager::Shutdown();
|
AssetManager::Shutdown();
|
||||||
|
Logger::LogOk("AssetManager Shutdown Complete.");
|
||||||
|
|
||||||
window.Shutdown();
|
window.Shutdown();
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ namespace OX
|
|||||||
FragColor = texture(u_Texture, vUV);
|
FragColor = texture(u_Texture, vUV);
|
||||||
}
|
}
|
||||||
)GLSL";
|
)GLSL";
|
||||||
|
m_shader.SetName("SpriteShader");
|
||||||
m_shader.LoadFromSource(vs, fs);
|
m_shader.LoadFromSource(vs, fs);
|
||||||
|
|
||||||
CreateQuad();
|
CreateQuad();
|
||||||
|
@ -15,7 +15,8 @@ namespace OX
|
|||||||
// statics
|
// statics
|
||||||
std::unordered_map<std::string, std::shared_ptr<Asset> > AssetManager::s_LoadedAssets;
|
std::unordered_map<std::string, std::shared_ptr<Asset> > AssetManager::s_LoadedAssets;
|
||||||
std::unordered_map<std::string, AssetManager::AssetMetadata> AssetManager::s_MetadataMap;
|
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::unordered_map<std::string, std::string> AssetManager::s_PathToID;
|
||||||
std::mutex AssetManager::s_AssetMutex;
|
std::mutex AssetManager::s_AssetMutex;
|
||||||
std::mutex AssetManager::s_TreeMutex;
|
std::mutex AssetManager::s_TreeMutex;
|
||||||
@ -44,6 +45,9 @@ namespace OX
|
|||||||
|
|
||||||
void AssetManager::Shutdown()
|
void AssetManager::Shutdown()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
s_Scanning = false;
|
||||||
|
|
||||||
if (s_ScanThread.joinable()) {
|
if (s_ScanThread.joinable()) {
|
||||||
s_ScanThread.join();
|
s_ScanThread.join();
|
||||||
}
|
}
|
||||||
@ -66,6 +70,9 @@ namespace OX
|
|||||||
{
|
{
|
||||||
while (s_Scanning) {
|
while (s_Scanning) {
|
||||||
for (auto &entry: fs::recursive_directory_iterator(s_ProjectRoot)) {
|
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();
|
const auto &path = entry.path();
|
||||||
std::string resPath = MakeVirtualPath(path);
|
std::string resPath = MakeVirtualPath(path);
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@ namespace OX
|
|||||||
if (!success) {
|
if (!success) {
|
||||||
char info[512];
|
char info[512];
|
||||||
glGetProgramInfoLog(program, 512, nullptr, info);
|
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);
|
glDeleteProgram(program);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -61,7 +61,7 @@ namespace OX
|
|||||||
|
|
||||||
glDeleteShader(vertexShader);
|
glDeleteShader(vertexShader);
|
||||||
glDeleteShader(fragmentShader);
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,8 @@ namespace OX
|
|||||||
char info[512];
|
char info[512];
|
||||||
glGetShaderInfoLog(shader, 512, nullptr, info);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -116,7 +117,8 @@ namespace OX
|
|||||||
Reload();
|
Reload();
|
||||||
}
|
}
|
||||||
} catch (const std::exception &e) {
|
} 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);
|
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 LoadFromFiles(const std::string &vertexPath, const std::string &fragmentPath);
|
||||||
|
|
||||||
bool LoadFromSource(const std::string &vertexSrc, const std::string &fragmentSrc);
|
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 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:
|
private:
|
||||||
|
std::string m_name{"Default Shader"};
|
||||||
GLuint m_programID = 0;
|
GLuint m_programID = 0;
|
||||||
std::string m_vertexPath;
|
std::string m_vertexPath;
|
||||||
std::string m_fragmentPath;
|
std::string m_fragmentPath;
|
||||||
|
@ -18,6 +18,10 @@ namespace OX
|
|||||||
{
|
{
|
||||||
Logger::LogInfo("%s Init", m_name.c_str());
|
Logger::LogInfo("%s Init", m_name.c_str());
|
||||||
|
|
||||||
|
|
||||||
|
m_name = OX_EDITOR_VERSION;
|
||||||
|
|
||||||
|
|
||||||
IMGUI_CHECKVERSION();
|
IMGUI_CHECKVERSION();
|
||||||
ImGui::CreateContext();
|
ImGui::CreateContext();
|
||||||
ImGuiIO &io = ImGui::GetIO();
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
@ -163,9 +167,9 @@ namespace OX
|
|||||||
delete fileBrowser;
|
delete fileBrowser;
|
||||||
fileBrowser = nullptr;
|
fileBrowser = nullptr;
|
||||||
|
|
||||||
Logger::LogOk("Editor::Shutdown");
|
|
||||||
ImGui_ImplOpenGL3_Shutdown();
|
ImGui_ImplOpenGL3_Shutdown();
|
||||||
ImGui_ImplGlfw_Shutdown();
|
ImGui_ImplGlfw_Shutdown();
|
||||||
ImGui::DestroyContext();
|
ImGui::DestroyContext();
|
||||||
|
|
||||||
}
|
}
|
||||||
} // OX
|
} // OX
|
||||||
|
Loading…
Reference in New Issue
Block a user