97 lines
2.8 KiB
C#
Executable File
97 lines
2.8 KiB
C#
Executable File
using System;
|
|
using System.Text.Json;
|
|
|
|
namespace ReFuel.Gltf
|
|
{
|
|
public class GltfBufferView : GltfIdObject
|
|
{
|
|
public override GltfObjectKind Kind => GltfObjectKind.BufferView;
|
|
|
|
private GltfSmartId<GltfBuffer> buffer;
|
|
|
|
public GltfBuffer Buffer
|
|
{
|
|
get => buffer.Value;
|
|
set => buffer.Value = value;
|
|
}
|
|
|
|
public long ByteOffset { get; set; } = 0;
|
|
public long ByteLength { get; set; } = 0;
|
|
public long Stride { get; set; } = 0;
|
|
public GltfTargetHint Target { get; set; } = GltfTargetHint.None;
|
|
public string? Name { get; set; }
|
|
|
|
internal GltfBufferView(GltfDocument document) : base(document)
|
|
{
|
|
buffer = new GltfSmartId<GltfBuffer>(document.Buffers);
|
|
}
|
|
|
|
internal override void Deserialize(JsonElement element)
|
|
{
|
|
AssertObject(element);
|
|
|
|
if (!element.TryGetProperty("buffer", out JsonElement bufferElement))
|
|
{
|
|
RequiredProperty("buffer");
|
|
}
|
|
else if (!bufferElement.TryGetInt32(out int bufferId))
|
|
{
|
|
PropertyFormatFail("buffer", "expected an integer");
|
|
}
|
|
else
|
|
{
|
|
buffer.Id = bufferId;
|
|
}
|
|
|
|
if (!element.TryGetProperty("byteLength", out JsonElement byteLengthElement))
|
|
{
|
|
RequiredProperty("byteLength");
|
|
}
|
|
else if (!byteLengthElement.TryGetInt64(out long byteLength))
|
|
{
|
|
PropertyFormatFail("byteLength", "expected an integer");
|
|
}
|
|
else
|
|
{
|
|
ByteLength = byteLength;
|
|
}
|
|
|
|
if (element.TryGetProperty("byteOffset", out JsonElement byteOffset))
|
|
{
|
|
if (!byteOffset.TryGetInt64(out long l))
|
|
PropertyFormatFail("byteOffset", "excpected an integer.");
|
|
|
|
ByteOffset = l;
|
|
}
|
|
|
|
if (element.TryGetProperty("byteStride", out JsonElement stride))
|
|
{
|
|
if (!stride.TryGetInt64(out long l))
|
|
PropertyFormatFail("byteStride", "excpected an integer.");
|
|
|
|
Stride = l;
|
|
}
|
|
|
|
if (element.TryGetProperty("target", out JsonElement targetElement))
|
|
{
|
|
if (!targetElement.TryGetInt32(out int i))
|
|
PropertyFormatFail("target", "expected an integer.");
|
|
|
|
Target = (GltfTargetHint)i;
|
|
}
|
|
|
|
if (element.TryGetProperty("name", out JsonElement nameElement))
|
|
{
|
|
Name = nameElement.GetString();
|
|
}
|
|
|
|
DeserializeCommon(element);
|
|
}
|
|
|
|
internal override void Serialize(Utf8JsonWriter writer)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|