blender 开源3d模型创作软件,基于2.7.8a版本分析blender文件(blender自己产生的文件)读取流程进行分析。
blender文件分析流程,没有画图了
wm_open_mainfile_exec 读取文件入口(这里其实在启动的时候将对应操作已经注册到了对应件操作中去了)。
wm_file_read_opwrap开始读取文件中信息。整个流程基于此函数操作。
WM_file_read 读取文件类容。
WM_cursor_wait 设置鼠标为等待形状
wm_read_exotic 读取文件是否为blender 格式
wm_window_match_init清除掉屏幕处理事件,
BKE_blendfile_read 开始读取文件,
blo_openblenderfile -> filedata_new
blo_decode_and_check->decode_blender_header 读取文件头。
read_file_dna->blo_firstbhead ->get_bhead(这里读取一个bhead8或者bhead4),解析数据类型,并读取整个文件长度,数据在bhead[1]处,并且将头加入到fd->listbase,以供后面使用。
第二部分数据拆分
DNA_sdna_from_data 开始从读取的buffer 中开始拆分。传入data通过指针指定并进行位移。
init_structDNA DNA转换
sdna->nr_names 对应名字个数,抽取的代码中变量名的个数
sdna->names 变量名,貌似有几千个
sdna->nr_types 数据类型?
sdna->nr_structs结构体个数,617个
sdna->structs[nr] 结构体,sp[1] 对应元素个数,结构由两个部分组成,即变量类型+变量名组合。
第三部分,比较新旧结构体变换。
DNA_struct_get_compareflags
blo_read_file_internal 这个正在分析中。。。。。