// SPDX-FileCopyrightText: 2023 Unity Technologies and the glTFast authors // SPDX-License-Identifier: Apache-2.0 using UnityEngine.Serialization; namespace GLTFast.Schema { /// [System.Serializable] public class TextureInfo : TextureInfoBase { } /// /// textureInfo extensions type [System.Serializable] public abstract class TextureInfoBase : TextureInfoBase where TExtensions : TextureInfoExtensions, new() { /// public TExtensions extensions; /// public override TextureInfoExtensions Extensions => extensions; internal override void SetTextureTransform(TextureTransform textureTransform) { extensions = extensions ?? new TExtensions(); extensions.KHR_texture_transform = textureTransform; } } /// /// Reference to a texture. /// [System.Serializable] public abstract class TextureInfoBase { /// /// The index of the texture. /// public int index = -1; /// /// This integer value is used to construct a string in the format /// TEXCOORD_<set index> which is a reference to a key in /// mesh.primitives.attributes (e.g. A value of 0 corresponds to TEXCOORD_0). /// public int texCoord; /// public abstract TextureInfoExtensions Extensions { get; } /// /// Applies a texture transform by initializing (if required) and setting its /// field. /// /// Texture transform to apply. internal abstract void SetTextureTransform(TextureTransform textureTransform); internal void GltfSerializeTextureInfo(JsonWriter writer) { if (index >= 0) { writer.AddProperty("index", index); } if (texCoord > 0) { writer.AddProperty("texCoord", texCoord); } if (Extensions != null) { writer.AddProperty("extensions"); Extensions.GltfSerialize(writer); } } internal virtual void GltfSerialize(JsonWriter writer) { writer.AddObject(); GltfSerializeTextureInfo(writer); writer.Close(); } } }