Dev:2.4/Source/Blender File Format

提供: wiki
移動先: 案内検索

Intro

This document tries to give some insight in how a .blend is written and read.

outline

  • important files?
  • general write / read scheme
  • example write step by step
  • example read step by step
  • Additional Resources

important files

Everything in blenloader

read/write scheme

  • write. Convert below code in a more readable state. Obviously, include subsections where needed.
wd= bgnwrite(handle, compare, current, write_flags);

sprintf(buf, "BLENDER%c%c%.3d", (sizeof(void*)==8)?'-':'_', (G.order==B_ENDIAN)?'V':'v', G.version);
mywrite(wd, buf, 12);

write_renderinfo(wd);

if(current==NULL)
write_screens (wd, &G.main->screen);	// no UI save
write_scenes	(wd, &G.main->scene);
write_curves	(wd, &G.main->curve);
write_mballs	(wd, &G.main->mball);
write_images	(wd, &G.main->image);
write_cameras (wd, &G.main->camera);
write_lamps	 (wd, &G.main->lamp);
write_lattices (wd, &G.main->latt);
write_ikas	 (wd, &G.main->ika);
write_vfonts	(wd, &G.main->vfont);
write_ipos	 (wd, &G.main->ipo);
write_keys	 (wd, &G.main->key);
write_worlds	(wd, &G.main->world);
write_texts	 (wd, &G.main->text);
write_sounds	(wd, &G.main->sound);
write_groups	(wd, &G.main->group);
write_armatures(wd, &G.main->armature);
write_actions (wd, &G.main->action);
write_objects (wd, &G.main->object);
write_materials(wd, &G.main->mat);
write_textures (wd, &G.main->tex);
write_meshs	 (wd, &G.main->mesh);
write_libraries(wd, G.main->next);

write_global(wd);
if (write_user_block) {
write_userdef(wd);
}

/* dna as last, because (to be implemented) test for which structs are written */
writedata(wd, DNA1, wd->sdna->datalen, wd->sdna->data);

/* end of file */
memset(&bhead, 0, sizeof(BHead));
bhead.code= ENDB;
mywrite(wd, &bhead, sizeof(BHead));

blo_join_main(&mainlist);
G.main= mainlist.first;

return endwrite(wd);

Example Write Step by Step (in progress) -- JW

' The file write all starts in the int BLO_write_file(char dir, int write_flags, char 'error_r) function. The function is found in writefile.c and declared in BLO_writefile.h. This is the entry point for the file writing code.

  • Here is the call tree for a sample file write. (in progress) -- JW
    • WriteFileCallGraph

Additional Resources