目标
我这里所说的 “模块” 对应的是Blender源代码中每一个.vcxproj文件。
在上一篇博客《【Blender源代码观察】了解模块的大致分类》中我简单了解了Blender源代码中模块的分类,本篇的目标是:简单了解模块的依赖关系。
主要参考的资料是:Diagram showing code layout of modules(模块布局图) (不过此图和当前最新代码的状态有些出入,我想可能有部分省略,或者其中一些细节已经过时。但是大体的框架我相信是差异不大的)
本篇中,我将依照从 “底部” 到 “上层” 的顺序来学习。
0. Operating System(操作系统提供)
准确来说他们并不属于本篇所讨论的模块。
这些是操作系统本身所提供的。
例如:
- OpenGL图形库
- 标准C
- Windows库
1. Pre-compiled Libraries(预编译好的库)
准确来说他们也并不属于本篇所讨论的模块。
这些库没有源代码,不需要编译,直接使用下载好的库文件。
例如:
- FFmpeg:视频库。A complete, cross-platform solution to record, convert and stream audio and video.
- fftw3:傅里叶变换库。FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST).
- freetype:字体库。FreeType is a freely available software library to render fonts.
2. Utility Libraries from external development(外部开发的通用库)
这些库并非Blender开发者维护的,而是外部的项目。当前包含:
3. Utility Libraries in own development(内部开发的通用库)
也是通用库,不过是Blender开发者自己开发的库。当前包含:
4. General Blender APIs(Blender中的通用接口)
source/blender下大部分都属于这一层级。这些模块之间也相互调用
而其余的部分则属于更高的层级。
5. Render Engine(渲染引擎)
包含:
(图中这一层还有一个gameengine,但是我没找到它)
6. Window Manager(窗口管理者)
只包含一个模块:
7. Tools(编辑器工具)
8. Editor utils(编辑器通用)
9. 编辑器窗口
对应于bf_editor_space开头的多个模块:
他们对应着Blender中的编辑器类型:
10. 应用启动入口
总结
最后,我对原图加上了一些自己的标记,做了一个对我自己来说更有助于我了解模块的大致依赖关系的图:
(图中有些层级的模块我用了原图中的模块,我觉得这对比当前最新的代码应该是有缺失的,但我并不能使用当前最新代码的情况,因为我对其理解不深,并不能分清,例如blender/source/blender/editors 下到底哪些模块属于“编辑器工具”,哪些属于“编辑器通用”?这些待后续理解更深时再更新)其中,两种箭头符号分别表示:
后续问题
1. 未提及的模块
当前未提及的模块包含两部分:
其一是CMakePredefinedTargets下的一些模块
我相信其是为编译所服务的一些内容,不包含实际代码。
待后续确认
其二是不包含与之前博客中分类的其他模块:
待后续研究其作用
2. 更具体的模块信息
当前的主要参考信息Diagram showing code layout of modules(模块布局图)中模块的数量和现在最新的代码不匹配。要么是省略了部分模块,要么是代码已经更新了较大的幅度。
后续待更细致地了解具体每个模块的信息。