static void AddSentinel( TESStesselator *tess, TESSreal smin, TESSreal smax, TESSreal t ) /* * We add two sentinel edges above and below all other edges, * to avoid special cases at the top and bottom. */ { TESShalfEdge *e; ActiveRegion *reg = (ActiveRegion *)bucketAlloc( tess->regionPool ); if (reg == NULL) longjmp(tess->env,1); e = tessMeshMakeEdge( tess->mesh ); if (e == NULL) longjmp(tess->env,1); e->Org->s = smax; e->Org->t = t; e->Dst->s = smin; e->Dst->t = t; tess->event = e->Dst; /* initialize it */ reg->eUp = e; reg->windingNumber = 0; reg->inside = FALSE; reg->fixUpperEdge = FALSE; reg->sentinel = TRUE; reg->dirty = FALSE; reg->nodeUp = dictInsert( tess->dict, reg ); if (reg->nodeUp == NULL) longjmp(tess->env,1); }
static void AddSentinel( GLUtesselator *tess, GLdouble t ) /* * We add two sentinel edges above and below all other edges, * to avoid special cases at the top and bottom. */ { GLUhalfEdge *e; ActiveRegion *reg = (ActiveRegion *)memAlloc( sizeof( ActiveRegion )); if (reg == NULL) longjmp(tess->env,1); e = __gl_meshMakeEdge( tess->mesh ); if (e == NULL) longjmp(tess->env,1); e->Org->s = SENTINEL_COORD; e->Org->t = t; e->Dst->s = -SENTINEL_COORD; e->Dst->t = t; tess->event = e->Dst; /* initialize it */ reg->eUp = e; reg->windingNumber = 0; reg->inside = FALSE; reg->fixUpperEdge = FALSE; reg->sentinel = TRUE; reg->dirty = FALSE; reg->nodeUp = dictInsert( tess->dict, reg ); /* __gl_dictListInsertBefore */ if (reg->nodeUp == NULL) longjmp(tess->env,1); }