コード例 #1
0
ファイル: ArrayBytesBuffer.cs プロジェクト: vrm-c/UniVRM_1_0
        public GltfBufferView Extend(Memory <byte> array, int stride, GltfBufferTargetType target)
        {
            var tmp = m_bytes;
            // alignment
            var padding = m_used % stride == 0 ? 0 : stride - m_used % stride;

            if (m_bytes == null || m_used + padding + array.Length > m_bytes.Length)
            {
                // recreate buffer
                var newSize = Math.Max(m_used + padding + array.Length, m_bytes.Length * 2);
                m_bytes = new Byte[newSize];
                if (m_used > 0)
                {
                    // Buffer.BlockCopy(tmp, 0, m_bytes, 0, m_used);
                    tmp.AsSpan().Slice(0, m_used).CopyTo(m_bytes);
                }
            }
            if (m_used + padding + array.Length > m_bytes.Length)
            {
                throw new ArgumentOutOfRangeException();
            }

            array.CopyTo(m_bytes.AsMemory().Slice(m_used + padding, array.Length));

            var result = new GltfBufferView
            {
                buffer     = 0,
                byteLength = array.Length,
                byteOffset = m_used + padding,
                target     = target,
            };

            if (target == GltfBufferTargetType.ARRAY_BUFFER)
            {
                result.byteStride = stride;
            }

            m_used = m_used + padding + array.Length;
            return(result);
        }
コード例 #2
0
 public GltfBufferView Extend(Memory <byte> array, int stride, GltfBufferTargetType target)
 {
     throw new NotImplementedException();
 }