diff options
Diffstat (limited to 'src')
| -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 5569ca9d49..e9037b7614 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 c2e0e1cd98..1fb543340a 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));  }  | 
