Skip to content

Commit

Permalink
Merge pull request #16 from B3zaleel/implement-ADOBE_materials_thin_t…
Browse files Browse the repository at this point in the history
…ransparency-extension

Implement ADOBE_materials_thin_transparency Gltf extension
  • Loading branch information
B3zaleel authored May 28, 2024
2 parents d856464 + 79cd533 commit 99d0dfd
Showing 1 changed file with 86 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
using System.Text.Json;
using ThreeDModels.Format.Gltf.Elements;
using ThreeDModels.Format.Gltf.IO;
using static ThreeDModels.Format.Gltf.IO.Utf8JsonReaderHelpers;

namespace ThreeDModels.Format.Gltf.Extensions;

public class ADOBE_materials_thin_transparency : IGltfProperty
{
public float TransmissionFactor { get; set; }
public TextureInfo? TransmissionTexture { get; set; }
public float Ior { get; set; }
public Dictionary<string, object?>? Extensions { get; set; }
public object? Extras { get; set; }
}

public class AdobeMaterialsThinTransparencyExtension : IGltfExtension
{
public string Name => nameof(ADOBE_materials_thin_transparency);
public const float Default_TransmissionFactor = 1.0f;
public const float Default_Ior = 1.33f;

public object? Read(ref Utf8JsonReader jsonReader, GltfReaderContext context, Type parentType)
{
if (parentType != typeof(Gltf))
{
throw new InvalidDataException("ADOBE_materials_thin_transparency must be used in a Gltf root.");
}
float? transmissionFactor = null;
TextureInfo? transmissionTexture = null;
float? ior = null;
Dictionary<string, object?>? extensions = null;
object? extras = null;
if (jsonReader.TokenType == JsonTokenType.PropertyName && jsonReader.Read())
{
}
if (jsonReader.TokenType == JsonTokenType.Null)
{
return null;
}
else if (jsonReader.TokenType != JsonTokenType.StartObject)
{
throw new InvalidDataException("Failed to find start of property.");
}
while (jsonReader.Read())
{
if (jsonReader.TokenType == JsonTokenType.EndObject)
{
break;
}
var propertyName = jsonReader.GetString();
if (propertyName == nameof(transmissionFactor))
{
transmissionFactor = ReadFloat(ref jsonReader);
}
else if (propertyName == nameof(transmissionTexture))
{
transmissionTexture = TextureInfoSerialization.Read(ref jsonReader, context);
}
else if (propertyName == nameof(ior))
{
ior = ReadFloat(ref jsonReader);
}
else if (propertyName == nameof(extensions))
{
extensions = ExtensionsSerialization.Read<ADOBE_materials_thin_transparency>(ref jsonReader, context);
}
else if (propertyName == nameof(extras))
{
extras = JsonSerialization.Read(ref jsonReader, context);
}
else
{
throw new InvalidDataException($"Unknown property: {propertyName}");
}
}
return new ADOBE_materials_thin_transparency()
{
TransmissionFactor = transmissionFactor ?? Default_TransmissionFactor,
TransmissionTexture = transmissionTexture,
Ior = ior ?? Default_Ior,
Extensions = extensions,
Extras = extras,
};
}
}

0 comments on commit 99d0dfd

Please sign in to comment.