Blender源码结构层级记录
首先一上来当然是官方的源码结构说明:https://wiki.blender.org/wiki/Source/File_Structure
我之前看的时候还是2.83版本,以下以2.83为例。
源码层级结构

在整个源码的结构中,我们最关心的,只有三个文件夹。分别是 extern、intern、source。其他其实不用关心。
首先先介绍我们不怎么关心的几个文件夹里面主要的内容。
暂时不关心的源码目录
build_files
是为了编译而准备的一些脚本命令,包括项目是否最新、编译配置等,暂时不关心。
doc
用于生成当前版本blender文档相关的工具(包括c++文档、python API文档),以及一些blender内数据结构的说明。blender使用doxygen生成c++文档,使用sphinx生成python文档。
release
预先准备的资源,比如内置的插件、主题等,在编完之后其中的部分资源直接拷贝到编译完的项目中。
tests
顾名思义,blender的所有单元测试都在这个目录下。

着重关心的源码
上面这一些项目可以先不关心,它们对我们理解、分析blender源码没有什么影响。
下面看blender源码中最重要的三个部分: extern、intern、source 。
在这三个部分中,简单介绍一下分别是干嘛的。
extern
blender依赖的第三方库的官方版本,blender只使用,不维护。其中目前涉及到24个外部项目,主要是一些音频库、图形算法库、图形渲染库、常用数据结构库、单元测试库以及其他一些必要的库。
intern
blender使用的一些内部的库(一部分是对第三方库的魔改版本),由blender自己维护代码;目测这个部分的代码,是第二重要的代码;
source
blender自己的核心代码,虽然intern也是核心代码,但是intern内的代码大部分还是外部的开源库的。而这部分代码是完全的blender自己搭建,平地起高楼,目测是最重要的代码。而在其中,还分成三个部分: blender、creator、tools

source\blender
blender特有的一些代码,其中包含了非常多的、最核心的blender实现,也是理解源码最重要的部分;关于这个部分的介绍,下面一个章节会详细介绍。
source\creator
作者说之后会移动到 blender\source\blender 中,这部分代码实际是blender的主入口代码,在这个模块中,通过对blender\source\blender 中基础接口的调用,做了子模块的配置、入参解析以及各种事件循环的调用。
source\tools
tools 下面是一个独立的git仓库(https://wiki.blender.org/wiki/Tools/Blender_Tools_Repo)
如果要理解整个结构,这部分代码其实也不用太关心。包含内容为构建 Blender 不需要但开发人员可能会发现有用的工具,包括:
1. 用于对代码进行样式、拼写检查的实用脚本。
2. 用于代码库分析的实用脚本,例如创建信用。
3. 第三方应用程序、IDE 的配置。
4. 比如对于删除代码中的一些尾随空格以及BOM,使用python3 source/tools/utils_maintenance/trailing_space_clean.py
比如对于要检查一个blend文件中的DNA结构,使用
source/tools/utils/blend2json.py
具体的使用方式就不记录了,有需要使用工具了去找一圈就行。下面粗略记录工作的类型,个人觉得最主要的只有代码规范和源码检查类。

代码规范与其他类
主要在 source/tools/utils/ 以及 source/tools/utils_maintenance/ 中,涉及到包括代码整理、代码规范等等python脚本
源码检查类
主要位于source/tools/check_source/
用于检查代码拼写,是否有没有使用的定义,头文件重复等等
可执行项目检查类
主要位于source/tools/check_blender_release/
检查版本,查看模块等
编译配置类
主要位于source/tools/utils_ide/ 和 source/tools/utils_build/
其中提供了QtCreator的项目配置,以及cmake编译选项;
文档类
主要位于source/tools/utils_doc/
所以到这边为止,对blender源码的结构至少有一个大概的感觉了。
blender自己的核心实现在 source/blender 中。