internal static unsafe void Build(Collada form, ModelLinker linker, MDL0Header* header, int length, bool force) { byte* groupAddr = (byte*)header + linker._headerLen + linker._tableLen; byte* dataAddr = groupAddr + linker._groupLen + linker._texLen; //Definitions start here byte* assetAddr = dataAddr + linker._defLen + linker._boneLen + linker._dataLen; linker.Header = header; if (form != null) form.Say("Writing header..."); //Create new model header *header = new MDL0Header(length, linker.Version); MDL0Props* props = header->Properties; if (form != null) form.Say("Writing node table..."); //Write node table, assign node ids WriteNodeTable(linker); if (form != null) form.Say("Writing definitions..."); //Write def table WriteDefs(linker, ref groupAddr, ref dataAddr); //Set format list for each polygon's UVAT groups SetFormatLists(linker); //Write assets first, but only if the model is an import if (linker.Model._isImport) WriteAssets(form, linker, ref assetAddr); //Write groups linker.Write(form, ref groupAddr, ref dataAddr, force); //Write user entries if (linker.Model._userEntries.Count > 0 && linker.Version > 9) { header->_userDataOffset = (int)dataAddr - (int)header; linker.Model._userEntries.Write(header->UserData); } else header->_userDataOffset = 0; //Write textures WriteTextures(linker, ref groupAddr); //Set box min and box max if (linker.Model._isImport) SetBox(linker); //Store group offsets linker.Finish(); //Set new properties *props = new MDL0Props(linker.Version, linker.Model._numFacepoints, linker.Model._numFaces, linker.Model._numNodes, linker.Model._scalingRule, linker.Model._texMtxMode, linker.Model._needsNrmMtxArray, linker.Model._needsTexMtxArray, linker.Model._enableExtents, linker.Model._envMtxMode, linker.Model.BoxMin, linker.Model.BoxMax); }
internal static unsafe void Build(ModelLinker linker, MDL0Header* header, int length, bool force) { Build(null, linker, header, length, force); }