// 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; }
}
}