Beispiel #1
0
        void IResData.Save(ResFileSaver saver)
        {
            if (saver.IsSwitch)
            {
                var bufferSize = new BufferSize();
                bufferSize.Size = (uint)Data.Length;

                ((Switch.Core.ResFileSwitchSaver)saver).SaveRelocateEntryToSection(saver.Position, 1, 1, 0, Switch.Core.ResFileSwitchSaver.Section1, "Mesh");
                PosSubMeshesOffset = saver.SaveOffset();
                if (MemoryPool != null)
                {
                    ((Switch.Core.ResFileSwitchSaver)saver).SaveRelocateEntryToSection(saver.Position, 1, 1, 0, Switch.Core.ResFileSwitchSaver.Section4, "Mesh Memory pool");
                }
                ((Switch.Core.ResFileSwitchSaver)saver).SaveMemoryPoolPointer();
                ((Switch.Core.ResFileSwitchSaver)saver).SaveRelocateEntryToSection(saver.Position, 2, 1, 0, Switch.Core.ResFileSwitchSaver.Section1, "Mesh buffer info");
                PosBufferUnkOffset  = saver.SaveOffset();
                PosBufferSizeOffset = saver.SaveOffset();
                saver.Write(SetFaceBufferOffset(saver)); //face buffer
                saver.Write(PrimitiveTypeList.FirstOrDefault(x => x.Value == PrimitiveType).Key, true);
                saver.Write(IndexList.FirstOrDefault(x => x.Value == IndexFormat).Key, true);
                saver.Write(IndexCount);
                saver.Write(FirstVertex);
                saver.Write((ushort)SubMeshes.Count);
                saver.Seek(2);
            }
            else
            {
                saver.Write(PrimitiveType, true);
                saver.Write(IndexFormat, true);
                saver.Write(IndexCount);
                saver.Write((ushort)SubMeshes.Count);
                saver.Seek(2);
                saver.SaveList(SubMeshes);
                saver.Save(IndexBuffer);
                saver.Write(FirstVertex);
            }
        }