#include "glu.h"

typedef struct Triangle {
   int v[3];
   struct Triangle *prev;
} Triangle;

typedef struct Vertex {
    double pt[3];
    int index;
    struct Vertex *prev;
} Vertex;

typedef struct TessContext {
   Triangle *latest_t;
   int n_tris;
   int reversed;

   Vertex *v_prev;
   Vertex *v_prevprev;
   Vertex *latest_v;
   GLenum current_mode;
   int odd_even_strip;

   void (*vertex_cb)(Vertex *, struct TessContext *);
} TessContext;

TessContext *tessellateD
    (double **verts,
     int *nverts,
     int **tris,
     int *ntris,
     const double **contoursbegin,
     const double **contoursend);

TessContext *tessellate
    (float **verts,
     int *nverts,
     int **tris,
     int *ntris,
     const float **contoursbegin,
     const float **contoursend);