Fixed triangle output, recovery process termination.
authorGareth Hughes <gareth@valinux.com>
Fri, 10 Sep 1999 04:32:10 +0000 (04:32 +0000)
committerGareth Hughes <gareth@valinux.com>
Fri, 10 Sep 1999 04:32:10 +0000 (04:32 +0000)
src/glu/mesa/glu.c
src/glu/mesa/tess.c

index 5569ca9d49ca14d591a87c94e59c2b0b4e166777..e9037b7614d9c2c8b7baae333639051ce7a8fde4 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: glu.c,v 1.2 1999/09/10 02:03:31 gareth Exp $ */
+/* $Id: glu.c,v 1.3 1999/09/10 04:32:10 gareth Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -23,6 +23,9 @@
 
 /*
  * $Log: glu.c,v $
+ * Revision 1.3  1999/09/10 04:32:10  gareth
+ * Fixed triangle output, recovery process termination.
+ *
  * Revision 1.2  1999/09/10 02:03:31  gareth
  * Added GLU 1.3 tessellation (except winding rule code).
  *
@@ -216,14 +219,14 @@ void GLAPIENTRY gluPickMatrix( GLdouble x, GLdouble y,
 const GLubyte* GLAPIENTRY gluErrorString( GLenum errorCode )
 {
    static char *tess_error[] = {
-      "missing gluEndPolygon",
       "missing gluBeginPolygon",
-      "misoriented contour",
-      "vertex/edge intersection",
+      "missing gluBeginContour",
+      "missing gluEndPolygon",
+      "missing gluEndContour",
       "misoriented or self-intersecting loops",
       "coincident vertices",
       "colinear vertices",
-      "intersecting edges"
+      "FIST recovery process fatal error"
    };
    static char *nurbs_error[] = {
       "spline order un-supported",
index c2e0e1cd988d9f8bbb009943bf86a7462a534aba..1fb543340ae1bb4c7747575136fa9907538c1737 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: tess.c,v 1.2 1999/09/10 02:03:31 gareth Exp $ */
+/* $Id: tess.c,v 1.3 1999/09/10 04:32:10 gareth Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -114,19 +114,15 @@ GLUtesselator* GLAPIENTRY gluNewTess( void )
  *****************************************************************************/
 void GLAPIENTRY gluDeleteTess( GLUtesselator *tobj )
 {
-    DEBUGP(2, ("-> gluDeleteTess(tobj: %p)\n", tobj));
-
     if ( tobj->error == GLU_NO_ERROR && ( tobj->contour_count > 0 ) )
     {
-       /* Was gluEndContour called? */
-       tess_error_callback( tobj, GLU_TESS_ERROR4, NULL );
+       /* Was gluEndPolygon called? */
+       tess_error_callback( tobj, GLU_TESS_ERROR3, NULL );
     }
 
     /* Delete all internal structures */
     tess_cleanup( tobj );
     free( tobj );
-
-    DEBUGP(2, ("<- gluDeleteTess()\n\n"));
 }
 
 
@@ -135,20 +131,15 @@ void GLAPIENTRY gluDeleteTess( GLUtesselator *tobj )
  *****************************************************************************/
 void GLAPIENTRY gluTessBeginPolygon( GLUtesselator *tobj, void *polygon_data )
 {
-    DEBUGP(2, ("-> gluTessBeginPolygon(tobj: %p, data: %p)\n",
-              tobj, polygon_data));
-
     tobj->error = GLU_NO_ERROR;
 
     if ( tobj->current_contour != NULL )
     {
        /* gluEndPolygon was not called */
-       tess_error_callback( tobj, GLU_TESS_ERROR1, NULL );
+       tess_error_callback( tobj, GLU_TESS_ERROR3, NULL );
 
        tess_cleanup( tobj );
     }
-
-    DEBUGP(2, ("<- gluTessBeginPolygon(tobj: %p)\n\n", tobj));
 }
 
 
@@ -157,12 +148,12 @@ void GLAPIENTRY gluTessBeginPolygon( GLUtesselator *tobj, void *polygon_data )
  *****************************************************************************/
 void GLAPIENTRY gluTessBeginContour( GLUtesselator *tobj )
 {
-    DEBUGP(2, ("  -> gluTessBeginContour(tobj: %p)\n", tobj));
     TESS_CHECK_ERRORS( tobj );
 
     if ( tobj->current_contour != NULL )
     {
-       tess_error_callback( tobj, GLU_TESS_ERROR2, NULL );
+       /* gluTessEndContour was not called. */
+       tess_error_callback( tobj, GLU_TESS_ERROR4, NULL );
        return;
     }
 
@@ -192,7 +183,6 @@ void GLAPIENTRY gluTessBeginContour( GLUtesselator *tobj )
                    tobj->current_contour->maxs );
 
  cleanup:
-    DEBUGP(2, ("  <- gluTessBeginContour(tobj: %p)\n\n", tobj));
     return;
 }
 
@@ -206,11 +196,11 @@ void GLAPIENTRY gluTessVertex( GLUtesselator *tobj, GLdouble coords[3],
     tess_contour_t             *current = tobj->current_contour;
     tess_vertex_t              *last_vertex;
 
-    DEBUGP(2, ("    -> gluTessVertex(tobj: %p, (%.2f, %.2f, %.2f))\n",
-              tobj, coords[X], coords[Y], coords[Z]));
     TESS_CHECK_ERRORS( tobj );
 
-    if ( current == NULL ) {
+    if ( current == NULL )
+    {
+       /* gluTessBeginContour was not called. */
        tess_error_callback( tobj, GLU_TESS_ERROR2, NULL );
        return;
     }
@@ -270,12 +260,7 @@ void GLAPIENTRY gluTessVertex( GLUtesselator *tobj, GLdouble coords[3],
        current->last_vertex = vertex;
     }
 
-    DEBUGP(3, ("\t     vertex: (%.2f, %.2f, %.2f)\n",
-              current->last_vertex->coords[X],
-              current->last_vertex->coords[Y],
-              current->last_vertex->coords[Z]));
  cleanup:
-    DEBUGP(2, ("    <- gluTessVertex(tobj: %p)\n", tobj));
     return;
 }
 
@@ -285,12 +270,11 @@ void GLAPIENTRY gluTessVertex( GLUtesselator *tobj, GLdouble coords[3],
  *****************************************************************************/
 void GLAPIENTRY gluTessEndContour( GLUtesselator *tobj )
 {
-    DEBUGIF(2) fprintf( stderr, "\n" ); DEBUGENDIF;
-    DEBUGP(2, ("  -> gluTessEndContour(tobj: %p)\n", tobj));
-
     TESS_CHECK_ERRORS( tobj );
 
-    if ( tobj->current_contour == NULL ) {
+    if ( tobj->current_contour == NULL )
+    {
+       /* gluTessBeginContour was not called. */
        tess_error_callback( tobj, GLU_TESS_ERROR2, NULL );
        return;
     }
@@ -301,7 +285,6 @@ void GLAPIENTRY gluTessEndContour( GLUtesselator *tobj )
     }
 
  cleanup:
-    DEBUGP(2, ("  <- gluTessEndContour(tobj: %p)\n\n", tobj));
     return;
 }
 
@@ -311,14 +294,12 @@ void GLAPIENTRY gluTessEndContour( GLUtesselator *tobj )
  *****************************************************************************/
 void GLAPIENTRY gluTessEndPolygon( GLUtesselator *tobj )
 {
-    DEBUGP(2, ("-> gluTessEndPolygon(tobj: %p)\n", tobj));
     TESS_CHECK_ERRORS( tobj );
 
-    /*
-     * Ensure gluTessBeginPolygon was called, otherwise we can't do anything.
-     */
-    if ( tobj->current_contour != NULL ) {
-       tess_error_callback( tobj, GLU_TESS_ERROR2, NULL );
+    if ( tobj->current_contour != NULL )
+    {
+       /* gluTessBeginPolygon was not called. */
+       tess_error_callback( tobj, GLU_TESS_ERROR1, NULL );
        return;
     }
     TESS_CHECK_ERRORS( tobj );
@@ -329,8 +310,6 @@ void GLAPIENTRY gluTessEndPolygon( GLUtesselator *tobj )
      */
     if ( tobj->contour_count == 0 )
     {
-       DEBUGP(2, ("  contour count: 0\n"));
-
        tess_cleanup( tobj );
        return;
     }
@@ -373,8 +352,6 @@ void GLAPIENTRY gluTessEndPolygon( GLUtesselator *tobj )
 
  cleanup:
     delete_all_contours( tobj );
-
-    DEBUGP(2, ("<- gluTessEndPolygon(tobj: %p)\n\n", tobj));
 }
 
 
@@ -604,8 +581,6 @@ static void init_callbacks( tess_callbacks_t *callbacks )
  *****************************************************************************/
 static void tess_cleanup( GLUtesselator *tobj )
 {
-    DEBUGP(3, ("  -> tess_cleanup(tobj: %p)\n", tobj));
-
     if ( tobj->current_contour != NULL )
     {
        delete_current_contour( tobj );
@@ -615,8 +590,6 @@ static void tess_cleanup( GLUtesselator *tobj )
     {
        delete_all_contours( tobj );
     }
-
-    DEBUGP(3, ("  <- tess_cleanup(tobj: %p)\n", tobj));
 }
 
 
@@ -631,8 +604,6 @@ static void inspect_current_contour( GLUtesselator *tobj )
 {
     tess_contour_t *current = tobj->current_contour;
 
-    DEBUGP(3, ("    -> inspect_current_contour(tobj: %p)\n", tobj));
-
     if ( current->vertex_count < 3 )
     {
        delete_current_contour( tobj );
@@ -658,8 +629,6 @@ static void inspect_current_contour( GLUtesselator *tobj )
     if ( save_current_contour( tobj ) == GLU_ERROR ) {
        return;
     }
-
-    DEBUGP(3, ("    <- inspect_current_contour(tobj: %p)\n", tobj));
 }
 
 /*****************************************************************************
@@ -671,8 +640,6 @@ static GLenum find_normal( GLUtesselator *tobj )
     tess_vertex_t      *va, *vb, *vc;
     GLdouble           a[3], b[3], c[3];
 
-    DEBUGP(3, ("      -> find_normal(tobj: %p)\n", tobj));
-
     if ( contour == NULL ) { return GLU_ERROR; }
 
     va = contour->vertices;
@@ -696,36 +663,28 @@ static GLenum find_normal( GLUtesselator *tobj )
 
        CROSS3( c, a, b );
 
-       if ( ( fabs( c[X] ) > EQUAL_EPSILON ) ||
-            ( fabs( c[Y] ) > EQUAL_EPSILON ) ||
-            ( fabs( c[Z] ) > EQUAL_EPSILON ) )
+       if ( ( ABSD( c[X] ) > EQUAL_EPSILON ) ||
+            ( ABSD( c[Y] ) > EQUAL_EPSILON ) ||
+            ( ABSD( c[Z] ) > EQUAL_EPSILON ) )
        {
            COPY_3V( contour->plane.normal, c );
            NORMALIZE_3DV( contour->plane.normal );
 
            contour->plane.dist = - DOT3( contour->plane.normal, va->coords );
 
-           DEBUGP(3, ("      <- find_normal(tobj: %p) (%.2f, %.2f, %.2f)\n",
-                      tobj, contour->plane.normal[X],
-                      contour->plane.normal[Y], contour->plane.normal[Z]));
            return GLU_NO_ERROR;
        }
-       else
-       {
-           DEBUGP(3, ("        *** skipping colinear points...\n"));
-       }
     }
     tess_error_callback( tobj, GLU_TESS_ERROR7, NULL );
 
-    DEBUGP(3, ("      <- find_normal(tobj: %p) ERROR\n", tobj));
     return GLU_ERROR;
 }
 
 /*****************************************************************************
  * project_current_contour
  *****************************************************************************/
-static GLdouble                twice_contour_area( tess_vertex_t *vertex,
-                                           tess_vertex_t *last_vertex );
+static GLdouble twice_contour_area( tess_vertex_t *vertex,
+                                   tess_vertex_t *last_vertex );
 
 static void project_current_contour( GLUtesselator *tobj )
 {
@@ -736,15 +695,8 @@ static void project_current_contour( GLUtesselator *tobj )
     GLdouble           dot, rotx, roty;
     GLuint             i;
 
-    DEBUGP(3, ("      -> project_current_contour(tobj: %p)\n", tobj));
-
     if ( current == NULL ) { return; }
 
-    DEBUGP(3, ("           normal: (%.2f, %.2f, %.2f) dist: %.2f n: %u\n",
-              current->plane.normal[X], current->plane.normal[Y],
-              current->plane.normal[Z], current->plane.dist,
-              current->vertex_count));
-
     /* Rotate the plane normal around the y-axis. */
 
     znormal[X] = current->plane.normal[X];
@@ -788,10 +740,6 @@ static void project_current_contour( GLUtesselator *tobj )
 
        ACC_BBOX_2V( vertex->v, tobj->mins, tobj->maxs );
        ACC_BBOX_2V( vertex->v, current->mins, current->maxs );
-
-       DEBUGP(3, ("           v %d: (%.2f, %.2f, %.2f) -> (%.2f, %.2f)\n",
-                  i, vertex->coords[X], vertex->coords[Y],
-                  vertex->coords[Z], vertex->v[X], vertex->v[Y]));
     }
 
     area = twice_contour_area( current->vertices,
@@ -806,8 +754,6 @@ static void project_current_contour( GLUtesselator *tobj )
        current->orientation = GLU_CW;
        current->area = -area;
     }
-
-    DEBUGP(3, ("      <- project_current_contour(tobj: %p)\n", tobj));
 }
 
 /*****************************************************************************
@@ -848,8 +794,6 @@ static GLenum save_current_contour( GLUtesselator *tobj )
     tess_vertex_t      *vertex;
     GLuint                     i;
 
-    DEBUGP(3, ("      -> save_current_contour(tobj: %p)\n", tobj));
-
     if ( current == NULL ) { return GLU_ERROR; }
 
     if ( tobj->contours == NULL )
@@ -879,7 +823,6 @@ static GLenum save_current_contour( GLUtesselator *tobj )
     tobj->contour_count++;
     tobj->current_contour = NULL;
 
-    DEBUGP(3, ("      <- save_current_contour()\n"));
     return GLU_NO_ERROR;
 }
 
@@ -892,8 +835,6 @@ static void delete_current_contour( GLUtesselator *tobj )
     tess_vertex_t      *vertex, *next;
     GLuint                     i;
 
-    DEBUGP(3, ("  -> delete_current_contour(contour: %p)\n", current));
-
     if ( current == NULL ) { return; }
 
     for ( vertex = current->vertices, i = 0; i < current->vertex_count; i++)
@@ -905,8 +846,6 @@ static void delete_current_contour( GLUtesselator *tobj )
 
     free( current );
     tobj->current_contour = NULL;
-
-    DEBUGP(3, ("  <- delete_current_contour()\n"));
 }
 
 /*****************************************************************************
@@ -918,8 +857,6 @@ static void delete_all_contours( GLUtesselator *tobj )
     tess_vertex_t      *vertex, *next_vertex;
     GLuint                     i;
 
-    DEBUGP(3, ("  -> delete_all_contours(tobj: %p)\n", tobj));
-
     if ( current != NULL )
     {
        delete_current_contour( tobj );
@@ -949,8 +886,6 @@ static void delete_all_contours( GLUtesselator *tobj )
 
     ZERO_3V( tobj->plane.normal );
     tobj->plane.dist = 0.0;
-
-    DEBUGP(3, ("  <- delete_all_contours(tobj: %p)\n", tobj));
 }