mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-27 05:14:27 -05:00
glTFAccessor.byteOffset to Nullable
* fix no byteoffset when sparse
This commit is contained in:
@@ -277,9 +277,9 @@ public static void Serialize_gltf_accessors_ITEM(JsonFormatter f, glTFAccessor v
|
||||
f.Value(value.bufferView.Value);
|
||||
}
|
||||
|
||||
if(value.byteOffset>=0){
|
||||
if(value.byteOffset.HasValue){
|
||||
f.Key("byteOffset");
|
||||
f.Value(value.byteOffset);
|
||||
f.Value(value.byteOffset.Value);
|
||||
}
|
||||
|
||||
if(!string.IsNullOrEmpty(value.type)){
|
||||
|
||||
@@ -96,7 +96,7 @@ namespace UniGLTF
|
||||
public int? bufferView;
|
||||
|
||||
[JsonSchema(Minimum = 0, Dependencies = new string[] { "bufferView" })]
|
||||
public int byteOffset;
|
||||
public int? byteOffset;
|
||||
|
||||
[JsonSchema(Required = true, EnumValues = new object[] { "SCALAR", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4" }, EnumSerializationType = EnumSerializationType.AsString)]
|
||||
public string type;
|
||||
|
||||
@@ -115,7 +115,7 @@ namespace UniGLTF
|
||||
var accessorIndex = Gltf.accessors.Count;
|
||||
Gltf.accessors.Add(new glTFAccessor
|
||||
{
|
||||
byteOffset = 0,
|
||||
byteOffset = default,
|
||||
componentType = glTFExtensions.GetComponentType<T>(),
|
||||
type = glTFExtensions.GetAccessorType<T>(),
|
||||
count = accessorCount,
|
||||
|
||||
@@ -166,7 +166,7 @@ namespace UniGLTF
|
||||
NativeArray<T> GetTypedFromAccessor<T>(glTFAccessor accessor, glTFBufferView view) where T : struct
|
||||
{
|
||||
var bytes = GetBytesFromBufferView(view);
|
||||
return bytes.GetSubArray(accessor.byteOffset, bytes.Length - accessor.byteOffset).Reinterpret<T>(1).GetSubArray(0, accessor.count);
|
||||
return bytes.GetSubArray(accessor.byteOffset.GetValueOrDefault(), bytes.Length - accessor.byteOffset.GetValueOrDefault()).Reinterpret<T>(1).GetSubArray(0, accessor.count);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -209,7 +209,7 @@ namespace UniGLTF
|
||||
{
|
||||
var accessor = GLTF.accessors[accessorIndex];
|
||||
var view = GLTF.bufferViews[accessor.bufferView.Value];
|
||||
return GetIntIndicesFromView(view, accessor.count, accessor.byteOffset, accessor.componentType);
|
||||
return GetIntIndicesFromView(view, accessor.count, accessor.byteOffset.GetValueOrDefault(), accessor.componentType);
|
||||
}
|
||||
|
||||
public NativeArray<T> GetArrayFromAccessor<T>(int accessorIndex) where T : struct
|
||||
@@ -281,7 +281,7 @@ namespace UniGLTF
|
||||
{
|
||||
var view = GLTF.bufferViews[vertexAccessor.bufferView.Value];
|
||||
var segment = GetBytesFromBuffer(view.buffer);
|
||||
result = segment.GetSubArray(view.byteOffset + vertexAccessor.byteOffset, vertexAccessor.count * 4 * vertexAccessor.TypeCount).Reinterpret<float>(1);
|
||||
result = segment.GetSubArray(view.byteOffset + vertexAccessor.byteOffset.GetValueOrDefault(), vertexAccessor.count * 4 * vertexAccessor.TypeCount).Reinterpret<float>(1);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -136,7 +136,7 @@ namespace UniVRM10
|
||||
{
|
||||
var buffer = m_data.Bin;
|
||||
var byteSize = accessor.CalcByteSize();
|
||||
bytes = m_data.Bin.GetSubArray(view.byteOffset, view.byteLength).GetSubArray(accessor.byteOffset, byteSize);
|
||||
bytes = m_data.Bin.GetSubArray(view.byteOffset, view.byteLength).GetSubArray(accessor.byteOffset.GetValueOrDefault(), byteSize);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ namespace UniVRM10
|
||||
// IndexBufferが連続して格納されている => Slice でいける
|
||||
var firstAccessor = Gltf.accessors[accessorIndices[0]];
|
||||
var firstView = Gltf.bufferViews[firstAccessor.bufferView.Value];
|
||||
var start = firstView.byteOffset + firstAccessor.byteOffset;
|
||||
var start = firstView.byteOffset + firstAccessor.byteOffset.GetValueOrDefault();
|
||||
if (!firstView.buffer.TryGetValidIndex(Gltf.buffers.Count, out int firstViewBufferIndex))
|
||||
{
|
||||
throw new Exception();
|
||||
@@ -302,7 +302,7 @@ namespace UniVRM10
|
||||
}
|
||||
var buffer = Gltf.buffers[viewBufferIndex];
|
||||
var bin = GetBufferBytes(buffer);
|
||||
var start = view.byteOffset + accessor.byteOffset;
|
||||
var start = view.byteOffset + accessor.byteOffset.GetValueOrDefault();
|
||||
var bytes = bin.GetSubArray(start, accessor.count * accessor.GetStride());
|
||||
var dst = indices.Reinterpret<Int32>(1).GetSubArray(offset, accessor.count);
|
||||
offset += accessor.count;
|
||||
|
||||
Reference in New Issue
Block a user