void SetIndices(MLOD mlod, GenericRCOLResource.GenericRCOLResource.ChunkReference myIBI, Int32 beforeLength, Int32 afterPos, Int32[] indices) { Int32[] before = new Int32[beforeLength]; Array.Copy(mBuffer, 0, before, 0, before.Length); Int32[] after = new Int32[mBuffer.Length - afterPos]; Array.Copy(mBuffer, afterPos, after, 0, after.Length); mBuffer = new Int32[before.Length + indices.Length + after.Length]; Array.Copy(before, 0, mBuffer, 0, before.Length); Array.Copy(indices, 0, mBuffer, before.Length, indices.Length); Array.Copy(after, 0, mBuffer, before.Length + indices.Length, after.Length); int offset = beforeLength + indices.Length - afterPos; if (offset != 0) { foreach (MLOD.Mesh m in mlod.Meshes.FindAll(m => m.IndexBufferIndex.Equals(myIBI))) { if (m.StartIndex > beforeLength) { m.StartIndex += offset; foreach (MLOD.GeometryState g in m.GeometryStates) { if (g.StartIndex > beforeLength) { g.StartIndex += offset; } } } } } }
public MTST(EventHandler handler, uint nameHash, GenericRCOLResource.GenericRCOLResource.ChunkReference index, IEnumerable <Entry> list) : base(handler, null) { this.nameHash = nameHash; this.index = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, index); this.list = list == null ? null : new EntryList(OnRCOLChanged, list); }
public VBUF(EventHandler handler, uint version, FormatFlags flags, GenericRCOLResource.GenericRCOLResource.ChunkReference swizzleInfo, byte[] buffer) : this(handler) { mVersion = version; mFlags = flags; mSwizzleInfo = swizzleInfo; mBuffer = buffer; }
public LODEntry(EventHandler handler, GenericRCOLResource.GenericRCOLResource.ChunkReference modelLodIndex, LODInfoFlags flags, LODId id, float minZValue, float maxZValue) : base(handler) { mModelLodIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, modelLodIndex); mFlags = flags; mId = id; mMinZValue = minZValue; mMaxZValue = maxZValue; }
private void Parse(Stream s) { BinaryReader br = new BinaryReader(s); mModelLodIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mFlags = (LODInfoFlags)br.ReadUInt32(); mId = (LODId)br.ReadUInt32(); mMinZValue = br.ReadSingle(); mMaxZValue = br.ReadSingle(); }
void Parse(Stream s) { if (_RCOLTag == "GEOM") { index = new BinaryReader(s).ReadInt32(); } else { data = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); } ReadZeros(s, 12); }
public ElementTextureRef(EventHandler handler, DependentList <TGIBlock> ParentTGIBlocks = null, string RCOLTag = "MATD") : this(handler, (FieldType)0, ParentTGIBlocks, RCOLTag) { if (_RCOLTag == "GEOM") { index = 0; } else { data = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler); } }
public ElementTextureRef(EventHandler handler, ElementTextureRef basis, DependentList <TGIBlock> ParentTGIBlocks = null, string RCOLTag = null) : this(handler, basis.field, ParentTGIBlocks ?? basis._ParentTGIBlocks, RCOLTag ?? basis._RCOLTag) { if (_RCOLTag == "GEOM") { index = basis.index; } else { data = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, basis.data); } }
protected override void Parse(Stream s) { BinaryReader br = new BinaryReader(s); string tag = FOURCC(br.ReadUInt32()); if (tag != Tag) { throw new InvalidDataException(string.Format("Invalid Tag read: '{0}'; expected: '{1}'; at 0x{2:X8}", tag, Tag, s.Position)); } mVersion = br.ReadUInt32(); mFlags = (FormatFlags)br.ReadUInt32(); mSwizzleInfo = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mBuffer = new Byte[s.Length - s.Position]; s.Read(mBuffer, 0, mBuffer.Length); }
private bool SetVertices(MLOD mlod, GenericRCOLResource.GenericRCOLResource.ChunkReference myVBI, long beforeLength, int count, VRTF vrtf, IEnumerable <Vertex> vertices, float[] uvscales) { bool okay = true; byte[] before = new byte[beforeLength]; Array.Copy(mBuffer, before, before.Length); long afterPos = Math.Min(mBuffer.Length, beforeLength + (count * vrtf.Stride)); byte[] after = new byte[mBuffer.Length - afterPos]; Array.Copy(mBuffer, afterPos, after, 0, after.Length); long offset = 0; using (MemoryStream mg = new MemoryStream()) { if (!SetVertices(mg, vrtf, vertices, uvscales)) { okay = false; } offset = beforeLength + mg.Length - afterPos; mBuffer = new byte[before.Length + mg.Length + after.Length]; Array.Copy(before, mBuffer, before.Length); Array.Copy(mg.ToArray(), 0, mBuffer, before.Length, mg.Length); Array.Copy(after, 0, mBuffer, before.Length + mg.Length, after.Length); mg.Close(); } int voffset = (int)offset / vrtf.Stride; if (offset != 0) { foreach (MLOD.Mesh m in mlod.Meshes.Where(m => m.VertexBufferIndex.Equals(myVBI) && m.StreamOffset > beforeLength)) { m.StreamOffset = (uint)(m.StreamOffset + offset); foreach (MLOD.GeometryState g in m.GeometryStates) { if (g.MinVertexIndex * vrtf.Stride > beforeLength) { g.MinVertexIndex += voffset; } } } } return(okay); }
public Mesh(EventHandler handler, MLOD owner) : base(handler) { mOwner = owner; mMaterialIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mVertexFormatIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mVertexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mIndexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mBounds = new BoundingBox(handler); mSkinControllerIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mJointReferences = new UIntList(handler); mGeometryStates = new GeometryStateList(handler); mScaleOffsetIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); mMirrorPlane = new Vector4(handler);//mOwner.Version > 0x00000201 }
protected override void Parse(Stream s) { BinaryReader r = new BinaryReader(s); tag = r.ReadUInt32(); if (tag != (uint)FOURCC("MTST")) { throw new InvalidDataException(String.Format("Invalid Tag read: '{0}'; expected: 'MTST'; at 0x{1:X8}", FOURCC(tag), s.Position)); } version = r.ReadUInt32(); if (version != 0x00000200) { throw new InvalidDataException(String.Format("Invalid Version read: 0x{0:X8}; expected 0x00000200; at 0x{1:X8}", version, s.Position)); } nameHash = r.ReadUInt32(); index = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); list = new EntryList(OnRCOLChanged, s); }
public override Stream UnParse() { MemoryStream s = new MemoryStream(); BinaryWriter bw = new BinaryWriter(s); bw.Write((UInt32)FOURCC(Tag)); bw.Write(mVersion); bw.Write((UInt32)mFlags); if (mSwizzleInfo == null) { mSwizzleInfo = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); } mSwizzleInfo.UnParse(s); if (mBuffer == null) { mBuffer = new byte[0]; } bw.Write(mBuffer); return(s); }
public override Stream UnParse() { MemoryStream ms = new MemoryStream(); BinaryWriter w = new BinaryWriter(ms); w.Write(tag); w.Write(version); w.Write(nameHash); if (index == null) { this.index = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, 0); } index.UnParse(ms); if (list == null) { this.list = new EntryList(OnRCOLChanged); } list.UnParse(ms); return(ms); }
private void Parse(Stream s) { BinaryReader br = new BinaryReader(s); long expectedSize = br.ReadUInt32(); long start = s.Position; mName = br.ReadUInt32(); mMaterialIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mVertexFormatIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mVertexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mIndexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); uint val = br.ReadUInt32(); mPrimitiveType = (ModelPrimitiveType)(val & 0x000000FF); mFlags = (MeshFlags)(val >> 8); mStreamOffset = br.ReadUInt32(); mStartVertex = br.ReadInt32(); mStartIndex = br.ReadInt32(); mMinVertexIndex = br.ReadInt32(); mVertexCount = br.ReadInt32(); mPrimitiveCount = br.ReadInt32(); mBounds = new BoundingBox(handler, s); mSkinControllerIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mJointReferences = new UIntList(handler, s); mScaleOffsetIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); mGeometryStates = new GeometryStateList(handler, s); if (mOwner.Version > 0x00000201) { mParentName = br.ReadUInt32(); mMirrorPlane = new Vector4(handler, s); } long actualSize = s.Position - start; if (actualSize != expectedSize) { throw new Exception(String.Format("Expected end at {0}, actual end was {1}", expectedSize, actualSize)); } }
public Mesh(EventHandler handler, MLOD owner, uint name, GenericRCOLResource.GenericRCOLResource.ChunkReference materialIndex, GenericRCOLResource.GenericRCOLResource.ChunkReference vertexFormatIndex, GenericRCOLResource.GenericRCOLResource.ChunkReference vertexBufferIndex, GenericRCOLResource.GenericRCOLResource.ChunkReference indexBufferIndex, ModelPrimitiveType primitiveType, MeshFlags flags, uint streamOffset, int startVertex, int startIndex, int minVertexIndex, int vertexCount, int primitiveCount, BoundingBox bounds, GenericRCOLResource.GenericRCOLResource.ChunkReference skinControllerIndex, UIntList jointReferences, GeometryStateList geometryStates, GenericRCOLResource.GenericRCOLResource.ChunkReference scaleOffsetIndex, uint parentName, Vector4 mirrorPlane) : base(handler) { mOwner = owner; mName = name; mMaterialIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, materialIndex); mVertexFormatIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, vertexFormatIndex); mVertexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, vertexBufferIndex); mIndexBufferIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, indexBufferIndex); mPrimitiveType = primitiveType; mFlags = flags; mStreamOffset = streamOffset; mStartVertex = startVertex; mStartIndex = startIndex; mMinVertexIndex = minVertexIndex; mVertexCount = vertexCount; mPrimitiveCount = primitiveCount; mBounds = new BoundingBox(handler, bounds); mSkinControllerIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, skinControllerIndex); mJointReferences = jointReferences == null ? null : new UIntList(handler, jointReferences); mGeometryStates = geometryStates == null ? null : new GeometryStateList(handler, geometryStates); mScaleOffsetIndex = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, scaleOffsetIndex); if (mOwner.Version > 0x00000201) { mParentName = parentName; mMirrorPlane = new Vector4(handler, mirrorPlane); } }
public ElementTextureRef(EventHandler handler, FieldType field, GenericRCOLResource.GenericRCOLResource.ChunkReference data) : this(handler, field, null, "MATD") { this.data = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, data); }
void SetIndices(MLOD mlod, GenericRCOLResource.GenericRCOLResource.ChunkReference myIBI, ModelPrimitiveType type, Int32 startIndex, Int32 primCount, Int32[] indices) { SetIndices(mlod, myIBI, startIndex, startIndex + primCount * IndexCountFromPrimitiveType(type), indices); }
public Entry(EventHandler handler, GenericRCOLResource.GenericRCOLResource.ChunkReference index, State materialSet) : base(handler) { this.index = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, index); this.materialState = materialSet; }
void Parse(Stream s) { index = new GenericRCOLResource.GenericRCOLResource.ChunkReference(handler, s); materialState = (State) new BinaryReader(s).ReadUInt32(); }