Ejemplo n.º 1
0
        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);
        }