Browse Source

Added a few helper methods
Improved DOCs

Vicente Penades 5 years ago
parent
commit
68c96bea65

+ 1 - 1
build/SharpGLTF.CodeGen/SharpGLTF.CodeGen.csproj

@@ -8,7 +8,7 @@
 
 
   <ItemGroup>
   <ItemGroup>
     <PackageReference Include="LibGit2Sharp" Version="0.26.2" />    
     <PackageReference Include="LibGit2Sharp" Version="0.26.2" />    
-    <PackageReference Include="NJsonSchema.CodeGeneration.CSharp" Version="10.2.0" />
+    <PackageReference Include="NJsonSchema.CodeGeneration.CSharp" Version="10.2.1" />
   </ItemGroup>
   </ItemGroup>
 
 
 </Project>
 </Project>

+ 17 - 3
src/SharpGLTF.Core/IO/ReadContext.cs

@@ -325,11 +325,25 @@ namespace SharpGLTF.IO
 
 
         #region extras
         #region extras
 
 
+        /// <summary>
+        /// Tries to identify a stream as a text (glTF) or binary (GLB) format.
+        /// </summary>
+        /// <param name="stream">An open <see cref="Stream"/> where <see cref="Stream.CanSeek"/> must be true.</param>
+        /// <returns>True if it's a binary GLB format.</returns>
+        /// <remarks>
+        /// After identification, the <see cref="Stream.Position"/> will be reset to the position it had before calling this method.
+        /// </remarks>
+        public static bool IdentifyBinaryContainer(Stream stream)
+        {
+            Guard.NotNull(stream, nameof(stream));
+            return BinarySerialization._Identify(stream);
+        }
+
         public static String ReadJson(Stream stream)
         public static String ReadJson(Stream stream)
         {
         {
             Guard.NotNull(stream, nameof(stream));
             Guard.NotNull(stream, nameof(stream));
 
 
-            bool binaryFile = BinarySerialization._Identify(stream);
+            bool binaryFile = IdentifyBinaryContainer(stream);
 
 
             if (binaryFile)
             if (binaryFile)
             {
             {
@@ -348,7 +362,7 @@ namespace SharpGLTF.IO
         {
         {
             Guard.NotNull(stream, nameof(stream));
             Guard.NotNull(stream, nameof(stream));
 
 
-            bool binaryFile = BinarySerialization._Identify(stream);
+            bool binaryFile = IdentifyBinaryContainer(stream);
 
 
             if (binaryFile)
             if (binaryFile)
             {
             {
@@ -360,6 +374,6 @@ namespace SharpGLTF.IO
             return stream.ReadBytesToEnd();
             return stream.ReadBytesToEnd();
         }
         }
 
 
-#endregion
+        #endregion
     }
     }
 }
 }

+ 12 - 2
src/SharpGLTF.Core/Runtime/ArmatureInstance.cs

@@ -39,7 +39,7 @@ namespace SharpGLTF.Runtime
         private readonly IReadOnlyList<NodeTemplate> _NodeTemplates;
         private readonly IReadOnlyList<NodeTemplate> _NodeTemplates;
         private readonly IReadOnlyList<NodeInstance> _NodeInstances;
         private readonly IReadOnlyList<NodeInstance> _NodeInstances;
 
 
-        private readonly AnimationTrackInfo[] _AnimationTracks;
+        private readonly IReadOnlyList<AnimationTrackInfo> _AnimationTracks;
 
 
         #endregion
         #endregion
 
 
@@ -64,9 +64,19 @@ namespace SharpGLTF.Runtime
 
 
         #region API
         #region API
 
 
+        /// <summary>
+        /// Finds the index of a named animation track.
+        /// </summary>
+        /// <param name="name">The animation name</param>
+        /// <returns>The index of the animation track, or -1 if not found.</returns>
         public int IndexOfTrack(string name)
         public int IndexOfTrack(string name)
         {
         {
-            return Array.FindIndex(_AnimationTracks, item => item.Name == name);
+            for (int i = 0; i < _AnimationTracks.Count; ++i)
+            {
+                if (_AnimationTracks[i].Name == name) return i;
+            }
+
+            return -1;
         }
         }
 
 
         public void SetLocalMatrix(string name, XFORM localMatrix)
         public void SetLocalMatrix(string name, XFORM localMatrix)

+ 7 - 2
src/SharpGLTF.Core/Runtime/ArmatureTemplate.cs

@@ -103,11 +103,16 @@ namespace SharpGLTF.Runtime
 
 
         #region properties
         #region properties
 
 
+        /// <summary>
+        /// Gets the flattened list of nodes, ordered so parents appear before children.
+        /// </summary>
         public IReadOnlyList<NodeTemplate> Nodes => _NodeTemplates;
         public IReadOnlyList<NodeTemplate> Nodes => _NodeTemplates;
 
 
-        public AnimationTrackInfo[] Tracks => _AnimationTracks;
+        /// <summary>
+        /// Gets the animations tracks info.
+        /// </summary>
+        public IReadOnlyList<AnimationTrackInfo> Tracks => _AnimationTracks;
 
 
         #endregion
         #endregion
-
     }
     }
 }
 }

+ 1 - 1
src/SharpGLTF.Core/Schema2/gltf.Serialization.Read.cs

@@ -17,7 +17,7 @@ namespace SharpGLTF.Schema2
     /// engine and uploaded to the GPU if neccesary.
     /// engine and uploaded to the GPU if neccesary.
     /// </summary>
     /// </summary>
     /// <param name="image">The Image containing the texture</param>
     /// <param name="image">The Image containing the texture</param>
-    /// <returns>true if we want to keep the image memory data in Image. Otherwise the memory will be cleared.</returns>    
+    /// <returns>true if we want to keep the image memory data in Image. Otherwise the memory will be cleared.</returns>
     public delegate Boolean ImageDecodeCallback(Image image);
     public delegate Boolean ImageDecodeCallback(Image image);
 
 
     /// <summary>
     /// <summary>

+ 3 - 3
src/SharpGLTF.Toolkit/Geometry/MeshBuilder.cs

@@ -167,7 +167,7 @@ namespace SharpGLTF.Geometry
             return _UsePrimitive((material, primitiveVertexCount));
             return _UsePrimitive((material, primitiveVertexCount));
         }
         }
 
 
-        public void AddMesh(MeshBuilder<TMaterial, TvG, TvM, TvS> mesh, Func<TMaterial, TMaterial> materialTransform, Func<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
+        public void AddMesh(MeshBuilder<TMaterial, TvG, TvM, TvS> mesh, Func<TMaterial, TMaterial> materialTransform, Converter<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
         {
         {
             if (mesh == null) return;
             if (mesh == null) return;
 
 
@@ -190,7 +190,7 @@ namespace SharpGLTF.Geometry
             AddMesh<TMaterial>(mesh, m => m, v => VertexBuilder<TvG, TvM, TvS>.CreateFrom(v).TransformedBy(vertexTransform));
             AddMesh<TMaterial>(mesh, m => m, v => VertexBuilder<TvG, TvM, TvS>.CreateFrom(v).TransformedBy(vertexTransform));
         }
         }
 
 
-        public void AddMesh(IMeshBuilder<TMaterial> mesh, Func<TMaterial, TMaterial> materialTransform, Func<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
+        public void AddMesh(IMeshBuilder<TMaterial> mesh, Func<TMaterial, TMaterial> materialTransform, Converter<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
         {
         {
             if (mesh == null) return;
             if (mesh == null) return;
 
 
@@ -199,7 +199,7 @@ namespace SharpGLTF.Geometry
             AddMesh<TMaterial>(mesh, materialTransform, vertexTransform);
             AddMesh<TMaterial>(mesh, materialTransform, vertexTransform);
         }
         }
 
 
-        public void AddMesh<TSourceMaterial>(IMeshBuilder<TSourceMaterial> mesh, Func<TSourceMaterial, TMaterial> materialTransform, Func<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
+        public void AddMesh<TSourceMaterial>(IMeshBuilder<TSourceMaterial> mesh, Func<TSourceMaterial, TMaterial> materialTransform, Converter<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransform)
         {
         {
             if (mesh == null) return;
             if (mesh == null) return;
 
 

+ 4 - 2
src/SharpGLTF.Toolkit/Geometry/PrimitiveBuilder.cs

@@ -302,7 +302,7 @@ namespace SharpGLTF.Geometry
             return AddQuadrangle(ConvertVertex(a), ConvertVertex(b), ConvertVertex(c), ConvertVertex(d));
             return AddQuadrangle(ConvertVertex(a), ConvertVertex(b), ConvertVertex(c), ConvertVertex(d));
         }
         }
 
 
-        internal void AddPrimitive(PrimitiveBuilder<TMaterial, TvG, TvM, TvS> primitive, Func<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
+        internal void AddPrimitive(PrimitiveBuilder<TMaterial, TvG, TvM, TvS> primitive, Converter<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
         {
         {
             if (primitive == null) return;
             if (primitive == null) return;
 
 
@@ -311,7 +311,7 @@ namespace SharpGLTF.Geometry
             AddPrimitive<TMaterial>(primitive, v => vertexTransformFunc((VertexBuilder<TvG, TvM, TvS>)v));
             AddPrimitive<TMaterial>(primitive, v => vertexTransformFunc((VertexBuilder<TvG, TvM, TvS>)v));
         }
         }
 
 
-        internal void AddPrimitive<TAnyMaterial>(IPrimitiveReader<TAnyMaterial> primitive, Func<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
+        internal void AddPrimitive<TAnyMaterial>(IPrimitiveReader<TAnyMaterial> primitive, Converter<IVertexBuilder, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
         {
         {
             if (primitive == null) return;
             if (primitive == null) return;
 
 
@@ -399,6 +399,8 @@ namespace SharpGLTF.Geometry
 
 
         public void TransformVertices(Func<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
         public void TransformVertices(Func<VertexBuilder<TvG, TvM, TvS>, VertexBuilder<TvG, TvM, TvS>> vertexTransformFunc)
         {
         {
+            Guard.NotNull(vertexTransformFunc, nameof(vertexTransformFunc));
+
             _Vertices.TransformVertices(vertexTransformFunc);
             _Vertices.TransformVertices(vertexTransformFunc);
 
 
             TvG geoFunc(TvG g) => vertexTransformFunc(new VertexBuilder<TvG, TvM, TvS>(g, default, default(TvS))).Geometry;
             TvG geoFunc(TvG g) => vertexTransformFunc(new VertexBuilder<TvG, TvM, TvS>(g, default, default(TvS))).Geometry;