引入日志库(未完成),添加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
基于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格式支持

View File

@ -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)

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}
"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})

View File

@ -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<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.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<VkDescriptorSetLayoutBinding> 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<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
@ -1454,7 +1470,10 @@ PlumageRender::PlumageRender()
auto tEnd = std::chrono::high_resolution_clock::now();
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