From a0a84f30f804e5751a4aac08ab096b917721ed3b Mon Sep 17 00:00:00 2001 From: Anish Bhobe Date: Sat, 15 Jun 2024 17:45:22 +0200 Subject: [PATCH] Improved logging based of fmtlib. --- CMakeLists.txt | 14 ++++---- aster_core/CMakeLists.txt | 36 ++++++++++--------- aster_core/aster.cpp | 19 +++++----- aster_core/context.cpp | 12 +++---- aster_core/glfw_context.h | 2 +- aster_core/logger.h | 76 ++++++++++++++++++++------------------- aster_core/window.cpp | 6 ++-- vcpkg.json | 3 +- 8 files changed, 85 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f986290..5df4c9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,13 +1,13 @@ # CMakeLists.txt ; Top-level CMake project file. -cmake_minimum_required( VERSION 3.13 ) +cmake_minimum_required(VERSION 3.13) -project( Aster VERSION 0.1.0 ) +project(Aster VERSION 0.1.0) -set( CMAKE_CXX_STANDARD 23 ) -set( CMAKE_CXX_STANDARD_REQUIRED ON ) -set( CMAKE_CXX_EXTENSIONS OFF ) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -set( CMAKE_CXX_FLAGS -Wall ) +set(CMAKE_CXX_FLAGS -Wall) -add_subdirectory( "aster_core" ) +add_subdirectory("aster_core") diff --git a/aster_core/CMakeLists.txt b/aster_core/CMakeLists.txt index 42ad996..78d006e 100644 --- a/aster_core/CMakeLists.txt +++ b/aster_core/CMakeLists.txt @@ -1,25 +1,27 @@ # CMakeList.txt ; CMake project for Aster Core -cmake_minimum_required( VERSION 3.13 ) +cmake_minimum_required(VERSION 3.13) -find_package( glm CONFIG REQUIRED ) -find_package( glfw3 CONFIG REQUIRED ) -find_path( SCOTTT_DEBUGBREAK_INCLUDE_DIRS "debugbreak.h" ) -find_package( Vulkan REQUIRED ) +find_package(glm CONFIG REQUIRED) +find_package(glfw3 CONFIG REQUIRED) +find_path(SCOTTT_DEBUGBREAK_INCLUDE_DIRS "debugbreak.h") +find_package(Vulkan REQUIRED) # find_package( VulkanHeaders CONFIG REQUIRED ) -find_package( VulkanMemoryAllocator CONFIG REQUIRED ) +find_package(fmt CONFIG REQUIRED) +find_package(VulkanMemoryAllocator CONFIG REQUIRED) -set( HEADER_FILES "constants.h" "config.h" "logger.h" "global.h" "context.h" "window.h" ) -set( SOURCE_FILES "logger.cpp" "global.cpp" "context.cpp" "window.cpp" ) +set(HEADER_FILES "constants.h" "config.h" "logger.h" "global.h" "context.h" "window.h") +set(SOURCE_FILES "logger.cpp" "global.cpp" "context.cpp" "window.cpp") -add_library( aster_core ${SOURCE_FILES} ${HEADER_FILES} ) -set_property( TARGET aster_core PROPERTY CXX_STANDARD 23 ) +add_library(aster_core ${SOURCE_FILES} ${HEADER_FILES}) +set_property(TARGET aster_core PROPERTY CXX_STANDARD 20) -target_link_libraries( aster_core PRIVATE glm::glm-header-only ) -target_link_libraries( aster_core PRIVATE glfw ) -target_include_directories( aster_core PRIVATE ${SCOTTT_DEBUGBREAK_INCLUDE_DIRS}) -target_link_libraries( aster_core PRIVATE Vulkan::Vulkan Vulkan::Headers GPUOpen::VulkanMemoryAllocator ) +target_link_libraries(aster_core PRIVATE glm::glm-header-only) +target_link_libraries(aster_core PRIVATE glfw) +target_include_directories(aster_core PRIVATE ${SCOTTT_DEBUGBREAK_INCLUDE_DIRS}) +target_link_libraries(aster_core PRIVATE fmt::fmt) +target_link_libraries(aster_core PRIVATE Vulkan::Vulkan Vulkan::Headers GPUOpen::VulkanMemoryAllocator) -add_executable( aster_exe "aster.cpp" ) -target_link_libraries( aster_exe PRIVATE aster_core ) -target_link_libraries( aster_exe PRIVATE glm::glm-header-only ) +add_executable(aster_exe "aster.cpp") +target_link_libraries(aster_exe PRIVATE aster_core) +target_link_libraries(aster_exe PRIVATE glm::glm-header-only) diff --git a/aster_core/aster.cpp b/aster_core/aster.cpp index b82f0b6..b322f75 100644 --- a/aster_core/aster.cpp +++ b/aster_core/aster.cpp @@ -1,18 +1,15 @@ -#include #include "constants.h" #include "glfw_context.h" #include "window.h" -int main(int, char**) { +int main(int, char **) { + GlfwContext *glfw = new GlfwContext(); + Context *context = new Context("Aster", VERSION); + Window *window = new Window("Aster1", context, { 640, 480 }); - GlfwContext* glfw = new GlfwContext(); - Context* context = new Context("Aster", VERSION); - Window* window = new Window("Aster1", context, { 640, 480 }); + delete window; + delete context; + delete glfw; - delete window; - delete context; - delete glfw; - - return 0; + return 0; } - diff --git a/aster_core/context.cpp b/aster_core/context.cpp index 4bf07c9..bf5777b 100644 --- a/aster_core/context.cpp +++ b/aster_core/context.cpp @@ -16,13 +16,13 @@ VKAPI_ATTR b32 VKAPI_CALL Context::debug_callback(VkDebugUtilsMessageSeverityFla if (message_type & MessageTypeBits::eValidation) { if (severity & SeverityBits::eError) - ERROR(_callback_data->pMessage); + ERROR("{}", _callback_data->pMessage); if (severity & SeverityBits::eWarning) - WARN(_callback_data->pMessage); + WARN("{}", _callback_data->pMessage); if (severity & SeverityBits::eInfo) - INFO(_callback_data->pMessage); + INFO("{}", _callback_data->pMessage); if (severity & SeverityBits::eVerbose) - VERBOSE(_callback_data->pMessage); + VERBOSE("{}", _callback_data->pMessage); } return false; @@ -75,7 +75,7 @@ void Context::init(const std::string_view &_app_name, const Version &_app_versio .enabledExtensionCount = cast(vulkan_extensions.size()), .ppEnabledExtensionNames = vulkan_extensions.data(), }); - ERROR_IF(failed(result), "Failed to create Vulkan instance with "s + to_string(result)) + ERROR_IF(failed(result), "Failed to create Vulkan instance with {}", to_string(result)) THEN_CRASH(result) ELSE_INFO("Instance Created."); VULKAN_HPP_DEFAULT_DISPATCHER.init(instance); @@ -83,7 +83,7 @@ void Context::init(const std::string_view &_app_name, const Version &_app_versio // Debug Messenger if (enable_validation_layers) { tie(result, debug_messenger) = instance.createDebugUtilsMessengerEXT(debug_messenger_create_info); - ERROR_IF(failed(result), "Debug Messenger creation failed with "s + to_string(result)) + ERROR_IF(failed(result), "Debug Messenger creation failed with {}", to_string(result)) ELSE_INFO("Debug Messenger Created."); } } diff --git a/aster_core/glfw_context.h b/aster_core/glfw_context.h index d251e1d..90f94e1 100644 --- a/aster_core/glfw_context.h +++ b/aster_core/glfw_context.h @@ -11,7 +11,7 @@ struct GlfwContext { static i32 post_error() noexcept { static const char* error_ = nullptr; const auto code = glfwGetError(&error_); - ERROR("GLFW "s + error_); + ERROR("GLFW {}", error_); return code; } diff --git a/aster_core/logger.h b/aster_core/logger.h index 895c175..3d508f7 100644 --- a/aster_core/logger.h +++ b/aster_core/logger.h @@ -7,6 +7,8 @@ #include "constants.h" #include +#include + #include struct Logger { @@ -55,7 +57,7 @@ struct Logger { template void log(const std::string_view &_message, const char *_loc, u32 _line) const { if (cast(LogLevel) <= minimum_logging_level) { - printf("%s%s %s%s| at %s:%u%s\n", to_color_cstr(), to_cstr(), _message.data(), ANSI_Black, _loc, _line, ANSI_Reset); + fmt::println("{}{} {}{}| at {}:{}{}", to_color_cstr(), to_cstr(), _message.data(), ANSI_Black, _loc, _line, ANSI_Reset); } #if !defined(NDEBUG) if constexpr (LogLevel == LogType::eError) { @@ -67,7 +69,7 @@ struct Logger { template void log_cond(const char *_expr_str, const std::string_view &_message, const char *_loc, u32 _line) const { if (cast(LogLevel) <= minimum_logging_level) { - printf("%s%s (%s) %s%s| at %s:%u%s\n", to_color_cstr(), to_cstr(), _expr_str, _message.data(), ANSI_Black, _loc, _line, ANSI_Reset); + fmt::println("{}{} ({}) {}{}| at {}:{}{}", to_color_cstr(), to_cstr(), _expr_str, _message.data(), ANSI_Black, _loc, _line, ANSI_Reset); } #if !defined(NDEBUG) if constexpr (LogLevel == LogType::eError) { @@ -79,52 +81,52 @@ struct Logger { extern Logger g_logger; -#define ERROR(msg) g_logger.log(msg, __FILE__, __LINE__) -#define WARN(msg) g_logger.log(msg, __FILE__, __LINE__) -#define INFO(msg) g_logger.log(msg, __FILE__, __LINE__) +#define ERROR(...) g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define WARN(...) g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define INFO(...) g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) -#define ERROR_IF(expr, msg) \ +#define ERROR_IF(expr, ...) \ if (cast(expr)) [[unlikely]] \ - g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define WARN_IF(expr, msg) \ + g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define WARN_IF(expr, ...) \ if (cast(expr)) [[unlikely]] \ - g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define INFO_IF(expr, msg) \ + g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define INFO_IF(expr, ...) \ if (cast(expr)) \ - g_logger.log_cond(#expr, msg, __FILE__, __LINE__) + g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) -#define ELSE_IF_ERROR(expr, msg) \ +#define ELSE_IF_ERROR(expr, ...) \ ; \ - else if (cast(expr)) [[unlikely]] g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_IF_WARN(expr, msg) \ + else if (cast(expr)) [[unlikely]] g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_IF_WARN(expr, ...) \ ; \ - else if (cast(expr)) [[unlikely]] g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_IF_INFO(expr, msg) \ + else if (cast(expr)) [[unlikely]] g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_IF_INFO(expr, ...) \ ; \ - else if (cast(expr)) g_logger.log_cond(#expr, msg, __FILE__, __LINE__) + else if (cast(expr)) g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) -#define ELSE_ERROR(msg) \ +#define ELSE_ERROR(...) \ ; \ - else [[unlikely]] g_logger.log(msg, __FILE__, __LINE__) -#define ELSE_WARN(msg) \ + else [[unlikely]] g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_WARN(...) \ ; \ - else [[unlikely]] g_logger.log(msg, __FILE__, __LINE__) -#define ELSE_INFO(msg) \ + else [[unlikely]] g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_INFO(...) \ ; \ - else g_logger.log(msg, __FILE__, __LINE__) + else g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #if !defined(DEBUG_LOG_DISABLED) && !defined(NDEBUG) -#define DEBUG(msg) g_logger.log(msg, __FILE__, __LINE__) -#define DEBUG_IF(expr, msg) \ +#define DEBUG(...) g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define DEBUG_IF(expr, ...) \ if (cast(expr)) \ - g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_IF_DEBUG(expr, msg) \ + g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_IF_DEBUG(expr, ...) \ ; \ - else if (cast(expr)) g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_DEBUG(msg) \ + else if (cast(expr)) g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_DEBUG(...) \ ; \ - else [[unlikely]] g_logger.log(msg, __FILE__, __LINE__) + else [[unlikely]] g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #else // !defined(DEBUG_LOG_DISABLED) @@ -145,16 +147,16 @@ extern Logger g_logger; #if !defined(VERBOSE_LOG_DISABLED) && !defined(NDEBUG) -#define VERBOSE(msg) g_logger.log(msg, __FILE__, __LINE__) -#define VERBOSE_IF(expr, msg) \ +#define VERBOSE(...) g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define VERBOSE_IF(expr, ...) \ if (cast(expr)) \ - g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_IF_VERBOSE(expr, msg) \ + g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_IF_VERBOSE(expr, ...) \ ; \ - else if (cast(expr)) g_logger.log_cond(#expr, msg, __FILE__, __LINE__) -#define ELSE_VERBOSE(msg) \ + else if (cast(expr)) g_logger.log_cond(#expr, fmt::format(__VA_ARGS__), __FILE__, __LINE__) +#define ELSE_VERBOSE(...) \ ; \ - else g_logger.log(msg, __FILE__, __LINE__) + else g_logger.log(fmt::format(__VA_ARGS__), __FILE__, __LINE__) #else // !defined(DEBUG_LOG_DISABLED) diff --git a/aster_core/window.cpp b/aster_core/window.cpp index 2be78ec..9c0e428 100644 --- a/aster_core/window.cpp +++ b/aster_core/window.cpp @@ -24,7 +24,7 @@ Window::Window(const std::string_view& _title, Context* _context, vk::Extent2D _ glfwWindowHint(GLFW_CENTER_CURSOR, GLFW_TRUE); window = glfwCreateWindow(extent.width, extent.height, name.data(), full_screen ? monitor : nullptr, nullptr); - ERROR_IF(window == nullptr, "Window creation failed") ELSE_INFO(std::fmt("Window '%s' created with resolution '%dx%d'", name.data(), extent.width, extent.height)); + ERROR_IF(window == nullptr, "Window creation failed") ELSE_INFO("Window '{}' created with resolution '{}x{}'", name, extent.width, extent.height); if (window == nullptr) { auto code = GlfwContext::post_error(); glfwTerminate(); @@ -38,7 +38,7 @@ Window::Window(const std::string_view& _title, Context* _context, vk::Extent2D _ VkSurfaceKHR surface_; auto result = cast(glfwCreateWindowSurface(cast(_context->instance), window, nullptr, &surface_)); - ERROR_IF(failed(result), "Failed to create Surface with "s + to_string(result)) THEN_CRASH(result) ELSE_INFO("Surface Created"); + ERROR_IF(failed(result), "Failed to create Surface with {}", to_string(result)) THEN_CRASH(result) ELSE_INFO("Surface Created"); surface = vk::SurfaceKHR(surface_); } @@ -74,5 +74,5 @@ Window::~Window() { } monitor = nullptr; - INFO("Window '" + name + "' Destroyed"); + INFO("Window '{}' Destroyed", name); } diff --git a/vcpkg.json b/vcpkg.json index d55b7c7..a4e31a8 100644 --- a/vcpkg.json +++ b/vcpkg.json @@ -3,6 +3,7 @@ "glfw3", "glm", "scottt-debugbreak", - "vulkan-memory-allocator" + "vulkan-memory-allocator", + "fmt" ] }