Browse Source

WIP: improving validation...

Vicente Penades 6 years ago
parent
commit
6e6b0c54dd

+ 1 - 0
src/SharpGLTF.Core/Schema2/gltf.Accessors.cs

@@ -349,6 +349,7 @@ namespace SharpGLTF.Schema2
         {
             base.OnValidate(result);
 
+            // TODO: check BufferView access.
             // if (_count < _countMinimum) result.AddError(this, $"Count is out of range");
             // if (_byteOffset < 0) result.AddError(this, $"ByteOffset is out of range");
 

+ 2 - 2
src/SharpGLTF.Core/Schema2/gltf.Asset.cs

@@ -99,8 +99,8 @@ namespace SharpGLTF.Schema2
                 return;
             }
 
-            // if (Version < MINVERSION) result.AddError($"Minimum supported version is {MINVERSION} but found:{MinVersion}");
-            // if (MinVersion > MAXVERSION) result.AddError( $"Maximum supported version is {MAXVERSION} but found:{MinVersion}");
+            if (Version < MINVERSION) result.AddSemanticError($"Minimum supported version is {MINVERSION} but found:{MinVersion}");
+            if (MinVersion > MAXVERSION) result.AddSemanticError( $"Maximum supported version is {MAXVERSION} but found:{MinVersion}");
 
             if (MinVersion > Version) result.AddSemanticWarning(Validation.WarnCodes.ASSET_MIN_VERSION_GREATER_THAN_VERSION, MinVersion, Version);
         }

+ 7 - 4
src/SharpGLTF.Core/Schema2/gltf.Skin.cs

@@ -72,9 +72,9 @@ namespace SharpGLTF.Schema2
 
             var node = this.LogicalParent.LogicalNodes[nodeIdx];
 
-            var accessor = GetInverseBindMatricesAccessor();
+            var matrices = GetInverseBindMatricesAccessor();
 
-            var matrix = accessor == null ? Matrix4x4.Identity : accessor.AsMatrix4x4Array()[idx];
+            var matrix = matrices == null ? Matrix4x4.Identity : matrices.AsMatrix4x4Array()[idx];
 
             return (node, matrix);
         }
@@ -244,7 +244,6 @@ namespace SharpGLTF.Schema2
 
             result.CheckReferenceIndex("Skeleton", _skeleton, this.LogicalParent.LogicalNodes);
 
-            result.CheckIsDefined("InverseBindMatrices", _inverseBindMatrices);
             result.CheckReferenceIndex("InverseBindMatrices", _inverseBindMatrices, this.LogicalParent.LogicalAccessors);
 
             if (_joints.Count < _jointsMinItems)
@@ -272,7 +271,11 @@ namespace SharpGLTF.Schema2
             {
                 if (_joints.Count != ibxAccessor.Count) result.AddLinkError(Validation.ErrorCodes.INVALID_IBM_ACCESSOR_COUNT, _joints.Count, ibxAccessor.Count);
 
-                if (ibxAccessor.Dimensions != DimensionType.MAT4) result.AddLinkError(Validation.ErrorCodes.SKIN_IBM_INVALID_FORMAT, ibxAccessor.Dimensions);
+                var isValidIBM = true;
+                isValidIBM &= ibxAccessor.Dimensions == DimensionType.MAT4;
+                isValidIBM &= ibxAccessor.SourceBufferView.DeviceBufferTarget == null;
+
+                if (!isValidIBM) result.AddLinkError(Validation.ErrorCodes.SKIN_IBM_INVALID_FORMAT, ibxAccessor.Dimensions);
                 else ibxAccessor.ValidateMatrices(result);
             }
 

+ 2 - 1
src/SharpGLTF.Core/Validation/ValidationContext.cs

@@ -48,7 +48,7 @@ namespace SharpGLTF.Validation
         {
             if (value.HasValue) return true;
 
-            AddSchemaError(property, ErrorCodes.UNDEFINED_PROPERTY);
+            AddSchemaError(property, ErrorCodes.UNDEFINED_PROPERTY, property);
 
             return false;
         }
@@ -214,6 +214,7 @@ namespace SharpGLTF.Validation
         #endregion
     }
 
+    [System.Diagnostics.DebuggerStepThrough]
     public sealed class ValidationResult
     {
         #region data