Godot 4 源码分析 - 初探

文章指导如何从GitHub获取Godot引擎源码,使用git和SCons进行编译,特别介绍了在Windows平台下生成VS解决方案及编译细节。作者实践了修改启动界面Logo的过程,展示了对二进制图像数据的操作与处理。

准备研究GoDot 4源码。

源码下载

获取源代码

进入 SCons 构建系统并编译 Godot 之前,你需要将 Godot 的源代码下载到本地。

源代码位于 GitHub 上, 虽然你可以通过网站手动下载它, 但是通常你希望通过 git 版本控制系统来下载.

如果你是为了做贡献或拉动请求而进行编译,你应该遵循拉取请求工作流中的说明。

如果你还不太了解 git,在各种网站上都有大量的 Git 教程

通常,你需要安装 git 和/或其他带有 git 的 GUI 客户端。

之后,要获得最新版本的 Godot 源代码(不稳定的 master 分支),可以使用 git clone

如果你使用 git 命令行,可以通过在终端输入下列命令来完成:

git clone https://github.com/godotengine/godot.git
# You can add the --depth 1 argument to omit the commit history.
# Faster, but not all Git operations (like blame) will work.

要获取稳定版本的源代码,请访问源代码发布页面然后单击所需发行版的链接。然后,你可以从页面上的下载链接下载并解压源代码。

使用 git 时你还可以通过在 --branch (或者 -b )参数后指定分支或者标签,来克隆稳定版本:

# Clone the continuously maintained stable branch (`3.x` as of writing).
git clone https://github.com/godotengine/godot.git -b 3.x

# Clone the `3.2.3-stable` tag. This is a fixed revision that will never change.
git clone https://github.com/godotengine/godot.git -b 3.2.3-stable

此外,你可以通过 git 在各个主要版本的分支间进行切换。

获取到 Godot 的源代码之后,你就可以继续编译 Godot 了。

编译运行

采用scons进行编译,可以直接使用cd到godot源码目录:

scons platform=windows

或者使用cpu多线程进行编译:

scons -j6 platform=windows

编译完成后,会在godot\bin目录下生成基于当前平台的一个exe程序,这个程序一般是godot.windows.tools.64,带有tools的,如果你是32或者64想打包32,可以直接加修饰词:

scons platform=windows bits=32

默认打包是debug+tools,如果想要打包其他的配置,可以使用:

target=release_debug
target=release
target=debug

三种作为scons构建的修饰词。

至此这里是使用scons构建基于windows平台的exe程序。

我的一个小目标是研究godot源码,妄想对引擎进行拓展和改进,这就需要使用VS进行构建,

需要使用命令生成vs解决方案:

scons p=windows vsproj=yes

 生成结果:

 用VS打开

 以前没怎么用过VS,不过看这个工程是控制台程序,倒也不用考虑太多,先直接运行起来。按F5

改动小试

单步调试可知:godot还是一个正常的windows程序,它定位到main函数进入,初始化,循环,结束。

至于初始化、循环都处理了啥,以后再研究。今天看到既然可以单步调试,那就先改动一点点,看看具体效果。先从Flash界面来处理:

要不要把这个换一下?

先确定是在哪里出来的,单步调试可知

Error err = Main::setup(argv_utf8[0], argc - 1, &argv_utf8[1]);

 进一步,发现获取之处

Ref<Image> splash = memnew(Image(boot_splash_png));
...
RenderingServer::get_singleton()->set_boot_image(splash, boot_bg_color, false);

其中,boot_splash_png定义在splash.gen.h中

稍一研究,这就是PGN图像的二进制格式数据。为了检验,可以直接保存成图像来看一下。Godot中实现了各种格式素材IO,就象这个Image,有个Image.cpp/h专门处理。难怪代码这么多。

Ref<Image> splash = memnew(Image(boot_splash_png));
splash->save_png("D:/1.png");

保存后的打开D:/1.png,是这效果。

再在底色(static const Color boot_splash_bg_color = Color(0.14, 0.14, 0.14))基础上就看到LOGO效果。

根据原LOGO图大小,做一个自己的LOGO图片

 

 生成数据字符串

	DWORD dwFileSize = 0;
	BYTE * bytes = THelper::File::GetBinaryFileContent(L"D:\\BaiduNetdiskDownload\\Godot_DrGraph.png", dwFileSize);
	THelper::Log::SaveDataInfo(bytes, dwFileSize, L"LOGO文件内容", true, 0, L",");
	delete bytes;

 生成结果:

137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 3, 32, 0, 0, 2, 88, 8, 6, 0, 0, 0, 154, 118, 130, 112, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0, 154, 156, 24, 0, 0, 0, 1, 115, 82, 71, 66, 0, 174, 206, 28, 233, 0, 0, 0, 4, 103, 65, 77, 65, 0, 0, 177, 143, 11, 252, 97, 5, 0, 0, 48, 234, 73, 68, 65, 84, 120, 1, 237, 221, 79, 140, 92, 87, 126, 31, 250, 211, 36, 245, 199, 99, 75, 106, 103, 98, 205, 60, 76, 44, 149, 144, 55, 3, 60, 60, 79, 212, 2, 102, 118, 3, 168, 136, 120, 245, 230, 1, 34, 253, 86, 246, 70, 205, 183, 123, 15, 6, 72, 106, 228, 1, 148, 44, 216, 68, 16, 40, 24, 75, 34, 5, 24, 200, 46, 108, 46, 226, 172, 108, 82, 64, 178, 179, 193, 34, 50, 59, 27, 80, 43, 154, 100, 161, 129, 193, 162, 140, 196, 30, 25, 19, 181, 52, 208, 140, 72, 138, 172, 156, 95, 213, 189, 228, 101, 171, 187, 235, 86, 119, 253, 187, 85, 159, 15, 112, 167, 170, 187, 79, 85, 221, 63, 69, 205, 249, 222, 243, 47, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 217, 74, 2, 96, 250, 54, 222, 109, 165, 163, 71, 215, 210, 145, 35, 171, 41, 245, 90, 137, 233, 89, 89, 217, 78, 119, 239, 117, 243, 185, 239, 166, 127, 249, 59, 91, 9, 128, 169, 18, 64, 0, 166, 229, 95, 189, 223, 78, 143, 172, 188, 148, 122, 43, 39, 132, 142, 185, 177, 157, 183, 173, 116, 47, 93, 78, 71, 238, 116, 210, 107, 47, 116, 19, 0, 19, 37, 128, 0, 76, 210, 198, 187, 171, 233, 177, 71, 79, 231, 192, 113, 38, 255, 180, 154, 152, 119, 155, 41, 221, 57, 47, 136, 0, 76, 142, 0, 2, 48, 9, 130, 71, 211, 109, 10, 34, 0, 147, 33, 128, 0, 140, 91, 116, 181, 58, 118, 228, 146, 110, 86, 139, 96, 101, 35, 189, 246, 127, 158, 79, 0, 140, 141, 0, 2, 48, 78, 255, 230, 191, 157, 78, 189, 123, 23, 19, 139, 164, 147, 91, 67, 78, 105, 13, 1, 24, 15, 1, 4, 96, 92, 94, 255, 175, 209, 234, 177, 158, 88, 64, 43, 221, 148, 110, 31, 23, 66, 0, 14, 79, 0, 1, 24, 7, 225, 99, 9, 8, 33, 0, 227, 112, 36, 1, 112, 56, 255, 230, 39, 23, 132, 143, 101, 16, 99, 122, 30, 189, 150, 94, 127, 183, 149, 0, 56, 48, 1, 4, 224, 48, 94, 255, 175, 231, 82, 47, 157, 73, 44, 137, 28, 66, 122, 143, 92, 233, 207, 114, 6, 192, 129, 8, 32, 0, 7, 213, 191, 19, 222, 219, 72, 44, 151, 149, 180, 150, 30, 127, 228, 92, 2, 224, 64, 4, 16, 128, 3, 123, 244, 90, 98, 57, 69, 171, 215, 235, 239, 183, 19, 0, 35, 19, 64, 0, 14, 34, 186, 94, 89, 231, 99, 201, 173, 104, 5, 1, 56, 0, 1, 4, 96, 84, 131, 65, 200, 235, 137, 101, 215, 78, 255, 250, 39, 235, 9, 128, 145, 8, 32, 0, 35, 123, 164, 173, 245, 131, 190, 35, 233, 229, 4, 192, 72, 4, 16, 128, 145, 233, 122, 195, 125, 109, 99, 65, 0, 70, 35, 128, 0, 140, 226, 95, 69, 101, 83, 235, 7, 21, 247, 86, 78, 36, 0, 106, 19, 64, 0, 70, 113, 44, 169, 108, 242, 48, 221, 176, 0, 70, 34, 128, 0, 140, 100, 229, 197, 4, 15, 91, 77, 255, 250, 39, 107, 9, 128, 90, 4, 16, 128, 186, 6, 171, 95, 171, 104, 242, 101, 43, 169, 157, 0, 168, 69, 0, 1, 168, 235, 232, 49, 225, 131, 221, 245, 82, 43, 1, 80, 203, 177, 4, 64, 61, 71, 123, 171, 113, 171, 123, 30, 181, 159, 249, 245, 212, 122, 234, 145, 254, 243, 213, 199, 142, 166, 213, 199, 135, 223, 95, 234, 126, 114, 103, 199, 227, 237, 180, 125, 235, 110, 218, 254, 252, 94, 98, 68, 71, 4, 16, 128, 186, 4, 16, 128, 218, 142, 180, 210, 156, 90, 123, 250, 241, 116, 225, 119, 191, 158, 198, 37, 66, 73, 4, 146, 120, 188, 153, 31, 183, 126, 246, 249, 224, 119, 159, 222, 22, 80, 118, 247, 108, 2, 160, 22, 1, 4, 160, 174, 94, 110, 1, 89, 153, 207, 22, 144, 139, 127, 253, 243, 126, 235, 197, 165, 239, 127, 35, 141, 67, 180, 166, 148, 45, 42, 59, 245, 195, 72, 14, 34, 239, 229, 199, 206, 135, 191, 76, 91, 31, 253, 74, 40, 73, 43, 171, 9, 128, 90, 4, 16, 128, 5, 177, 249, 254, 118, 191, 43, 214, 203, 223, 158, 108, 93, 120, 237, 107, 143, 247, 183, 19, 223, 124, 50, 149, 43, 50, 70, 40, 217, 250, 232, 243, 116, 253, 195, 207, 114, 40, 249, 236, 126, 183, 46, 0, 216, 73, 0, 1, 88, 32, 17, 66, 38, 29, 64, 118, 83, 134, 146, 245, 226, 179, 203, 64, 114, 57, 239, 79, 4, 18, 0, 40, 9, 32, 0, 11, 36, 42, 251, 209, 21, 43, 6, 162, 207, 82, 53, 144, 108, 223, 186, 151, 174, 126, 240, 105, 191, 117, 36, 2, 18, 0, 203, 205, 52, 188, 0, 11, 102, 222, 198, 99, 172, 62, 118, 164, 31, 68, 98, 124, 202, 199, 103, 255, 143, 254, 99, 116, 21, 3, 96, 57, 105, 1, 1, 88, 48, 117, 166, 224, 157, 149, 50, 140, 196, 22, 227, 68, 54, 223, 255, 184, 223, 77, 203, 152, 17, 128, 229, 161, 5, 4, 96, 129, 196, 204, 85, 179, 238, 126, 85, 87, 236, 235, 198, 247, 158, 78, 55, 254, 191, 111, 105, 21, 1, 88, 34, 2, 8, 192, 2, 105, 106, 37, 62, 90, 68, 174, 253, 65, 43, 189, 123, 234, 159, 222, 31, 200, 14, 192, 98, 18, 64, 0, 22, 200, 185, 220, 162, 208, 100, 49, 112, 61, 90, 67, 162, 85, 68, 16, 1, 88, 76, 2, 8, 192, 130, 136, 10, 251, 94, 139, 7, 54, 77, 28, 71, 25, 68, 116, 205, 2, 88, 44, 2, 8, 192, 130, 104, 122, 235, 199, 110, 34, 136, 68, 215, 172, 8, 35, 139, 18, 174, 0, 150, 157, 0, 2, 176, 0, 34, 124, 44, 114, 5, 61, 90, 119, 162, 53, 228, 220, 247, 126, 43, 1, 208, 108, 2, 8, 64, 195, 157, 248, 230, 19, 105, 99, 73, 42, 230, 229, 172, 89, 90, 67, 0, 154, 75, 0, 1, 104, 176, 254, 88, 137, 255, 251, 159, 164, 101, 18, 199, 172, 53, 4, 160, 185, 4, 16, 128, 134, 26, 140, 143, 120, 174, 191, 184, 223, 50, 210, 26, 2, 208, 76, 2, 8, 64, 3, 197, 106, 231, 87, 126, 239, 153, 165, 175, 124, 199, 241, 91, 59, 4, 160, 89, 4, 16, 128, 6, 186, 244, 127, 253, 147, 254, 154, 25, 68, 24, 59, 218, 159, 37, 75, 151, 44, 128, 102, 16, 64, 0, 26, 38, 42, 219, 39, 190, 245, 68, 226, 97, 209, 37, 235, 194, 239, 126, 61, 1, 48, 223, 4, 16, 128, 6, 137, 240, 161, 187, 209, 222, 206, 124, 231, 171, 253, 46, 89, 209, 42, 2, 192, 124, 18, 64, 0, 26, 32, 198, 124, 8, 31, 245, 68, 215, 180, 107, 191, 223, 18, 66, 0, 230, 148, 0, 2, 48, 231, 34, 124, 92, 251, 253, 231, 132, 143, 17, 8, 33, 0, 243, 235, 88, 2
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值