diff options
author | Gareth Hughes <[email protected]> | 1999-09-10 04:32:10 +0000 |
---|---|---|
committer | Gareth Hughes <[email protected]> | 1999-09-10 04:32:10 +0000 |
commit | f0f3815e4f93a72de339f9da7109b069dd6c90cd (patch) | |
tree | 101950f8385d0963b3f1711a0e152280f42dbeb5 | |
parent | 95740b2c113ced1d49d84ceecc551e3718d8d8c1 (diff) |
Fixed triangle output, recovery process termination.
-rw-r--r-- | src/glu/mesa/glu.c | 13 | ||||
-rw-r--r-- | src/glu/mesa/tess.c | 107 |
2 files changed, 29 insertions, 91 deletions
diff --git a/src/glu/mesa/glu.c b/src/glu/mesa/glu.c index 5569ca9d49c..e9037b7614d 100644 --- a/src/glu/mesa/glu.c +++ b/src/glu/mesa/glu.c @@ -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", diff --git a/src/glu/mesa/tess.c b/src/glu/mesa/tess.c index c2e0e1cd988..1fb543340ae 100644 --- a/src/glu/mesa/tess.c +++ b/src/glu/mesa/tess.c @@ -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)); } |