Blender源碼結(jié)構(gòu)層級(jí)記錄
首先一上來(lái)當(dāng)然是官方的源碼結(jié)構(gòu)說(shuō)明:https://wiki.blender.org/wiki/Source/File_Structure
我之前看的時(shí)候還是2.83版本,以下以2.83為例。
源碼層級(jí)結(jié)構(gòu)

在整個(gè)源碼的結(jié)構(gòu)中,我們最關(guān)心的,只有三個(gè)文件夾。分別是?extern、intern、source。其他其實(shí)不用關(guān)心。
首先先介紹我們不怎么關(guān)心的幾個(gè)文件夾里面主要的內(nèi)容。
暫時(shí)不關(guān)心的源碼目錄
build_files
是為了編譯而準(zhǔn)備的一些腳本命令,包括項(xiàng)目是否最新、編譯配置等,暫時(shí)不關(guān)心。
doc
用于生成當(dāng)前版本blender文檔相關(guān)的工具(包括c++文檔、python?API文檔),以及一些blender內(nèi)數(shù)據(jù)結(jié)構(gòu)的說(shuō)明。blender使用doxygen生成c++文檔,使用sphinx生成python文檔。
release
預(yù)先準(zhǔn)備的資源,比如內(nèi)置的插件、主題等,在編完之后其中的部分資源直接拷貝到編譯完的項(xiàng)目中。
tests
顧名思義,blender的所有單元測(cè)試都在這個(gè)目錄下。

著重關(guān)心的源碼
上面這一些項(xiàng)目可以先不關(guān)心,它們對(duì)我們理解、分析blender源碼沒(méi)有什么影響。
下面看blender源碼中最重要的三個(gè)部分:?extern、intern、source?。
在這三個(gè)部分中,簡(jiǎn)單介紹一下分別是干嘛的。
extern
blender依賴的第三方庫(kù)的官方版本,blender只使用,不維護(hù)。其中目前涉及到24個(gè)外部項(xiàng)目,主要是一些音頻庫(kù)、圖形算法庫(kù)、圖形渲染庫(kù)、常用數(shù)據(jù)結(jié)構(gòu)庫(kù)、單元測(cè)試庫(kù)以及其他一些必要的庫(kù)。
intern
blender使用的一些內(nèi)部的庫(kù)(一部分是對(duì)第三方庫(kù)的魔改版本),由blender自己維護(hù)代碼;目測(cè)這個(gè)部分的代碼,是第二重要的代碼;
source
blender自己的核心代碼,雖然intern也是核心代碼,但是intern內(nèi)的代碼大部分還是外部的開(kāi)源庫(kù)的。而這部分代碼是完全的blender自己搭建,平地起高樓,目測(cè)是最重要的代碼。而在其中,還分成三個(gè)部分:?blender、creator、tools?

source\blender
blender特有的一些代碼,其中包含了非常多的、最核心的blender實(shí)現(xiàn),也是理解源碼最重要的部分;關(guān)于這個(gè)部分的介紹,下面一個(gè)章節(jié)會(huì)詳細(xì)介紹。
source\creator
作者說(shuō)之后會(huì)移動(dòng)到?blender\source\blender?中,這部分代碼實(shí)際是blender的主入口代碼,在這個(gè)模塊中,通過(guò)對(duì)blender\source\blender?中基礎(chǔ)接口的調(diào)用,做了子模塊的配置、入?yún)⒔馕鲆约案鞣N事件循環(huán)的調(diào)用。
source\tools
tools?下面是一個(gè)獨(dú)立的git倉(cāng)庫(kù)(https://wiki.blender.org/wiki/Tools/Blender_Tools_Repo)
如果要理解整個(gè)結(jié)構(gòu),這部分代碼其實(shí)也不用太關(guān)心。包含內(nèi)容為構(gòu)建?Blender?不需要但開(kāi)發(fā)人員可能會(huì)發(fā)現(xiàn)有用的工具,包括:
1.? 用于對(duì)代碼進(jìn)行樣式、拼寫檢查的實(shí)用腳本。
2.? 用于代碼庫(kù)分析的實(shí)用腳本,例如創(chuàng)建信用。
3.? 第三方應(yīng)用程序、IDE?的配置。
4.? 比如對(duì)于刪除代碼中的一些尾隨空格以及BOM,使用python3?source/tools/utils_maintenance/trailing_space_clean.py?
比如對(duì)于要檢查一個(gè)blend文件中的DNA結(jié)構(gòu),使用
source/tools/utils/blend2json.py
具體的使用方式就不記錄了,有需要使用工具了去找一圈就行。下面粗略記錄工作的類型,個(gè)人覺(jué)得最主要的只有代碼規(guī)范和源碼檢查類。

代碼規(guī)范與其他類
主要在?source/tools/utils/??以及?source/tools/utils_maintenance/??中,涉及到包括代碼整理、代碼規(guī)范等等python腳本
源碼檢查類
主要位于source/tools/check_source/
用于檢查代碼拼寫,是否有沒(méi)有使用的定義,頭文件重復(fù)等等
可執(zhí)行項(xiàng)目檢查類
主要位于source/tools/check_blender_release/
檢查版本,查看模塊等
編譯配置類
主要位于source/tools/utils_ide/?和?source/tools/utils_build/?
其中提供了QtCreator的項(xiàng)目配置,以及cmake編譯選項(xiàng);
文檔類
主要位于source/tools/utils_doc/
所以到這邊為止,對(duì)blender源碼的結(jié)構(gòu)至少有一個(gè)大概的感覺(jué)了。
blender自己的核心實(shí)現(xiàn)在?source/blender?中。