glTFAccessor.byteOffset to Nullable

* fix no byteoffset when sparse
This commit is contained in:
ousttrue
2022-07-11 20:14:03 +09:00
parent 80761cc01a
commit 9c92be5f3e
5 changed files with 10 additions and 10 deletions

View File

@@ -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)){

View File

@@ -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;

View File

@@ -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,

View File

@@ -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
{

View File

@@ -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;