Files
2025-10-12 14:33:16 +03:00

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