// SPDX-FileCopyrightText: 2023 Unity Technologies and the glTFast authors // SPDX-License-Identifier: Apache-2.0 using System; namespace GLTFast.Schema { /// /// GPU buffer type. /// Relates to WebGL's bindBuffer. /// /// public enum BufferViewTarget { /// No target. None = 0, /// ARRAY_BUFFER ArrayBuffer = 34962, /// ELEMENT_ARRAY_BUFFER ElementArrayBuffer = 34963, } /// [Serializable] public class BufferView : BufferViewBase { } /// [Serializable] public class BufferViewBase : BufferViewBase where TExtensions : BufferViewExtensions { /// public TExtensions extensions; /// public override BufferViewExtensions Extensions => extensions; } /// [Serializable] public abstract class BufferViewBase : NamedObject, IBufferView { /// /// The index of the buffer. /// public int buffer; /// /// The offset into the buffer in bytes. /// public int byteOffset; /// /// The length of the bufferView in bytes. /// public int byteLength; /// /// The stride, in bytes, between vertex attributes or other interleaved data. /// When this is zero, data is tightly packed. /// public int byteStride = -1; /// /// The target that the WebGL buffer should be bound to. /// All valid values correspond to WebGL enums. /// When this is not provided, the bufferView contains animation or skin data. /// public int target; /// public int Buffer => buffer; /// public int ByteOffset => byteOffset; /// public int ByteLength => byteLength; /// public int ByteStride => byteStride; internal void GltfSerialize(JsonWriter writer) { writer.AddObject(); writer.AddProperty("buffer", buffer); writer.AddProperty("byteLength", byteLength); if (byteOffset > 0) { writer.AddProperty("byteOffset", byteOffset); } if (byteStride > 0) { writer.AddProperty("byteStride", byteStride); } if (target > 0) { writer.AddProperty("target", target); } writer.Close(); } /// public abstract BufferViewExtensions Extensions { get; } } }