示例#1
0
        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);
        }
示例#2
0
 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();
            }
        }