internal MemoryAccessor _GetMemoryAccessor() { var view = SourceBufferView; var info = new MemoryAccessInfo(null, ByteOffset, Count, view.ByteStride, Dimensions, Encoding, Normalized); return(new MemoryAccessor(view.Content, info)); }
public static MemoryAccessor[] CreateVertexMemoryAccessors <TVertex>(this IReadOnlyList <TVertex> vertices, Schema2.EncodingType jointEncoding) where TVertex : IVertexBuilder { if (vertices == null || vertices.Count == 0) { return(null); } // determine the vertex attributes from the first vertex. var attributes = GetVertexAttributes(vertices[0], vertices.Count, jointEncoding); // create a buffer int byteStride = attributes[0].ByteStride; var vbuffer = new ArraySegment <byte>(new Byte[byteStride * vertices.Count]); // fill the buffer with the vertex attributes. var accessors = MemoryAccessInfo .Slice(attributes, 0, vertices.Count) .Select(item => new MemoryAccessor(vbuffer, item)) .ToArray(); foreach (var accessor in accessors) { accessor.FillAccessor(vertices); } return(accessors); }
internal MemoryAccessor _GetMemoryAccessor(string name = null) { var view = SourceBufferView; var info = new MemoryAccessInfo(name, ByteOffset, Count, view.ByteStride, Format); return(new MemoryAccessor(view.Content, info)); }
public static MemoryAccessInfo[] GetVertexAttributes(this IVertexBuilder firstVertex, int vertexCount, PackedEncoding vertexEncoding) { var tvg = firstVertex.GetGeometry().GetType(); var tvm = firstVertex.GetMaterial().GetType(); var tvs = firstVertex.GetSkinning().GetType(); var attributes = new List <MemoryAccessInfo>(); foreach (var finfo in tvg.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvm.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvs.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { var a = attribute.Value; if (a.Name.StartsWith("JOINTS_", StringComparison.OrdinalIgnoreCase)) { a.Encoding = vertexEncoding.JointsEncoding.Value; } if (a.Name.StartsWith("WEIGHTS_", StringComparison.OrdinalIgnoreCase)) { a.Encoding = vertexEncoding.WeightsEncoding.Value; if (a.Encoding != ENCODING.FLOAT) { a.Normalized = true; } } attributes.Add(a); } } var array = attributes.ToArray(); MemoryAccessInfo.SetInterleavedInfo(array, 0, vertexCount); return(array); }
public static IndicesAccessor CreateAccessors(int itemsCount) { var info = MemoryAccessInfo.CreateDefaultElement("INDEX"); info.ItemsCount = itemsCount; var data = new ArraySegment <Byte>(new Byte[info.ByteLength * itemsCount]); var accessor = new IndicesAccessor(info); accessor._MemoryAccessor.SetIndexDataSource(data, 0, itemsCount); return(accessor); }
public static MemoryAccessInfo[] GetVertexAttributes(this IVertexBuilder firstVertex, int vertexCount, Schema2.EncodingType jointEncoding) { var tvg = firstVertex.GetGeometry().GetType(); var tvm = firstVertex.GetMaterial().GetType(); var tvs = firstVertex.GetSkinning().GetType(); var attributes = new List <MemoryAccessInfo>(); foreach (var finfo in tvg.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvm.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvs.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { var a = attribute.Value; if (a.Name.StartsWith("JOINTS_", StringComparison.OrdinalIgnoreCase)) { a.Encoding = jointEncoding; } attributes.Add(a); } } var array = attributes.ToArray(); MemoryAccessInfo.SetInterleavedInfo(array, 0, vertexCount); return(array); }
public static MemoryAccessor CreateIndexMemoryAccessor(this IReadOnlyList <Int32> indices, Schema2.EncodingType encoding) { if (indices == null || indices.Count == 0) { return(null); } var attribute = new MemoryAccessInfo("INDEX", 0, indices.Count, 0, Schema2.DimensionType.SCALAR, encoding); // create buffer var ibytes = new Byte[encoding.ByteLength() * indices.Count]; var ibuffer = new ArraySegment <byte>(ibytes); // fill the buffer with indices. var accessor = new MemoryAccessor(ibuffer, attribute.Slice(0, indices.Count)); accessor.AsIntegerArray().Fill(indices); return(accessor); }
public static MemoryAccessInfo[] GetVertexAttributes(this IVertexBuilder firstVertex, int vertexCount) { var tvg = firstVertex.GetGeometry().GetType(); var tvm = firstVertex.GetMaterial().GetType(); var tvs = firstVertex.GetSkinning().GetType(); var attributes = new List <MemoryAccessInfo>(); foreach (var finfo in tvg.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvm.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } foreach (var finfo in tvs.GetFields()) { var attribute = _GetMemoryAccessInfo(finfo); if (attribute.HasValue) { attributes.Add(attribute.Value); } } var array = attributes.ToArray(); MemoryAccessInfo.SetInterleavedInfo(array, 0, vertexCount); return(array); }
public static VertexAccessor[] CreateAccessors(int itemsCount, params string[] attributes) { var accessors = MemoryAccessInfo .Create(attributes) .Select(item => new VertexAccessor(item)) .ToArray(); int byteOffset = 0; var byteStride = accessors.Sum(item => item._MemoryAccessor.Attribute.ByteLength); var data = new ArraySegment <Byte>(new Byte[byteStride * itemsCount]); for (int i = 0; i < accessors.Length; ++i) { var a = accessors[i]; a._MemoryAccessor.SetVertexDataSource(data, byteOffset, itemsCount, byteStride); byteOffset += a._MemoryAccessor.Attribute.ByteLength; } return(accessors); }
public VertexAccessor(MemoryAccessInfo info) { _MemoryAccessor = new MemoryAccessor(info); }
public IndicesAccessor(MemoryAccessInfo info) { _MemoryAccessor = new MemoryAccessor(info); }