Пример #1
0
        public int AddBufferView(glTFBufferView view)
        {
            var index = bufferViews.Count;

            bufferViews.Add(view);
            return(index);
        }
        public glTFBufferView Extend(IntPtr p, int bytesLength, int stride, glBufferTarget target)
        {
            var tmp = m_bytes;
            // alignment
            var padding = m_used % stride == 0 ? 0 : stride - m_used % stride;

            if (m_bytes == null || m_used + padding + bytesLength > m_bytes.Length)
            {
                // recreate buffer
                m_bytes = new Byte[m_used + padding + bytesLength];
                if (m_used > 0)
                {
                    Buffer.BlockCopy(tmp, 0, m_bytes, 0, m_used);
                }
            }
            if (m_used + padding + bytesLength > m_bytes.Length)
            {
                throw new ArgumentOutOfRangeException();
            }

            Marshal.Copy(p, m_bytes, m_used + padding, bytesLength);
            var result = new glTFBufferView
            {
                buffer     = 0,
                byteLength = bytesLength,
                byteOffset = m_used + padding,
                byteStride = stride,
                target     = target,
            };

            m_used = m_used + padding + bytesLength;
            return(result);
        }
Пример #3
0
        ArraySegment <Byte> GetBytes(IStorage io, int size, int byteOffset, glTFBufferView view)
        {
            var segment = io.Get(buffers[view.buffer].uri);
            var bytes   = new ArraySegment <Byte>(segment.Array, segment.Offset + view.byteOffset + byteOffset, size);

            return(bytes);
        }
Пример #4
0
 public ArraySegment <byte> GetBufferBytes(UniGLTF.glTFBufferView bufferView)
 {
     if (!bufferView.buffer.TryGetValidIndex(Gltf.buffers.Count, out int bufferViewBufferIndex))
     {
         throw new Exception();
     }
     return(GetBufferBytes(Gltf.buffers[bufferViewBufferIndex]));
 }
Пример #5
0
        T[] GetAttrib <T>(int count, int byteOffset, glTFBufferView view) where T : struct
        {
            var attrib  = new T[count];
            var segment = buffers[view.buffer].GetBytes();
            var bytes   = new ArraySegment <Byte>(segment.Array, segment.Offset + view.byteOffset + byteOffset, count * view.byteStride);

            bytes.MarshalCopyTo(attrib);
            return(attrib);
        }
Пример #6
0
        T[] GetAttrib <T>(IStorage io, int count, int byteOffset, glTFBufferView view) where T : struct
        {
            var attrib = new T[count];
            //
            var bytes = GetBytes(io, count, byteOffset, view);

            bytes.MarshalCoyTo(attrib);
            return(attrib);
        }
Пример #7
0
        T[] GetAttrib <T>(glTFAccessor accessor, glTFBufferView view) where T : struct
        {
            var attrib = new T[accessor.count];
            //
            var segment = buffers[view.buffer].Storage.GetBytes();
            var bytes   = new ArraySegment <Byte>(segment.Array, segment.Offset + view.byteOffset + accessor.byteOffset, accessor.count * view.byteStride);

            bytes.MarshalCoyTo(attrib);
            return(attrib);
        }
Пример #8
0
        public static void Serialize_gltf_bufferViews_ITEM(JsonFormatter f, glTFBufferView value)
        {
            f.BeginMap();


            if (value.buffer >= 0)
            {
                f.Key("buffer");
                f.Value(value.buffer);
            }

            if (value.byteOffset >= 0)
            {
                f.Key("byteOffset");
                f.Value(value.byteOffset);
            }

            if (value.byteLength >= 1)
            {
                f.Key("byteLength");
                f.Value(value.byteLength);
            }

            if (value.byteStride >= 4 && false)
            {
                f.Key("byteStride");
                f.Value(value.byteStride);
            }

            if (true && value.target != 0)
            {
                f.Key("target");
                f.Value((int)value.target);
            }

            if (value.extensions != null)
            {
                f.Key("extensions");
                value.extensions.Serialize(f);
            }

            if (value.extras != null)
            {
                f.Key("extras");
                value.extras.Serialize(f);
            }

            if (!string.IsNullOrEmpty(value.name))
            {
                f.Key("name");
                f.Value(value.name);
            }

            f.EndMap();
        }
Пример #9
0
        IEnumerable <int> _GetIndices(glTFBufferView view, int count, int byteOffset, glComponentType componentType)
        {
            switch (componentType)
            {
            case glComponentType.UNSIGNED_BYTE:
            {
                return(GetAttrib <Byte>(count, byteOffset, view).Select(x => (int)(x)));
            }

            case glComponentType.UNSIGNED_SHORT:
            {
                return(GetAttrib <UInt16>(count, byteOffset, view).Select(x => (int)(x)));
            }

            case glComponentType.UNSIGNED_INT:
            {
                return(GetAttrib <UInt32>(count, byteOffset, view).Select(x => (int)(x)));
            }
            }
            throw new NotImplementedException("GetIndices: unknown componenttype: " + componentType);
        }
Пример #10
0
 T[] GetAttrib <T>(glTFAccessor accessor, glTFBufferView view) where T : struct
 {
     return(GetAttrib <T>(accessor.count, accessor.byteOffset, view));
 }
Пример #11
0
 static T[] GetAttrib <T>(this glTF self, glTFAccessor accessor, glTFBufferView view) where T : struct
 {
     return(self.GetAttrib <T>(accessor.count, accessor.byteOffset, view));
 }
Пример #12
0
 ArraySegment <Byte> GetBytes(IStorage io, glTFAccessor accessor, glTFBufferView view)
 {
     return(GetBytes(io, accessor.ElementSize * accessor.count, accessor.byteOffset, view));
 }