using Newtonsoft.Json;
namespace GLTF.Schema
{
///
/// Texture sampler properties for filtering and wrapping modes.
///
public class Sampler : GLTFChildOfRootProperty
{
///
/// Magnification filter.
/// Valid values correspond to WebGL enums: `9728` (NEAREST) and `9729` (LINEAR).
///
public MagFilterMode MagFilter = MagFilterMode.Linear;
///
/// Minification filter. All valid values correspond to WebGL enums.
///
public MinFilterMode MinFilter = MinFilterMode.NearestMipmapLinear;
///
/// s wrapping mode. All valid values correspond to WebGL enums.
///
public WrapMode WrapS = WrapMode.Repeat;
///
/// t wrapping mode. All valid values correspond to WebGL enums.
///
public WrapMode WrapT = WrapMode.Repeat;
public Sampler()
{
}
public Sampler(Sampler sampler, GLTFRoot gltfRoot) : base(sampler, gltfRoot)
{
if (sampler == null) return;
MagFilter = sampler.MagFilter;
MinFilter = sampler.MinFilter;
WrapS = sampler.WrapS;
WrapT = sampler.WrapT;
}
public static Sampler Deserialize(GLTFRoot root, JsonReader reader)
{
var sampler = new Sampler();
while (reader.Read() && reader.TokenType == JsonToken.PropertyName)
{
var curProp = reader.Value.ToString();
switch (curProp)
{
case "magFilter":
sampler.MagFilter = (MagFilterMode)reader.ReadAsInt32();
break;
case "minFilter":
sampler.MinFilter = (MinFilterMode)reader.ReadAsInt32();
break;
case "wrapS":
sampler.WrapS = (WrapMode)reader.ReadAsInt32();
break;
case "wrapT":
sampler.WrapT = (WrapMode)reader.ReadAsInt32();
break;
default:
sampler.DefaultPropertyDeserializer(root, reader);
break;
}
}
return sampler;
}
public override void Serialize(JsonWriter writer)
{
writer.WriteStartObject();
if (MagFilter != MagFilterMode.Linear && MagFilter != MagFilterMode.None)
{
writer.WritePropertyName("magFilter");
writer.WriteValue((int)MagFilter);
}
if (MinFilter != MinFilterMode.NearestMipmapLinear && MinFilter != MinFilterMode.None)
{
writer.WritePropertyName("minFilter");
writer.WriteValue((int)MinFilter);
}
if (WrapS != WrapMode.Repeat)
{
writer.WritePropertyName("wrapS");
writer.WriteValue((int)WrapS);
}
if (WrapT != WrapMode.Repeat)
{
writer.WritePropertyName("wrapT");
writer.WriteValue((int)WrapT);
}
base.Serialize(writer);
writer.WriteEndObject();
}
}
///
/// Magnification filter mode.
///
public enum MagFilterMode
{
None = 0,
Nearest = 9728,
Linear = 9729,
}
///
/// Minification filter mode.
///
public enum MinFilterMode
{
None = 0,
Nearest = 9728,
Linear = 9729,
NearestMipmapNearest = 9984,
LinearMipmapNearest = 9985,
NearestMipmapLinear = 9986,
LinearMipmapLinear = 9987
}
///
/// Texture wrap mode.
///
public enum WrapMode
{
None = 0,
ClampToEdge = 33071,
MirroredRepeat = 33648,
Repeat = 10497
}
}