    // C function void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode )

    public static native void glTransformFeedbackVaryings(
        int program,
        String[] varyings,
        int bufferMode
    );

