internal void ValidateTangents(Validation.ValidationContext result) { result = result.GetContext(this); SourceBufferView.ValidateBufferUsageGPU(result, BufferMode.ARRAY_BUFFER); result.CheckLinkMustBeAnyOf(nameof(Normalized), Normalized, false); result.CheckLinkMustBeAnyOf(nameof(Encoding), Encoding, EncodingType.FLOAT); result.CheckLinkMustBeAnyOf(nameof(Dimensions), Dimensions, DimensionType.VEC3, DimensionType.VEC4); var tangents = this.AsVector4Array(); for (int i = 0; i < tangents.Count; ++i) { if (result.TryFixTangentOrError(i, tangents[i])) { tangents[i] = tangents[i].SanitizeTangent(); } } }
internal void ValidateTangents(Validation.ValidationContext result) { result = result.GetContext(this); SourceBufferView.ValidateBufferUsageGPU(result, BufferMode.ARRAY_BUFFER); result.CheckLinkMustBeAnyOf(nameof(Dimensions), Dimensions, DimensionType.VEC3, DimensionType.VEC4); if (!this.LogicalParent.MeshQuantizationAllowed) { result.CheckLinkMustBeAnyOf(nameof(Normalized), Normalized, false); result.CheckLinkMustBeAnyOf(nameof(Encoding), Encoding, EncodingType.FLOAT); } else { if (Normalized) { result.CheckLinkMustBeAnyOf(nameof(Encoding), Encoding, EncodingType.BYTE, EncodingType.SHORT); } else { result.CheckLinkMustBeAnyOf(nameof(Encoding), Encoding, EncodingType.FLOAT); } } // when Dimensions == VEC3, its morph target tangent deltas if (Dimensions == DimensionType.VEC4) { var tangents = this.AsVector4Array(); for (int i = 0; i < tangents.Count; ++i) { if (result.TryFixTangentOrError(i, tangents[i])) { tangents[i] = tangents[i].SanitizeTangent(); } } } }