#pragma once #include class renderer; class render_target; class texture; class application; extern bool g_is_running; extern bool g_exit_requested; extern application* g_app_instance; struct window_params { std::string title; int width; int height; bool fullscreen; bool borderless; bool resizable; bool minimized; bool maximized; bool hi_dpi; bool always_on_top; }; class CORE_API application { public: application() { g_app_instance = this; } virtual ~application() = default; application(const application&) = delete; application(application&&) = delete; static application* get() { return g_app_instance; } virtual void init(const window_params& in_window_params, int argc, char** argv); virtual void shutdown(); void request_exit(); virtual void draw_gui() = 0; virtual void tick(float delta_time) {} protected: std::shared_ptr async_spdlog_; };