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;
}
}
}
}