@@ -93,7 +93,7 @@ internal Accessor()
9393 internal MemoryAccessor _GetMemoryAccessor ( )
9494 {
9595 var view = SourceBufferView ;
96- var info = new MemoryAccessInfo ( null , ByteOffset , Count , view . ByteStride , Dimensions , Encoding , Normalized ) ;
96+ var info = new MemoryEncoding ( null , ByteOffset , Count , view . ByteStride , Dimensions , Encoding , Normalized ) ;
9797 return new MemoryAccessor ( view . Content , info ) ;
9898 }
9999
@@ -431,9 +431,12 @@ internal void ValidatePositions(Validation.ValidationContext result)
431431 result = result . GetContext ( this ) ;
432432
433433 SourceBufferView . ValidateBufferUsageGPU ( result , BufferMode . ARRAY_BUFFER ) ;
434- result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
435- result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
436434 result . CheckLinkMustBeAnyOf ( nameof ( Dimensions ) , Dimensions , DimensionType . VEC3 ) ;
435+ if ( ! this . LogicalParent . MeshQuantizationAllowed )
436+ {
437+ result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
438+ result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
439+ }
437440
438441 var positions = this . AsVector3Array ( ) ;
439442
@@ -448,9 +451,17 @@ internal void ValidateNormals(Validation.ValidationContext result)
448451 result = result . GetContext ( this ) ;
449452
450453 SourceBufferView . ValidateBufferUsageGPU ( result , BufferMode . ARRAY_BUFFER ) ;
451- result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
452- result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
453454 result . CheckLinkMustBeAnyOf ( nameof ( Dimensions ) , Dimensions , DimensionType . VEC3 ) ;
455+ if ( ! this . LogicalParent . MeshQuantizationAllowed )
456+ {
457+ result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
458+ result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
459+ }
460+ else
461+ {
462+ if ( Normalized ) result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . BYTE , EncodingType . SHORT ) ;
463+ else result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
464+ }
454465
455466 var normals = this . AsVector3Array ( ) ;
456467
@@ -468,17 +479,30 @@ internal void ValidateTangents(Validation.ValidationContext result)
468479 result = result . GetContext ( this ) ;
469480
470481 SourceBufferView . ValidateBufferUsageGPU ( result , BufferMode . ARRAY_BUFFER ) ;
471- result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
472- result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
473482 result . CheckLinkMustBeAnyOf ( nameof ( Dimensions ) , Dimensions , DimensionType . VEC3 , DimensionType . VEC4 ) ;
483+ if ( ! this . LogicalParent . MeshQuantizationAllowed )
484+ {
485+ result . CheckLinkMustBeAnyOf ( nameof ( Normalized ) , Normalized , false ) ;
486+ result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
487+ }
488+ else
489+ {
490+ if ( Normalized ) result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . BYTE , EncodingType . SHORT ) ;
491+ else result . CheckLinkMustBeAnyOf ( nameof ( Encoding ) , Encoding , EncodingType . FLOAT ) ;
492+ }
474493
475- var tangents = this . AsVector4Array ( ) ;
494+ // when Dimensions == VEC3, its morph target tangent deltas
476495
477- for ( int i = 0 ; i < tangents . Count ; ++ i )
496+ if ( Dimensions == DimensionType . VEC4 )
478497 {
479- if ( result . TryFixTangentOrError ( i , tangents [ i ] ) )
498+ var tangents = this . AsVector4Array ( ) ;
499+
500+ for ( int i = 0 ; i < tangents . Count ; ++ i )
480501 {
481- tangents [ i ] = tangents [ i ] . SanitizeTangent ( ) ;
502+ if ( result . TryFixTangentOrError ( i , tangents [ i ] ) )
503+ {
504+ tangents [ i ] = tangents [ i ] . SanitizeTangent ( ) ;
505+ }
482506 }
483507 }
484508 }
0 commit comments