Files
ReFuel.Gltf/ReFuel.Gltf/GltfSampler.cs
2025-10-12 14:33:16 +03:00

93 lines
3.0 KiB
C#

using System;
using System.Text.Json;
namespace ReFuel.Gltf
{
internal enum GltfSamplerValue : int
{
Nearest = 9728,
Linear = 9729,
NearestMipmapNearest = 9984,
LinearMipmapNearest = 9985,
NearestMipmapLinear = 9986,
LinearMipmapLinear = 9987,
ClampToEdge = 33071,
MirroredRepeat = 33648,
Repeat = 10497,
}
public enum GltfSamplerMagFilter
{
Unset = 0,
Nearest = GltfSamplerValue.Nearest,
Linear = GltfSamplerValue.Linear
}
public enum GltfSamplerMinFilter
{
Unset = 0,
Nearest = GltfSamplerValue.Nearest,
Linear = GltfSamplerValue.Linear,
NearestMipmapNearest = GltfSamplerValue.NearestMipmapNearest,
LinearMipmapNearest = GltfSamplerValue.LinearMipmapNearest,
NearestMipmapLinear = GltfSamplerValue.NearestMipmapLinear,
LinearMipmapLinear = GltfSamplerValue.LinearMipmapLinear,
}
public enum GltfSamplerWrapMode
{
ClampToEdge = GltfSamplerValue.ClampToEdge,
MirroredRepeat = GltfSamplerValue.MirroredRepeat,
Repeat = GltfSamplerValue.Repeat,
}
public class GltfSampler : GltfIdObject
{
public override GltfObjectKind Kind => GltfObjectKind.Sampler;
public string? Name { get; set; } = null;
public GltfSamplerMinFilter MinFilter { get; set; } = GltfSamplerMinFilter.Unset;
public GltfSamplerMagFilter MagFilter { get; set; } = GltfSamplerMagFilter.Unset;
public GltfSamplerWrapMode WrapS { get; set; } = GltfSamplerWrapMode.Repeat;
public GltfSamplerWrapMode WrapT { get; set; } = GltfSamplerWrapMode.Repeat;
internal GltfSampler(GltfDocument document) : base(document)
{
}
internal override void Deserialize(JsonElement element)
{
if (element.ValueKind != JsonValueKind.Object)
throw new Exception("Expected an object as a sampler.");
foreach (JsonProperty property in element.EnumerateObject())
{
switch (property.Name)
{
case "name":
Name = property.Value.GetString();
break;
case "magFilter":
MagFilter = (GltfSamplerMagFilter)property.Value.GetInt32();
break;
case "minFilter":
MinFilter = (GltfSamplerMinFilter)property.Value.GetInt32();
break;
case "wrapS":
WrapS = (GltfSamplerWrapMode)property.Value.GetInt32();
break;
case "wrapT":
WrapT = (GltfSamplerWrapMode)property.Value.GetInt32();
break;
}
}
DeserializeCommon(element);
}
internal override void Serialize(Utf8JsonWriter writer)
{
throw new NotImplementedException();
}
}
}