private static boolean generateTangents(Mesh mesh) {
        Mesh.Mode mode = mesh.getMode();
        boolean hasTriangles;
        
        if (mesh.getBuffer(Type.TexCoord) == null || mesh.getBuffer(Type.Normal) == null) {
            logger.log(Level.SEVERE, "Tangent generation requires both a normal and texCoord buffer");
            return false;
        }    
        
        switch (mode) {
            case Points:
            case Lines:
            case LineStrip:
            case LineLoop:
                hasTriangles = false; // skip this mesh
                logger.log(Level.SEVERE, "Tangent generation requires a mesh with Triangles", mode);
                break;

            case Triangles:
            case TriangleFan:
            case TriangleStrip:
            case Patch:
                hasTriangles = true;
                break;

            default:
                logger.log(Level.SEVERE, "Tangent generation isn't implemented for mode={0}", mode);
                return false;
        }
        
        if (hasTriangles) {
            MikkTSpaceImpl context = new MikkTSpaceImpl(mesh);
            boolean results = genTangSpaceDefault(context);
            TangentUtils.generateBindPoseTangentsIfNecessary(mesh);
            return results;
        }
        return false;
    }
A private constructor to inhibit instantiation of this class.
jme3-core/src/main/java/com/jme3/util/mikktspace/MikktspaceTangentGenerator.java