该系列教程源自youtube的cherno的视频-GAME ENGINE series!
视频地址: https://www.youtube.com/watch?v=vtWdgtMo1T4
引擎源代码地址: https://github.com/TheCherno/Hazel
主要内容简介:
将使用第三方库speedlog: https://github.com/gabime/spdlog
当前cmd目录下E:\GitResp\GameEngine\Hazel 执行
git submodule add https://github.com/gabime/spdlog Hazel/vendor/spdlog
将使用Hazel/vendor下放所有的第三方库
按照从零开发游戏引擎系列(二)引擎入口所教的步骤 :
分别给项目Hazel Sandbox都添加头文件目录:(注意每个平台(Debug/Release)都要设置) $(SolutionDir)Hazel\vendor\spdlog\include
配置属性 -> c/c++ -> 常规 -> 附加包含目录
然后开始写日志包装器, 写日志包装器主要是为了以后替换第三方库方便。
增加
Hazel/Log.h
Hazel/Log.cpp
修改
Hazel/EntryPoint.h
Hazel.h
最新目录结构如下:
Hazel/Log.h
#pragma once
#include <memory> // for use shared_ptr<>
#include "Core.h"
#include "spdlog/spdlog.h"
namespace Hazel {
class HAZEL_API Log
{
public:
static void Init();
inline static std::shared_ptr<spdlog::logger>& GetCoreLogger() { return s_CoreLogger; }
inline static std::shared_ptr<spdlog::logger>& GetClientLogger() { return s_ClientLogger; }
private:
static std::shared_ptr<spdlog::logger> s_CoreLogger;//for engine use
static std::shared_ptr<spdlog::logger> s_ClientLogger;//for client app use
};
}
// Core log macros
#define HZ_CORE_TRACE(...) ::Hazel::Log::GetCoreLogger()->trace(__VA_ARGS__)
#define HZ_CORE_INFO(...) ::Hazel::Log::GetCoreLogger()->info(__VA_ARGS__)
#define HZ_CORE_WARN(...) ::Hazel::Log::GetCoreLogger()->warn(__VA_ARGS__)
#define HZ_CORE_ERROR(...) ::Hazel::Log::GetCoreLogger()->error(__VA_ARGS__)
#define HZ_CORE_CRITICAL(...) ::Hazel::Log::GetCoreLogger()->critical(__VA_ARGS__)
// Client log macros
#define HZ_TRACE(...) ::Hazel::Log::GetClientLogger()->trace(__VA_ARGS__)
#define HZ_INFO(...) ::Hazel::Log::GetClientLogger()->info(__VA_ARGS__)
#define HZ_WARN(...) ::Hazel::Log::GetClientLogger()->warn(__VA_ARGS__)
#define HZ_ERROR(...) ::Hazel::Log::GetClientLogger()->error(__VA_ARGS__)
#define HZ_CRITICAL(...) ::Hazel::Log::GetClientLogger()->critical(__VA_ARGS__)
Hazel/Log.cpp
#include "Log.h"
#include "spdlog/sinks/stdout_color_sinks.h"//stdout_color_mt接口需要
namespace Hazel {
std::shared_ptr<spdlog::logger> Log::s_CoreLogger;
std::shared_ptr<spdlog::logger> Log::s_ClientLogger;
void Log::Init() {
spdlog::set_pattern("%^[%T] %n: %v%$");
s_CoreLogger = spdlog::stdout_color_mt("HAZEL");
s_CoreLogger->set_level(spdlog::level::trace);
s_ClientLogger = spdlog::stdout_color_mt("APP");
s_ClientLogger->set_level(spdlog::level::trace);
}
}
Hazel/EntryPoint.h
#pragma once
#ifdef HZ_PLATFORM_WINDOWS
extern Hazel::Application* Hazel::CreateApplication();
int main(int argc, char** argv) {
Hazel::Log::Init();//日志初始化
HZ_CORE_WARN("Engine Init!");//打印日志
HZ_INFO("Hello!");
auto app = Hazel::CreateApplication();
app->Run();
delete app;
return 0;
}
#endif
Hazel.h
#pragma once
#include "Hazel/Application.h"
#include "Hazel/Log.h"//增加Log.h头文件
总结要点:
1.使用github submodule管理第三方库,方便更新
2.依赖的第三方统一放在引擎vendor目录下,方便管理
3.两个日志实例区分开引擎的日志输出和游戏应用的日志输出,避免相互影响
4.使用宏简化日志打印函数,调用方更友好,也使需替换修改的时候管理更可控
注意 改动了Hazel引擎相关代码 重编后时候要把exe目录下的.dll更新成最新编的.dll