引入日志库(未完成),添加logger.h的todo说明

请注意当前分支下因logger重定义而无法正常编译
InkSoul 2023-10-08 00:32:36 +08:00
parent fc4a073905
commit 28cb57e1db
5 changed files with 103 additions and 14 deletions

View File

@ -1,7 +1,7 @@
### Plumage mini render ### Plumage mini render
基于vulkan API的迷你渲染器 基于vulkan RHI的迷你渲染器
#### 当前特性 #### 当前特性
@ -14,7 +14,7 @@
1. 引入spdlog日志库细化日志正在做 1. 引入spdlog日志库细化日志正在做
2. 重置CMakeLists.txt添加Xmake 的lua脚本 2. 重置CMakeLists.txt添加Xmake 的lua脚本
3. 二次封装vulkan API提供统一的渲染接口 3. 二次封装vulkan RHI提供统一的渲染接口
4. 更换imgui的分支允许dock UI 4. 更换imgui的分支允许dock UI
5. 添加启动UI避免对默认模型的依赖 5. 添加启动UI避免对默认模型的依赖
6. 添加obj格式支持 6. 添加obj格式支持

View File

@ -10,7 +10,7 @@ set(KTX_SOURCES
${KTX_DIR}/lib/memstream.c ${KTX_DIR}/lib/memstream.c
${KTX_DIR}/lib/filestream.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) if(WIN32)
target_link_libraries(base ${Vulkan_LIBRARY} ${WINLIBS}) target_link_libraries(base ${Vulkan_LIBRARY} ${WINLIBS})
else(WIN32) else(WIN32)

71
base/logger.h 100644
View File

@ -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__); \
}

View File

@ -33,8 +33,7 @@ function(buildHomework HOMEWORK_NAME)
add_executable(${HOMEWORK_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES} add_executable(${HOMEWORK_NAME} WIN32 ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES}
"render/glTFModel.h" "render/glTFModel.h"
"render/glTFModel.cpp" "render/glTFModel.cpp"
)
)
target_link_libraries(${HOMEWORK_NAME} base ${Vulkan_LIBRARY} ${WINLIBS}) target_link_libraries(${HOMEWORK_NAME} base ${Vulkan_LIBRARY} ${WINLIBS})
else(WIN32) else(WIN32)
add_executable(${HOMEWORK_NAME} ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES}) add_executable(${HOMEWORK_NAME} ${MAIN_CPP} ${SOURCE} ${MAIN_HEADER} ${SHADERS_GLSL} ${SHADERS_HLSL} ${README_FILES})

View File

@ -14,6 +14,7 @@
#include "render.h" #include "render.h"
#include "logger.h"
//#include "VulkanUtils.hpp" //#include "VulkanUtils.hpp"
//#include "assetLoader.h" //#include "assetLoader.h"
@ -191,21 +192,27 @@ PlumageRender::PlumageRender()
void PlumageRender::loadScene(std::string filename) 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); models.scene.destroy(device);
animationIndex = 0; animationIndex = 0;
animationTimer = 0.0f; animationTimer = 0.0f;
auto tStart = std::chrono::high_resolution_clock::now(); auto tStart = std::chrono::high_resolution_clock::now();
models.scene.loadFromFile(filename, vulkanDevice, queue); models.scene.loadFromFile(filename, vulkanDevice, queue);
auto tFileLoad = std::chrono::duration<double, std::milli>(std::chrono::high_resolution_clock::now() - tStart).count(); auto tFileLoad = std::chrono::duration<double, std::milli>(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.setPosition({ 0.0f, 0.0f, -1.0f });
camera.setRotation({ 0.0f, 0.0f, 0.0f }); camera.setRotation({ 0.0f, 0.0f, 0.0f });
} }
void PlumageRender::loadEnvironment(std::string filename) 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) { if (textures.environmentCube.image) {
textures.environmentCube.destroy(); textures.environmentCube.destroy();
textures.irradianceCube.destroy(); textures.irradianceCube.destroy();
@ -221,13 +228,15 @@ PlumageRender::PlumageRender()
if (_access(assetpath.c_str(),0) != 0) { 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::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"); system("pause");
//exit(-1); //exit(-1);
} }
else { else {
std::string msg = "asset path get " + assetpath; 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); readDirectory(assetpath + "environments", "*.ktx", environments, false);
@ -243,7 +252,9 @@ PlumageRender::PlumageRender()
sceneFile = args[i]; sceneFile = args[i];
} }
else { 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) { if (std::string(args[i]).find(".ktx") != std::string::npos) {
@ -252,7 +263,9 @@ PlumageRender::PlumageRender()
envMapFile = args[i]; envMapFile = args[i];
} }
else { 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) // Scene (matrices and environment maps)
{ {
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = { std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
{ 0, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 1, VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, nullptr }, { 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 tEnd = std::chrono::high_resolution_clock::now();
auto tDiff = std::chrono::duration<double, std::milli>(tEnd - tStart).count(); auto tDiff = std::chrono::duration<double, std::milli>(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 // generate BRDF integration map for roughness/NdotV
@ -1454,7 +1470,10 @@ PlumageRender::PlumageRender()
auto tEnd = std::chrono::high_resolution_clock::now(); auto tEnd = std::chrono::high_resolution_clock::now();
auto tDiff = std::chrono::duration<double, std::milli>(tEnd - tStart).count(); auto tDiff = std::chrono::duration<double, std::milli>(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 // Prepare and initialize uniform buffer containing shader uniforms