Example #1
0
        internal static void ValidateVertexAttributes(VALIDATIONCTX result, IReadOnlyDictionary <string, Accessor> attributes, int skinsMaxJointCount)
        {
            if (result.TryFix)
            {
                foreach (var kvp in attributes.Where(item => item.Key != "POSITION"))
                {
                    // remove unnecessary bounds
                    kvp.Value._min.Clear();
                    kvp.Value._max.Clear();
                }
            }

            if (attributes.TryGetValue("POSITION", out Accessor positions))
            {
                positions._ValidatePositions(result);
            }
            else
            {
                result.AddSemanticWarning("No POSITION attribute found.");
            }

            if (attributes.TryGetValue("NORMAL", out Accessor normals))
            {
                normals._ValidateNormals(result);
            }
            if (attributes.TryGetValue("TANGENT", out Accessor tangents))
            {
                tangents._ValidateTangents(result);
            }
            if (normals == null && tangents != null)
            {
                result.AddSemanticWarning("TANGENT", "attribute without NORMAL found.");
            }

            if (attributes.TryGetValue("JOINTS_0", out Accessor joints0))
            {
                joints0._ValidateJoints(result, "JOINTS_0", skinsMaxJointCount);
            }
            if (attributes.TryGetValue("JOINTS_1", out Accessor joints1))
            {
                joints0._ValidateJoints(result, "JOINTS_1", skinsMaxJointCount);
            }

            attributes.TryGetValue("WEIGHTS_0", out Accessor weights0);
            attributes.TryGetValue("WEIGHTS_1", out Accessor weights1);
            _ValidateWeights(result, weights0, weights1);
        }