comments translated for blenloader files

This commit is contained in:
2003-04-26 18:01:01 +00:00
parent 3e4203e397
commit 9508bb0d41
2 changed files with 175 additions and 263 deletions

View File

@@ -1,4 +1,7 @@
/**
/* writefile.c
*
* .blend file writing
*
* $Id$
*
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
@@ -28,52 +31,54 @@
* Contributor(s): none yet.
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
* .blend file writing
*/
/*
MIXED MODEL
FILEFORMAAT: IFF-achtige structuur (niet meer IFF compatible!)
FILEFORMAT: IFF-style structure (but not IFF compatible!)
start file:
BLENDER_V100 12 bytes (versie 1.00)
V = big endian, v = little endian
_ = 4 byte pointer, - = 8 byte pointer
datablokken: zie ook struct BHead
datablocks: also see struct BHead
<bh.code> 4 chars
<bh.len> int, len data achter BHead
<bh.old> void, oude pointer
<bh.len> int, len data after BHead
<bh.old> void, old pointer
<bh.SDNAnr> int
<bh.nr> int, bij array: aantal structs
<bh.nr> int, in case of array: amount of structs
data
...
...
Vrijwel alle data in blender zijn structs. Elke struct krijgt
een BHead header mee. Met BHead kan de struktuur weer worden
gelinkt en wordt met StructDNA vergeleken.
Almost all data in Blender are structures. Each struct saved
gets a BHead header. With BHead the struct can be linked again
and compared with StructDNA .
SCHRIJVEN
WRITE
Voorkeur volgorde schrijven: (waarschijnlijk mag ook door
elkaar, maar waarom zou je? ) In ieder geval MOET indirekte data
ACHTER LibBlock
Preferred writing order: (not really a must, but why would you do it random?)
Any case: direct data is ALWAYS after the lib block
(Locale data)
- voor elk LibBlock
- schrijf LibBlock
- schrijf bijhorende direkte data
(Externe data)
(Local file data)
- for each LibBlock
- write LibBlock
- write associated direct data
(External file data)
- per library
- schrijf library block
- write library block
- per LibBlock
- schrijf ID LibBlock
- schrijf FileGlobal (een selectie uit globale data )
- schrijf SDNA
- schrijf USER als aangegeven (~/.B.blend)
- write the ID of LibBlock
- write FileGlobal (some global vars)
- write SDNA
- write USER if filename is ~/.B.blend
*/
/* for version 2.2+
Important to know is that 'streaming' has been added to files, for Blender Publisher
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -399,7 +404,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
if(adr==0 || nr==0) return;
/* BHead vullen met data */
/* init BHead */
bh.code= filecode;
bh.old= adr;
bh.nr= nr;
@@ -419,7 +424,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
mywrite(wd, adr, bh.len);
}
static void writedata(WriteData *wd, int filecode, int len, void *adr) /* geen struct */
static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not use for structs */
{
BHead bh;
@@ -429,7 +434,7 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr) /* geen s
len+= 3;
len-= ( len % 4);
/* BHead vullen met data */
/* init BHead */
bh.code= filecode;
bh.old= adr;
bh.nr= 1;
@@ -446,7 +451,7 @@ static void write_scriptlink(WriteData *wd, ScriptLink *slink)
writedata(wd, DATA, sizeof(short)*slink->totscript, slink->flag);
}
static void write_renderinfo(WriteData *wd) /* alleen voor renderdaemon */
static void write_renderinfo(WriteData *wd) /* for renderdaemon */
{
Scene *sce;
int data[8];
@@ -729,10 +734,10 @@ static void write_objects(WriteData *wd, ListBase *idbase)
ob= idbase->first;
while(ob) {
if(ob->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_OB, "Object", 1, ob);
/* alle direkte data */
/* direct data */
writedata(wd, DATA, sizeof(void *)*ob->totcol, ob->mat);
write_effects(wd, &ob->effect);
write_properties(wd, &ob->prop);
@@ -759,10 +764,10 @@ static void write_vfonts(WriteData *wd, ListBase *idbase)
vf= idbase->first;
while(vf) {
if(vf->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_VF, "VFont", 1, vf);
/* alle direkte data */
/* direct data */
if (vf->packedfile) {
pf = vf->packedfile;
@@ -783,10 +788,10 @@ static void write_ipos(WriteData *wd, ListBase *idbase)
ipo= idbase->first;
while(ipo) {
if(ipo->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_IP, "Ipo", 1, ipo);
/* alle direkte data */
/* direct data */
icu= ipo->curve.first;
while(icu) {
writestruct(wd, DATA, "IpoCurve", 1, icu);
@@ -813,10 +818,10 @@ static void write_keys(WriteData *wd, ListBase *idbase)
key= idbase->first;
while(key) {
if(key->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_KE, "Key", 1, key);
/* alle direkte data */
/* direct data */
kb= key->block.first;
while(kb) {
writestruct(wd, DATA, "KeyBlock", 1, kb);
@@ -836,10 +841,10 @@ static void write_cameras(WriteData *wd, ListBase *idbase)
cam= idbase->first;
while(cam) {
if(cam->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_CA, "Camera", 1, cam);
/* alle direkte data */
/* direct data */
write_scriptlink(wd, &cam->scriptlink);
}
@@ -855,10 +860,10 @@ static void write_mballs(WriteData *wd, ListBase *idbase)
mb= idbase->first;
while(mb) {
if(mb->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_MB, "MetaBall", 1, mb);
/* alle direkte data */
/* direct data */
writedata(wd, DATA, sizeof(void *)*mb->totcol, mb->mat);
ml= mb->elems.first;
@@ -879,17 +884,17 @@ static void write_curves(WriteData *wd, ListBase *idbase)
cu= idbase->first;
while(cu) {
if(cu->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_CU, "Curve", 1, cu);
/* alle direkte data */
/* direct data */
writedata(wd, DATA, sizeof(void *)*cu->totcol, cu->mat);
if(cu->vfont) {
writedata(wd, DATA, cu->len+1, cu->str);
}
else {
/* is ook volgorde van inlezen */
/* is also the order of reading */
nu= cu->nurb.first;
while(nu) {
writestruct(wd, DATA, "Nurb", 1, nu);
@@ -935,10 +940,10 @@ static void write_meshs(WriteData *wd, ListBase *idbase)
mesh= idbase->first;
while(mesh) {
if(mesh->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_ME, "Mesh", 1, mesh);
/* alle direkte data */
/* direct data */
writedata(wd, DATA, sizeof(void *)*mesh->totcol, mesh->mat);
writestruct(wd, DATA, "MVert", mesh->totvert, mesh->mvert);
write_dverts(wd, mesh->totvert, mesh->dvert);
@@ -960,7 +965,7 @@ static void write_images(WriteData *wd, ListBase *idbase)
ima= idbase->first;
while(ima) {
if(ima->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_IM, "Image", 1, ima);
if (ima->packedfile) {
@@ -980,10 +985,10 @@ static void write_textures(WriteData *wd, ListBase *idbase)
tex= idbase->first;
while(tex) {
if(tex->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_TE, "Tex", 1, tex);
/* alle direkte data */
/* direct data */
if(tex->plugin) writestruct(wd, DATA, "PluginTex", 1, tex->plugin);
if(tex->coba) writestruct(wd, DATA, "ColorBand", 1, tex->coba);
if(tex->env) writestruct(wd, DATA, "EnvMap", 1, tex->env);
@@ -1000,7 +1005,7 @@ static void write_materials(WriteData *wd, ListBase *idbase)
ma= idbase->first;
while(ma) {
if(ma->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_MA, "Material", 1, ma);
for(a=0; a<8; a++) {
@@ -1021,7 +1026,7 @@ static void write_worlds(WriteData *wd, ListBase *idbase)
wrld= idbase->first;
while(wrld) {
if(wrld->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_WO, "World", 1, wrld);
for(a=0; a<8; a++) {
@@ -1042,10 +1047,10 @@ static void write_lamps(WriteData *wd, ListBase *idbase)
la= idbase->first;
while(la) {
if(la->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_LA, "Lamp", 1, la);
/* alle direkte data */
/* direct data */
for(a=0; a<8; a++) {
if(la->mtex[a]) writestruct(wd, DATA, "MTex", 1, la->mtex[a]);
}
@@ -1063,10 +1068,10 @@ static void write_lattices(WriteData *wd, ListBase *idbase)
lt= idbase->first;
while(lt) {
if(lt->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_LT, "Lattice", 1, lt);
/* alle direkte data */
/* direct data */
writestruct(wd, DATA, "BPoint", lt->pntsu*lt->pntsv*lt->pntsw, lt->def);
}
lt= lt->id.next;
@@ -1081,10 +1086,10 @@ static void write_ikas(WriteData *wd, ListBase *idbase)
ika= idbase->first;
while(ika) {
if(ika->id.us>0) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_IK, "Ika", 1, ika);
/* alle direkte data */
/* direct data */
li= ika->limbbase.first;
while(li) {
writestruct(wd, DATA, "Limb", 1, li);
@@ -1107,10 +1112,10 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
sce= scebase->first;
while(sce) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_SCE, "Scene", 1, sce);
/* alle direkte data */
/* direct data */
base= sce->base.first;
while(base) {
writestruct(wd, DATA, "Base", 1, base);
@@ -1124,7 +1129,7 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
if(ed) {
writestruct(wd, DATA, "Editing", 1, ed);
/* ook schrijfflags op nul */
/* reset write flags too */
WHILE_SEQ(&ed->seqbase) {
if(seq->strip) seq->strip->done= 0;
writestruct(wd, DATA, "Sequence", 1, seq);
@@ -1133,7 +1138,7 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
WHILE_SEQ(&ed->seqbase) {
if(seq->strip && seq->strip->done==0) {
/* strip wegschrijven met done op 0 ivm readfile */
/* write strip with 'done' at 0 because readfile */
if(seq->plugin) writestruct(wd, DATA, "PluginSeq", 1, seq->plugin);
@@ -1172,10 +1177,10 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
sc= scrbase->first;
while(sc) {
/* schrijf LibData */
/* write LibData */
writestruct(wd, ID_SCR, "Screen", 1, sc);
/* alle direkte data */
/* direct data */
sv= sc->vertbase.first;
while(sv) {
writestruct(wd, DATA, "ScrVert", 1, sv);
@@ -1229,7 +1234,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase)
oops= oopsn;
}
/* NA de cleanup, ivm listbase! */
/* ater cleanup, because of listbase! */
writestruct(wd, DATA, "SpaceOops", 1, so);
oops= so->oops.first;
@@ -1276,7 +1281,7 @@ static void write_libraries(WriteData *wd, Main *main)
a=tot= set_listbasepointers(main, lbarray);
/* test: wordt lib nog gebruikt */
/* test: is lib being used */
foundone= 0;
while(tot--) {
id= lbarray[tot]->first;
@@ -1541,7 +1546,7 @@ static int write_file_handle(int handle, int write_user_block, int write_flags)
write_userdef(wd);
}
/* dna als laatste i.v.m. (nog te schrijven) test op welke gebruikt zijn */
/* dna as last, because (to be implemented) test for which structs are written */
writedata(wd, DNA1, wd->sdna->datalen, wd->sdna->data);
data= ENDB;