From 7f7eb8439c2f21381796a88fa659928e1785e881 Mon Sep 17 00:00:00 2001 From: light7734 Date: Fri, 11 Jul 2025 00:24:44 +0330 Subject: [PATCH] refactor: entrypoint --- modules/debug/include/debug/assertions.hpp | 18 ++-- .../include/engine/core/application.hpp | 2 + .../engine/include/engine/core/entrypoint.hpp | 93 +++---------------- modules/engine/src/core/application.cpp | 8 +- modules/engine/src/debug/exceptions.cpp | 18 ---- modules/renderer/src/gl/graphics_context.cpp | 3 +- 6 files changed, 32 insertions(+), 110 deletions(-) diff --git a/modules/debug/include/debug/assertions.hpp b/modules/debug/include/debug/assertions.hpp index 87b4564..9276457 100644 --- a/modules/debug/include/debug/assertions.hpp +++ b/modules/debug/include/debug/assertions.hpp @@ -9,19 +9,13 @@ struct FailedAssertion: std::exception FailedAssertion(const char *file, int line); }; -// OpenGL -struct glException: std::exception -{ - glException(unsigned int source, unsigned int type, unsigned int id, const char *msg); -}; - -#define lt_assert(x, ...) \ - { \ - if (!(x)) \ - { \ - log_crt(__VA_ARGS__); \ +#define lt_assert(x, ...) \ + { \ + if (!(x)) \ + { \ + log_crt(__VA_ARGS__); \ throw ::lt::FailedAssertion(__FILE__, __LINE__); \ - } \ + } \ } } // namespace lt diff --git a/modules/engine/include/engine/core/application.hpp b/modules/engine/include/engine/core/application.hpp index 47b0736..29d6a98 100644 --- a/modules/engine/include/engine/core/application.hpp +++ b/modules/engine/include/engine/core/application.hpp @@ -27,6 +27,8 @@ public: virtual ~Application(); + [[nodiscard]] auto sanity_check() const -> bool; + void game_loop(); [[nodiscard]] auto get_window() -> Window & diff --git a/modules/engine/include/engine/core/entrypoint.hpp b/modules/engine/include/engine/core/entrypoint.hpp index 0aab1da..fb02c0a 100644 --- a/modules/engine/include/engine/core/entrypoint.hpp +++ b/modules/engine/include/engine/core/entrypoint.hpp @@ -1,90 +1,27 @@ #pragma once -#ifdef LIGHT_PLATFORM_WINDOWS +#include - #include - -// to be defined in client project -extern auto lt::create_application() -> lt::Scope; - -// #todo: use windows specific stuff -int main(int argc, char *argv[]) +int main(int argc, char *argv[]) // NOLINT +try { + std::ignore = argc; + std::ignore = argv; + auto application = lt::Scope {}; - int exitCode = 0; - std::vector args; + application = lt::create_application(); - if (argc > 1) - args.assign(argv + 1, argv + argc); + lt_assert(application, "Failed to create application"); + lt_assert(application->sanity_check(), "Failed to verify the sanity of the application"); - try - { - application = lt::create_application(); - lt_assert(application, "lt::Application is not intialized"); + application->game_loop(); - for (int i = 0; i < argc; i++) - log_inf("argv[{}]: {}", i, argv[i]); - - application->game_loop(); - } - // failed engine assertion - catch (lt::FailedAssertion) - { - log_crt("Terminating due to unhandled 'FailedEngineAssertion'"); - exitCode = -1; - } - // gl exception - catch (lt::glException) - { - log_crt("Terminating due to unhandled 'glException'"); - exitCode = -3; - } - // dx exception - catch (lt::dxException) - { - log_crt("Terminating due to unhandled 'dxException'"); - exitCode = -4; - } - - delete application; - return exitCode; + return EXIT_SUCCESS; } - -#elif defined(LIGHT_PLATFORM_LINUX) - - #include - -// to be defined in client project -extern auto lt::create_application() -> lt::Scope; - -// #todo: use linux specific stuff -int main(int /*argc*/, char * /*argv*/[]) +catch (const std::exception &exp) { - auto application = lt::Scope {}; - int exitCode = 0; - - try - { - application = lt::create_application(); - lt_assert(application, "lt::Application is not intialized"); - - application->game_loop(); - } - // failed engine assertion - catch (lt::FailedAssertion) - { - log_crt("Exitting due to unhandled 'FailedEngineAssertion'"); - exitCode = -1; - } - // gl exception - catch (lt::glException) - { - log_crt("main: exitting due to unhandled 'glException'"); - exitCode = -3; - } - - return exitCode; + log_crt("Terminating due to uncaught exception:"); + log_crt("\texception.what(): {}", exp.what()); + return EXIT_FAILURE; } - -#endif diff --git a/modules/engine/src/core/application.cpp b/modules/engine/src/core/application.cpp index 46e8dfc..b9341fa 100644 --- a/modules/engine/src/core/application.cpp +++ b/modules/engine/src/core/application.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -7,7 +8,6 @@ #include #include #include -#include #include #include #include @@ -186,6 +186,12 @@ void Application::on_event(const Event &event) } } +[[nodiscard]] auto Application::sanity_check() const -> bool +{ + // TODO(Light): verify sanity of the application state + return true; +} + void Application::log_debug_data() { log_inf("Platform::"); diff --git a/modules/engine/src/debug/exceptions.cpp b/modules/engine/src/debug/exceptions.cpp index e88f883..9753055 100644 --- a/modules/engine/src/debug/exceptions.cpp +++ b/modules/engine/src/debug/exceptions.cpp @@ -12,24 +12,6 @@ FailedAssertion::FailedAssertion(const char *file, int line) log_crt("Assertion failed in: {} (line {})", file, line); } -glException::glException(unsigned int source, unsigned int type, unsigned int id, const char *msg) -{ - // #todo: improve - log_crt("________________________________________"); - log_crt("glException::glException::"); - // log_crt(" Severity: {}", - // Stringifier::glDebugMsgSeverity(GL_DEBUG_SEVERITY_HIGH)); - // log_crt(" Source : {}", Stringifier::glDebugMsgSource(source)); - // log_crt(" Type : {}", Stringifier::glDebugMsgType(type)); - log_crt(" ID : {}", id); - // log_crt(" Vendor : {}", glGetString(GL_VENDOR)); - // log_crt(" renderer: {}", glGetString(GL_RENDERER)); - // log_crt(" Version : {}", glGetString(GL_VERSION)); - // log_crt(" critical, SVersion: {}", glGetString(GL_SHADING_LANGUAGE_VERSION)); - log_crt(" {}", msg); - log_crt("________________________________________"); -} - #ifdef LIGHT_PLATFORM_WINDOWS dxException::dxException(long hr, const char *file, int line) { diff --git a/modules/renderer/src/gl/graphics_context.cpp b/modules/renderer/src/gl/graphics_context.cpp index 93ed4f7..9ba5c37 100644 --- a/modules/renderer/src/gl/graphics_context.cpp +++ b/modules/renderer/src/gl/graphics_context.cpp @@ -74,7 +74,8 @@ void glGraphicsContext::set_debug_message_callback() switch (severity) { case GL_DEBUG_SEVERITY_HIGH: - // throw glException(source, type, id, message); + // TODO(Light): Add gl exception class + throw std::runtime_error { "gl exception" }; return; case GL_DEBUG_SEVERITY_MEDIUM: