protected override void Write(EndianBinaryWriter writer) { var start = writer.Position; writer.SeekCurrent(2); writer.Write(MaterialIndex); writer.ScheduleWriteOffset(() => { // Build vif code stream var vif = new VifCodeStreamBuilder(); foreach (var batch in Batches) { writer.WriteObject(batch, vif); } // Write vif code stream var vifCodeStreamStart = writer.Position; writer.WriteObject(vif); var vifCodeStreamEnd = writer.Position; // Calculate and write vif code stream size in the header var vifCodeStreamSize = vifCodeStreamEnd - vifCodeStreamStart; writer.SeekBegin(start); writer.Write(( short )(vifCodeStreamSize / 16)); // Seek back to end of vif code stream writer.SeekBegin(vifCodeStreamEnd); }); writer.Write(UsedNodeCount); writer.Write(( short )0); writer.Write(UsedNodeIndices); writer.Align(16); }
public IOContext(Triangle[] triangles, Vector2[] texCoords, Vector2[] texCoords2, Color[] colors, VifCodeStreamBuilder vif) { Triangles = triangles; TexCoords = texCoords; TexCoords2 = texCoords2; Colors = colors; Vif = vif; }
private void Write(EndianBinaryWriter writer, VifCodeStreamBuilder vif, bool first) { vif.Unpack(Positions); vif.Unpack(Normals); if (first) { vif.ActivateMicro(0x14); } else { vif.ExecuteMicro(); } }