From 28cb57e1db20550142c0fac88dd52b8edf4e6a42 Mon Sep 17 00:00:00 2001 From: InkSoul Date: Sun, 8 Oct 2023 00:32:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=95=E5=85=A5=E6=97=A5=E5=BF=97=E5=BA=93?= =?UTF-8?q?=EF=BC=88=E6=9C=AA=E5=AE=8C=E6=88=90=EF=BC=89=EF=BC=8C=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0logger.h=E7=9A=84todo=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 请注意当前分支下因logger重定义而无法正常编译 --- ReadMe.md | 4 +-- base/CMakeLists.txt | 2 +- base/logger.h | 71 +++++++++++++++++++++++++++++++++++++++++++ src/CMakeLists.txt | 3 +- src/render/render.cpp | 37 ++++++++++++++++------ 5 files changed, 103 insertions(+), 14 deletions(-) create mode 100644 base/logger.h diff --git a/ReadMe.md b/ReadMe.md index 18576e3..69c4f75 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -1,7 +1,7 @@ ### Plumage mini render -基于vulkan API的迷你渲染器 +基于vulkan RHI的迷你渲染器 #### 当前特性 @@ -14,7 +14,7 @@ 1. 引入spdlog日志库,细化日志(正在做) 2. 重置CMakeLists.txt,添加Xmake 的lua脚本 -3. 二次封装vulkan API,提供统一的渲染接口 +3. 二次封装vulkan RHI,提供统一的渲染接口 4. 更换imgui的分支,允许dock UI 5. 添加启动UI,避免对默认模型的依赖 6. 添加obj格式支持 diff --git a/base/CMakeLists.txt b/base/CMakeLists.txt index c4ccbc0..2d2f54e 100644 --- a/base/CMakeLists.txt +++ b/base/CMakeLists.txt @@ -10,7 +10,7 @@ set(KTX_SOURCES ${KTX_DIR}/lib/memstream.c ${KTX_DIR}/lib/filestream.c) -add_library(base STATIC ${BASE_SRC} ${KTX_SOURCES}) +add_library(base STATIC ${BASE_SRC} ${KTX_SOURCES} "logger.h") if(WIN32) target_link_libraries(base ${Vulkan_LIBRARY} ${WINLIBS}) else(WIN32) diff --git a/base/logger.h b/base/logger.h new file mode 100644 index 0000000..4794348 --- /dev/null +++ b/base/logger.h @@ -0,0 +1,71 @@ +#pragma once +#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_INFO //Ƽ¼־ļ +#include "spdlog/spdlog.h" +#include "spdlog/sinks/rotating_file_sink.h" + +//ºspdlogѾ壬 ־̨ӡļк +//SPDLOG_DEBUG(...) +//SPDLOG_INFO(...) +//SPDLOG_WARN(...) +//SPDLOG_ERROR(...) +//SPDLOG_CRITICAL(...) + +//º¶壬 ־־ļӡļк + +// TODO: +// عͬһڶε +// Ԥȫд +// Ŀ꣺loggerεʱض +constexpr auto LOGGER_NAME = "rotating render log"; +constexpr auto LOGGER_SAVE_PATH = "logs/rotating.txt"; +//־Ϣ +#define SPDLOG_INFO_FILE(...) \ +auto logger0 = spdlog::get(LOGGER_NAME); \ +if (nullptr == logger0) \ +{ \ + auto rotating_logger = spdlog::rotating_logger_mt(LOGGER_NAME, LOGGER_SAVE_PATH, 1048576 * 5, 3); \ + SPDLOG_LOGGER_INFO(rotating_logger, __VA_ARGS__);\ +} \ +else \ +{ \ + SPDLOG_LOGGER_INFO(logger0, __VA_ARGS__); \ +} +//־ +#define SPDLOG_WARN_FILE(...) \ +SPDLOG_WARN(__VA_ARGS__);\ +auto logger1 = spdlog::get(LOGGER_NAME); \ +if (nullptr == logger1) \ +{ \ + auto rotating_logger = spdlog::rotating_logger_mt(LOGGER_NAME, LOGGER_SAVE_PATH, 1048576 * 5, 3); \ + SPDLOG_LOGGER_WARN(rotating_logger, __VA_ARGS__);\ +} \ +else \ +{ \ + SPDLOG_LOGGER_WARN(logger1, __VA_ARGS__); \ +} +//־ +#define SPDLOG_ERROR_FILE(...) \ +SPDLOG_ERROR(__VA_ARGS__);\ +auto logger2 = spdlog::get(LOGGER_NAME); \ +if (nullptr == logger2) \ +{ \ + auto rotating_logger = spdlog::rotating_logger_mt(LOGGER_NAME, LOGGER_SAVE_PATH, 1048576 * 5, 3); \ + SPDLOG_LOGGER_ERROR(rotating_logger, __VA_ARGS__);\ +} \ +else \ +{ \ + SPDLOG_LOGGER_ERROR(logger2, __VA_ARGS__); \ +} + +#define SPDLOG_CRITICAL_FILE(...) \ +SPDLOG_CRITICAL(__VA_ARGS__);\ +auto logger3 = spdlog::get(LOGGER_NAME); \ +if (nullptr == logger3) \ +{ \ + auto rotating_logger = spdlog::rotating_logger_mt(LOGGER_NAME, LOGGER_SAVE_PATH, 1048576 * 5, 3); \ + SPDLOG_LOGGER_CRITICAL(rotating_logger, __VA_ARGS__);\ +} \ +else \ +{ \ + SPDLOG_LOGGER_CRITICAL(logger3, __VA_ARGS__); \ +} \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5c07d5b..7f2f951 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,8 +33,7 @@ function(buildHomework HOMEWORK_NAME) add_executable(${HOMEWORK_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES} "render/glTFModel.h" "render/glTFModel.cpp" - - ) + ) target_link_libraries(${HOMEWORK_NAME} base ${Vulkan_LIBRARY} ${WINLIBS}) else(WIN32) add_executable(${HOMEWORK_NAME} ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES}) diff --git a/src/render/render.cpp b/src/render/render.cpp index c949dc4..43a3424 100644 --- a/src/render/render.cpp +++ b/src/render/render.cpp @@ -14,6 +14,7 @@ #include "render.h" +#include "logger.h" //#include "VulkanUtils.hpp" //#include "assetLoader.h" @@ -191,21 +192,27 @@ PlumageRender::PlumageRender() void PlumageRender::loadScene(std::string filename) { - std::cout << "Loading scene from " << filename << std::endl; + std::string msg = "Loading scene from " + filename; + SPDLOG_INFO_FILE(msg); + //std::cout << "Loading scene from " << filename << std::endl; models.scene.destroy(device); animationIndex = 0; animationTimer = 0.0f; auto tStart = std::chrono::high_resolution_clock::now(); models.scene.loadFromFile(filename, vulkanDevice, queue); auto tFileLoad = std::chrono::duration(std::chrono::high_resolution_clock::now() - tStart).count(); - std::cout << "Loading took " << tFileLoad << " ms" << std::endl; + msg = "Loading took " + std::to_string(tFileLoad) + " ms"; + SPDLOG_INFO_FILE(msg); + //std::cout << "Loading took " << tFileLoad << " ms" << std::endl; camera.setPosition({ 0.0f, 0.0f, -1.0f }); camera.setRotation({ 0.0f, 0.0f, 0.0f }); } void PlumageRender::loadEnvironment(std::string filename) { - std::cout << "Loading environment from " << filename << std::endl; + //std::cout << "Loading environment from " << filename << std::endl; + std::string msg = "Loading environment from " + filename; + SPDLOG_INFO_FILE(msg); if (textures.environmentCube.image) { textures.environmentCube.destroy(); textures.irradianceCube.destroy(); @@ -221,13 +228,15 @@ PlumageRender::PlumageRender() if (_access(assetpath.c_str(),0) != 0) { std::string msg = "Could not locate asset path in \"" + assetpath + "\".\nMake sure binary is run from correct relative directory!"; - std::cerr << msg << std::endl; + SPDLOG_ERROR_FILE(msg); system("pause"); //exit(-1); } else { std::string msg = "asset path get " + assetpath; - std::cout << msg << std::endl; + //std::cout << msg << std::endl; + SPDLOG_INFO_FILE(msg); + } readDirectory(assetpath + "environments", "*.ktx", environments, false); @@ -243,7 +252,9 @@ PlumageRender::PlumageRender() sceneFile = args[i]; } else { - std::cout << "could not load \"" << args[i] << "\"" << std::endl; + std::string msg = "could not load \"" + std::string(args[i]) + "\""; + SPDLOG_ERROR_FILE(msg); + //std::cout << "could not load \"" << args[i] << "\"" << std::endl; } } if (std::string(args[i]).find(".ktx") != std::string::npos) { @@ -252,7 +263,9 @@ PlumageRender::PlumageRender() envMapFile = args[i]; } else { - std::cout << "could not load \"" << args[i] << "\"" << std::endl; + std::string msg = "could not load \"" + std::string(args[i]) + "\""; + SPDLOG_ERROR_FILE(msg); + //std::cout << "could not load \"" << args[i] << "\"" << std::endl; } } } @@ -332,6 +345,7 @@ PlumageRender::PlumageRender() */ // Scene (matrices and environment maps) + { std::vector setLayoutBindings = { { 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, nullptr }, @@ -1196,7 +1210,9 @@ PlumageRender::PlumageRender() auto tEnd = std::chrono::high_resolution_clock::now(); auto tDiff = std::chrono::duration(tEnd - tStart).count(); - std::cout << "Generating cube map with " << numMips << " mip levels took " << tDiff << " ms" << std::endl; + std::string msg = "Generating cube map with " + std::to_string(numMips) + " mip levels took " + std::to_string(tDiff) + " ms"; + SPDLOG_INFO_FILE(msg); + //std::cout << "Generating cube map with " << numMips << " mip levels took " << tDiff << " ms" << std::endl; } } // generate BRDF integration map for roughness/NdotV @@ -1454,7 +1470,10 @@ PlumageRender::PlumageRender() auto tEnd = std::chrono::high_resolution_clock::now(); auto tDiff = std::chrono::duration(tEnd - tStart).count(); - std::cout << "Generating BRDF LUT took " << tDiff << " ms" << std::endl; + + std::string msg = "Generating BRDF LUT took " + std::to_string(tDiff) + " ms"; + SPDLOG_INFO_FILE(msg); + //std::cout << "Generating BRDF LUT took " << tDiff << " ms" << std::endl; } // Prepare and initialize uniform buffer containing shader uniforms