using GLTF.Schema; using System.Collections.Generic; using System.IO; namespace GLTF { /// /// Objects containing GLB data and associated parsing information /// public class GLBObject : IGLTFObject { public GLBObject(GLBObject other) { Root = other.Root; Header = other.Header; StreamStartPosition = other.StreamStartPosition; JsonChunkInfo = other.JsonChunkInfo; BinaryChunkInfo = other.BinaryChunkInfo; } /// /// Parsed JSON of the GLB /// public GLTFRoot Root { get; internal set; } /// /// Read/Write Stream that GLB exists in /// public Stream Stream { get; set; } /// /// Header of GLB /// public GLBHeader Header { get { return _glbHeader; } internal set { _glbHeader = value; } } /// /// Start position for the GLB stream /// public long StreamStartPosition { get; internal set; } /// /// Information on JSON chunk /// public ChunkInfo JsonChunkInfo { get { return _jsonChunkInfo; } internal set { _jsonChunkInfo = value; } } /// /// Information on Binary chunk /// public ChunkInfo BinaryChunkInfo { get { return _binaryChunkInfo; } internal set { _binaryChunkInfo = value; } } private GLBHeader _glbHeader; private ChunkInfo _jsonChunkInfo; private ChunkInfo _binaryChunkInfo; internal GLBObject() { } internal void SetFileLength(uint newHeaderLength) { _glbHeader.FileLength = newHeaderLength; } internal void SetJsonChunkStartPosition(long startPosition) { _jsonChunkInfo.StartPosition = startPosition; } internal void SetJsonChunkLength(uint jsonChunkLength) { _jsonChunkInfo.Length = jsonChunkLength; } internal void SetBinaryChunkStartPosition(long startPosition) { _binaryChunkInfo.StartPosition = startPosition; } internal void SetBinaryChunkLength(uint binaryChunkLength) { _binaryChunkInfo.Length = binaryChunkLength; if (Root.Buffers == null) { Root.Buffers = new List(); } if (Root.Buffers.Count == 0) { Root.Buffers.Add(new GLTFBuffer { ByteLength = binaryChunkLength }); } else { Root.Buffers[0].ByteLength = binaryChunkLength; } } } }