diff --git a/Assets/UniGLTF/Runtime/Extensions/glTFExtensions.cs b/Assets/UniGLTF/Runtime/Extensions/glTFExtensions.cs
index ceb8e9642..1cc651848 100644
--- a/Assets/UniGLTF/Runtime/Extensions/glTFExtensions.cs
+++ b/Assets/UniGLTF/Runtime/Extensions/glTFExtensions.cs
@@ -476,5 +476,51 @@ namespace UniGLTF
self.RemoveUnusedExtensions(json);
return (json, self.buffers);
}
+
+ public static bool IsGeneratedUniGLTFAndOlderThan(string generatorVersion, int major, int minor)
+ {
+ if (string.IsNullOrEmpty(generatorVersion)) return false;
+ if (generatorVersion == "UniGLTF") return true;
+ if (!generatorVersion.FastStartsWith("UniGLTF-")) return false;
+
+ try
+ {
+ var splitted = generatorVersion.Substring(8).Split('.');
+ var generatorMajor = int.Parse(splitted[0]);
+ var generatorMinor = int.Parse(splitted[1]);
+
+ if (generatorMajor < major)
+ {
+ return true;
+ }
+ else if (generatorMajor > major)
+ {
+ return false;
+ }
+ else
+ {
+ if (generatorMinor >= minor)
+ {
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.LogWarningFormat("{0}: {1}", generatorVersion, ex);
+ return false;
+ }
+ }
+
+ public static bool IsGeneratedUniGLTFAndOlder(this glTF gltf, int major, int minor)
+ {
+ if (gltf == null) return false;
+ if (gltf.asset == null) return false;
+ return IsGeneratedUniGLTFAndOlderThan(gltf.asset.generator, major, minor);
+ }
}
}
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfParser.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfParser.cs
index d08aad586..cc561be08 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfParser.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/GltfParser.cs
@@ -25,51 +25,6 @@ namespace UniGLTF
///
public IStorage Storage;
- public static bool IsGeneratedUniGLTFAndOlderThan(string generatorVersion, int major, int minor)
- {
- if (string.IsNullOrEmpty(generatorVersion)) return false;
- if (generatorVersion == "UniGLTF") return true;
- if (!generatorVersion.FastStartsWith("UniGLTF-")) return false;
-
- try
- {
- var splitted = generatorVersion.Substring(8).Split('.');
- var generatorMajor = int.Parse(splitted[0]);
- var generatorMinor = int.Parse(splitted[1]);
-
- if (generatorMajor < major)
- {
- return true;
- }
- else if (generatorMajor > major)
- {
- return false;
- }
- else
- {
- if (generatorMinor >= minor)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- }
- catch (Exception ex)
- {
- Debug.LogWarningFormat("{0}: {1}", generatorVersion, ex);
- return false;
- }
- }
-
- public bool IsGeneratedUniGLTFAndOlder(int major, int minor)
- {
- if (GLTF == null) return false;
- if (GLTF.asset == null) return false;
- return IsGeneratedUniGLTFAndOlderThan(GLTF.asset.generator, major, minor);
- }
#region Parse
public void ParsePath(string path)
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs
index e77e54f7a..1634b8192 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/ImporterContext.cs
@@ -126,7 +126,7 @@ namespace UniGLTF
var index = i;
using (MeasureTime("ReadMesh"))
{
- var x = meshImporter.ReadMesh(this, index, inverter);
+ var x = meshImporter.ReadMesh(GLTF, index, inverter);
var y = await BuildMeshAsync(awaitCaller, MeasureTime, x, index);
Meshes.Add(y);
}
diff --git a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshImporter.cs b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshImporter.cs
index 42c87fddd..cd6d73f85 100644
--- a/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshImporter.cs
+++ b/Assets/UniGLTF/Runtime/UniGLTF/IO/MeshImporter.cs
@@ -124,7 +124,7 @@ namespace UniGLTF
///
///
///
- public void ImportMeshIndependentVertexBuffer(ImporterContext ctx, glTFMesh gltfMesh, IAxisInverter inverter)
+ public void ImportMeshIndependentVertexBuffer(glTF gltf, glTFMesh gltfMesh, IAxisInverter inverter)
{
foreach (var prim in gltfMesh.primitives)
{
@@ -132,14 +132,14 @@ namespace UniGLTF
var indexBuffer = prim.indices;
// position は必ずある
- var positions = ctx.GLTF.GetArrayFromAccessor(prim.attributes.POSITION);
+ var positions = gltf.GetArrayFromAccessor(prim.attributes.POSITION);
var fillLength = m_positions.Count;
m_positions.AddRange(positions.Select(inverter.InvertVector3));
// normal
if (prim.attributes.NORMAL != -1)
{
- var normals = ctx.GLTF.GetArrayFromAccessor(prim.attributes.NORMAL);
+ var normals = gltf.GetArrayFromAccessor(prim.attributes.NORMAL);
if (normals.Length != positions.Length)
{
throw new Exception("different length");
@@ -151,7 +151,7 @@ namespace UniGLTF
#if false
if (prim.attributes.TANGENT != -1)
{
- var tangents = ctx.GLTF.GetArrayFromAccessor(prim.attributes.TANGENT);
+ var tangents = gltf.GetArrayFromAccessor(prim.attributes.TANGENT);
if (tangents.Length != positions.Length)
{
throw new Exception("different length");
@@ -164,12 +164,12 @@ namespace UniGLTF
// uv
if (prim.attributes.TEXCOORD_0 != -1)
{
- var uvs = ctx.GLTF.GetArrayFromAccessor(prim.attributes.TEXCOORD_0);
+ var uvs = gltf.GetArrayFromAccessor(prim.attributes.TEXCOORD_0);
if (uvs.Length != positions.Length)
{
throw new Exception("different length");
}
- if (ctx.Parser.IsGeneratedUniGLTFAndOlder(1, 16))
+ if (gltf.IsGeneratedUniGLTFAndOlder(1, 16))
{
#pragma warning disable 0612
// backward compatibility
@@ -187,7 +187,7 @@ namespace UniGLTF
// uv2
if (prim.attributes.TEXCOORD_1 != -1)
{
- var uvs = ctx.GLTF.GetArrayFromAccessor(prim.attributes.TEXCOORD_1);
+ var uvs = gltf.GetArrayFromAccessor(prim.attributes.TEXCOORD_1);
if (uvs.Length != positions.Length)
{
throw new Exception("different length");
@@ -199,7 +199,7 @@ namespace UniGLTF
// color
if (prim.attributes.COLOR_0 != -1)
{
- var colors = ctx.GLTF.GetArrayFromAccessor(prim.attributes.COLOR_0);
+ var colors = gltf.GetArrayFromAccessor(prim.attributes.COLOR_0);
if (colors.Length != positions.Length)
{
throw new Exception("different length");
@@ -211,8 +211,8 @@ namespace UniGLTF
// skin
if (prim.attributes.JOINTS_0 != -1 && prim.attributes.WEIGHTS_0 != -1)
{
- var (joints0, jointsLength) = JointsAccessor.GetAccessor(ctx.GLTF, prim.attributes.JOINTS_0);
- var (weights0, weightsLength) = WeightsAccessor.GetAccessor(ctx.GLTF, prim.attributes.WEIGHTS_0);
+ var (joints0, jointsLength) = JointsAccessor.GetAccessor(gltf, prim.attributes.JOINTS_0);
+ var (weights0, weightsLength) = WeightsAccessor.GetAccessor(gltf, prim.attributes.WEIGHTS_0);
if (jointsLength != positions.Length)
{
throw new Exception("different length");
@@ -256,7 +256,7 @@ namespace UniGLTF
var blendShape = new BlendShape(i.ToString());
if (primTarget.POSITION != -1)
{
- var array = ctx.GLTF.GetArrayFromAccessor(primTarget.POSITION);
+ var array = gltf.GetArrayFromAccessor(primTarget.POSITION);
if (array.Length != positions.Length)
{
throw new Exception("different length");
@@ -266,7 +266,7 @@ namespace UniGLTF
}
if (primTarget.NORMAL != -1)
{
- var array = ctx.GLTF.GetArrayFromAccessor(primTarget.NORMAL);
+ var array = gltf.GetArrayFromAccessor(primTarget.NORMAL);
if (array.Length != positions.Length)
{
throw new Exception("different length");
@@ -276,7 +276,7 @@ namespace UniGLTF
}
if (primTarget.TANGENT != -1)
{
- var array = ctx.GLTF.GetArrayFromAccessor(primTarget.TANGENT);
+ var array = gltf.GetArrayFromAccessor(primTarget.TANGENT);
if (array.Length != positions.Length)
{
throw new Exception("different length");
@@ -290,7 +290,7 @@ namespace UniGLTF
var indices =
(indexBuffer >= 0)
- ? ctx.GLTF.GetIndices(indexBuffer)
+ ? gltf.GetIndices(indexBuffer)
: TriangleUtil.FlipTriangle(Enumerable.Range(0, m_positions.Count)).ToArray() // without index array
;
for (int i = 0; i < indices.Length; ++i)
@@ -313,55 +313,55 @@ namespace UniGLTF
///
///
///
- public void ImportMeshSharingVertexBuffer(ImporterContext ctx, glTFMesh gltfMesh, IAxisInverter inverter)
+ public void ImportMeshSharingVertexBuffer(glTF gltf, glTFMesh gltfMesh, IAxisInverter inverter)
{
{
// 同じVertexBufferを共有しているので先頭のモノを使う
var prim = gltfMesh.primitives.First();
- m_positions.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.POSITION).SelectInplace(inverter.InvertVector3));
+ m_positions.AddRange(gltf.GetArrayFromAccessor(prim.attributes.POSITION).SelectInplace(inverter.InvertVector3));
// normal
if (prim.attributes.NORMAL != -1)
{
- m_normals.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.NORMAL).SelectInplace(inverter.InvertVector3));
+ m_normals.AddRange(gltf.GetArrayFromAccessor(prim.attributes.NORMAL).SelectInplace(inverter.InvertVector3));
}
#if false
// tangent
if (prim.attributes.TANGENT != -1)
{
- tangents.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.TANGENT).SelectInplace(inverter.InvertVector4));
+ tangents.AddRange(gltf.GetArrayFromAccessor(prim.attributes.TANGENT).SelectInplace(inverter.InvertVector4));
}
#endif
// uv
if (prim.attributes.TEXCOORD_0 != -1)
{
- if (ctx.Parser.IsGeneratedUniGLTFAndOlder(1, 16))
+ if (gltf.IsGeneratedUniGLTFAndOlder(1, 16))
{
#pragma warning disable 0612
// backward compatibility
- m_uv.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.TEXCOORD_0).SelectInplace(x => x.ReverseY()));
+ m_uv.AddRange(gltf.GetArrayFromAccessor(prim.attributes.TEXCOORD_0).SelectInplace(x => x.ReverseY()));
#pragma warning restore 0612
}
else
{
- m_uv.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.TEXCOORD_0).SelectInplace(x => x.ReverseUV()));
+ m_uv.AddRange(gltf.GetArrayFromAccessor(prim.attributes.TEXCOORD_0).SelectInplace(x => x.ReverseUV()));
}
}
// uv2
if (prim.attributes.TEXCOORD_1 != -1)
{
- m_uv2.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.TEXCOORD_1).SelectInplace(x => x.ReverseUV()));
+ m_uv2.AddRange(gltf.GetArrayFromAccessor(prim.attributes.TEXCOORD_1).SelectInplace(x => x.ReverseUV()));
}
// color
if (prim.attributes.COLOR_0 != -1)
{
- if (ctx.GLTF.accessors[prim.attributes.COLOR_0].TypeCount == 3)
+ if (gltf.accessors[prim.attributes.COLOR_0].TypeCount == 3)
{
- var vec3Color = ctx.GLTF.GetArrayFromAccessor(prim.attributes.COLOR_0);
+ var vec3Color = gltf.GetArrayFromAccessor(prim.attributes.COLOR_0);
m_colors.AddRange(new Color[vec3Color.Length]);
for (int i = 0; i < vec3Color.Length; i++)
@@ -370,21 +370,21 @@ namespace UniGLTF
m_colors[i] = new Color(color.x, color.y, color.z);
}
}
- else if (ctx.GLTF.accessors[prim.attributes.COLOR_0].TypeCount == 4)
+ else if (gltf.accessors[prim.attributes.COLOR_0].TypeCount == 4)
{
- m_colors.AddRange(ctx.GLTF.GetArrayFromAccessor(prim.attributes.COLOR_0));
+ m_colors.AddRange(gltf.GetArrayFromAccessor(prim.attributes.COLOR_0));
}
else
{
- throw new NotImplementedException(string.Format("unknown color type {0}", ctx.GLTF.accessors[prim.attributes.COLOR_0].type));
+ throw new NotImplementedException(string.Format("unknown color type {0}", gltf.accessors[prim.attributes.COLOR_0].type));
}
}
// skin
if (prim.attributes.JOINTS_0 != -1 && prim.attributes.WEIGHTS_0 != -1)
{
- var (joints0, jointsLength) = JointsAccessor.GetAccessor(ctx.GLTF, prim.attributes.JOINTS_0);
- var (weights0, weightsLength) = WeightsAccessor.GetAccessor(ctx.GLTF, prim.attributes.WEIGHTS_0);
+ var (joints0, jointsLength) = JointsAccessor.GetAccessor(gltf, prim.attributes.JOINTS_0);
+ var (weights0, weightsLength) = WeightsAccessor.GetAccessor(gltf, prim.attributes.WEIGHTS_0);
for (int j = 0; j < jointsLength; ++j)
{
@@ -424,17 +424,17 @@ namespace UniGLTF
if (primTarget.POSITION != -1)
{
blendShape.Positions.Assign(
- ctx.GLTF.GetArrayFromAccessor(primTarget.POSITION), inverter.InvertVector3);
+ gltf.GetArrayFromAccessor(primTarget.POSITION), inverter.InvertVector3);
}
if (primTarget.NORMAL != -1)
{
blendShape.Normals.Assign(
- ctx.GLTF.GetArrayFromAccessor(primTarget.NORMAL), inverter.InvertVector3);
+ gltf.GetArrayFromAccessor(primTarget.NORMAL), inverter.InvertVector3);
}
if (primTarget.TANGENT != -1)
{
blendShape.Tangents.Assign(
- ctx.GLTF.GetArrayFromAccessor(primTarget.TANGENT), inverter.InvertVector3);
+ gltf.GetArrayFromAccessor(primTarget.TANGENT), inverter.InvertVector3);
}
}
}
@@ -448,7 +448,7 @@ namespace UniGLTF
}
else
{
- var indices = ctx.GLTF.GetIndices(prim.indices);
+ var indices = gltf.GetIndices(prim.indices);
m_subMeshes.Add(indices);
}
@@ -530,18 +530,18 @@ namespace UniGLTF
return sharedAttributes;
}
- public MeshContext ReadMesh(ImporterContext ctx, int meshIndex, IAxisInverter inverter)
+ public MeshContext ReadMesh(glTF gltf, int meshIndex, IAxisInverter inverter)
{
- var gltfMesh = ctx.GLTF.meshes[meshIndex];
+ var gltfMesh = gltf.meshes[meshIndex];
var meshContext = new MeshContext(gltfMesh.name, meshIndex);
if (HasSharedVertexBuffer(gltfMesh))
{
- meshContext.ImportMeshSharingVertexBuffer(ctx, gltfMesh, inverter);
+ meshContext.ImportMeshSharingVertexBuffer(gltf, gltfMesh, inverter);
}
else
{
- meshContext.ImportMeshIndependentVertexBuffer(ctx, gltfMesh, inverter);
+ meshContext.ImportMeshIndependentVertexBuffer(gltf, gltfMesh, inverter);
}
meshContext.RenameBlendShape(gltfMesh);
diff --git a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs
index b2750e424..9cf2512a1 100644
--- a/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs
+++ b/Assets/UniGLTF/Tests/UniGLTF/UniGLTFTests.cs
@@ -185,12 +185,12 @@ namespace UniGLTF
[Test]
public void VersionChecker()
{
- Assert.False(GltfParser.IsGeneratedUniGLTFAndOlderThan("hoge", 1, 16));
- Assert.False(GltfParser.IsGeneratedUniGLTFAndOlderThan("UniGLTF-1.16", 1, 16));
- Assert.True(GltfParser.IsGeneratedUniGLTFAndOlderThan("UniGLTF-1.15", 1, 16));
- Assert.False(GltfParser.IsGeneratedUniGLTFAndOlderThan("UniGLTF-11.16", 1, 16));
- Assert.True(GltfParser.IsGeneratedUniGLTFAndOlderThan("UniGLTF-0.16", 1, 16));
- Assert.True(GltfParser.IsGeneratedUniGLTFAndOlderThan("UniGLTF", 1, 16));
+ Assert.False(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("hoge", 1, 16));
+ Assert.False(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("UniGLTF-1.16", 1, 16));
+ Assert.True(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("UniGLTF-1.15", 1, 16));
+ Assert.False(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("UniGLTF-11.16", 1, 16));
+ Assert.True(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("UniGLTF-0.16", 1, 16));
+ Assert.True(glTFExtensions.IsGeneratedUniGLTFAndOlderThan("UniGLTF", 1, 16));
}
[Test]