Example #1
0
        /// <summary>
        /// Merges all the Buffer objects into a single, big one.
        /// </summary>
        /// <remarks>
        /// When merging the buffers, it also adjusts the BufferView offsets so the data they point to remains the same.
        /// </remarks>
        public void MergeBuffers()
        {
            // retrieve all buffers and merge them into a single, big buffer

            var views = _bufferViews
                        .OrderByDescending(item => item.Data.Count)
                        .ToArray();

            if (views.Length <= 1)
            {
                return;                    // nothing to do.
            }
            var sbbuilder = new _StaticBufferBuilder(0);

            foreach (var bv in views)
            {
                bv._ConvertToStaticBuffer(sbbuilder);
            }

            this._buffers.Clear();

            var b = new Buffer
            {
                _Data = sbbuilder.ToArray()
            };

            this._buffers.Add(b);
        }
Example #2
0
        internal void _ConvertToStaticBuffer(_StaticBufferBuilder targetBuffer)
        {
            // retrieve old buffer
            var srcBuf = this.LogicalParent.LogicalBuffers[this._buffer]._Data;
            var data   = new Byte[this._byteLength];

            Array.Copy(srcBuf, this._byteOffset ?? 0, data, 0, this._byteLength);

            // append data to new buffer
            this._buffer     = targetBuffer.BufferIndex;
            this._byteLength = data.Length;
            this._byteOffset = targetBuffer.Append(data);
        }