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); }
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); }
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])); }
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); }
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); }
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); }
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(); }
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); }
T[] GetAttrib <T>(glTFAccessor accessor, glTFBufferView view) where T : struct { return(GetAttrib <T>(accessor.count, accessor.byteOffset, view)); }
static T[] GetAttrib <T>(this glTF self, glTFAccessor accessor, glTFBufferView view) where T : struct { return(self.GetAttrib <T>(accessor.count, accessor.byteOffset, view)); }
ArraySegment <Byte> GetBytes(IStorage io, glTFAccessor accessor, glTFBufferView view) { return(GetBytes(io, accessor.ElementSize * accessor.count, accessor.byteOffset, view)); }