public override IEnumerable <Member> GlmMembers()
        {
            if (DisableGlmGen)
            {
                yield break;
            }

            var ap  = string.IsNullOrEmpty(FirstParameter) ? new string[] { } : new[] { FirstParameter };
            var ap2 = string.IsNullOrEmpty(FirstParameter) ? "" : FirstParameter.Split(' ').Last() + ", ";

            BuildComment(false);
            yield return(new Function(ReturnType, Name + OriginalType.GenericSuffix)
            {
                Static = true,
                Comment = Comment,
                Parameters = ap.Concat(ParameterNames.Select((p, i) => ParameterTypes[i].NameThat + " " + p)),
                CodeString = $"{OriginalType.NameThat}.{Name}({ap2 + ParameterNames.CommaSeparated()})"
            });

            // scalar version
            if (OriginalType is VectorType && ((VectorType)OriginalType).Components == 3 &&
                CanScalar0 && CanScalar1 && CanScalar2)
            {
                yield return(new Function(ReturnType.BaseType ?? ReturnType, Name + OriginalType.GenericSuffix)
                {
                    Static = true,
                    Comment = Comment,
                    Parameters = ap.Concat(ParameterNames.Select((p, i) => (ParameterTypes[i].BaseType ?? ParameterTypes[i]).NameThat + " " + p)),
                    CodeString = string.Format(CompString, ParameterNames.OfType <object>().ToArray())
                });
            }
        }