public void LoadSectionDataIfEmpty( ) { if (SectionData.Length > 0) { return; } var resourceStream = GeometryBlockInfo.GetResourceFromCache(); if (resourceStream == null) { return; } var sectionBlock = new RenderModelSectionDataBlock( ); using (var binaryReader = new BinaryReader(resourceStream)) { sectionBlock.Read(binaryReader); var vertexBufferResources = GeometryBlockInfo.Resources.Where( x => x.Type == GlobalGeometryBlockResourceBlock.TypeEnum.VertexBuffer).ToArray( ); for (var i = 0; i < sectionBlock.Section.VertexBuffers.Length && i < vertexBufferResources.Length; ++i) { sectionBlock.Section.VertexBuffers[i].VertexBuffer.Data = resourceStream.GetResourceData(vertexBufferResources[i]); } } SectionData = new[] { sectionBlock }; }
internal virtual RenderModelSectionDataBlock[] ReadRenderModelSectionDataBlockArray(BinaryReader binaryReader) { var elementSize = Deserializer.SizeOf(typeof(RenderModelSectionDataBlock)); var blamPointer = binaryReader.ReadBlamPointer(elementSize); var array = new RenderModelSectionDataBlock[blamPointer.Count]; using (binaryReader.BaseStream.Pin()) { for (int i = 0; i < blamPointer.Count; ++i) { binaryReader.BaseStream.Position = blamPointer[i]; array[i] = new RenderModelSectionDataBlock(binaryReader); } } return(array); }