dri: Rework planar image interface
[mesa.git] / src / glu / sgi / libtess / tess.c
index c920235c660f4c7ab9e79362436d428abd05c956..4a0e8dea7f79988bf35b6872f5f2f2a611234135 100644 (file)
@@ -1,42 +1,35 @@
 /*
-** License Applicability. Except to the extent portions of this file are
-** made subject to an alternative license as permitted in the SGI Free
-** Software License B, Version 1.1 (the "License"), the contents of this
-** file are subject only to the provisions of the License. You may not use
-** this file except in compliance with the License. You may obtain a copy
-** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
-** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
-** 
-** http://oss.sgi.com/projects/FreeB
-** 
-** Note that, as provided in the License, the Software is distributed on an
-** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
-** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
-** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
-** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
-** 
-** Original Code. The Original Code is: OpenGL Sample Implementation,
-** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
-** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
-** Copyright in any portions created by third parties is as indicated
-** elsewhere herein. All Rights Reserved.
-** 
-** Additional Notice Provisions: The application programming interfaces
-** established by SGI in conjunction with the Original Code are The
-** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
-** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
-** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
-** Window System(R) (Version 1.3), released October 19, 1998. This software
-** was created using the OpenGL(R) version 1.2.1 Sample Implementation
-** published by SGI, but has not been independently verified as being
-** compliant with the OpenGL(R) version 1.2.1 Specification.
-**
-*/
+ * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
+ * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice including the dates of first publication and
+ * either this permission notice or a reference to
+ * http://oss.sgi.com/projects/FreeB/
+ * shall be included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
+ * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Silicon Graphics, Inc.
+ * shall not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization from
+ * Silicon Graphics, Inc.
+ */
 /*
 ** Author: Eric Veach, July 1994.
 **
-** $Date: 2001/09/20 21:47:52 $ $Revision: 1.2 $
-** $Header: /home/krh/git/sync/mesa-cvs-repo/Mesa/src/glu/sgi/libtess/tess.c,v 1.2 2001/09/20 21:47:52 kschultz Exp $
 */
 
 #include "gluos.h"
 #define GLU_TESS_DEFAULT_TOLERANCE 0.0
 #define GLU_TESS_MESH          100112  /* void (*)(GLUmesh *mesh)          */
 
+#ifndef TRUE
 #define TRUE 1
+#endif
+#ifndef FALSE
 #define FALSE 0
+#endif
 
 /*ARGSUSED*/ static void GLAPIENTRY noBegin( GLenum type ) {}
 /*ARGSUSED*/ static void GLAPIENTRY noEdgeFlag( GLboolean boundaryEdge ) {}
 /*ARGSUSED*/ static void GLAPIENTRY noEnd( void ) {}
 /*ARGSUSED*/ static void GLAPIENTRY noError( GLenum errnum ) {}
 /*ARGSUSED*/ static void GLAPIENTRY noCombine( GLdouble coords[3], void *data[4],
-                                    GLfloat weight[4], void **dataOut ) {}
+                                   GLfloat weight[4], void **dataOut ) {}
 /*ARGSUSED*/ static void GLAPIENTRY noMesh( GLUmesh *mesh ) {}
 
 
 /*ARGSUSED*/ void GLAPIENTRY __gl_noBeginData( GLenum type,
                                             void *polygonData ) {}
-/*ARGSUSED*/ void GLAPIENTRY __gl_noEdgeFlagData( GLboolean boundaryEdge, 
+/*ARGSUSED*/ void GLAPIENTRY __gl_noEdgeFlagData( GLboolean boundaryEdge,
                                       void *polygonData ) {}
 /*ARGSUSED*/ void GLAPIENTRY __gl_noVertexData( void *data,
                                              void *polygonData ) {}
 /* Half-edges are allocated in pairs (see mesh.c) */
 typedef struct { GLUhalfEdge e, eSym; } EdgePair;
 
+#undef MAX
 #define MAX(a,b)       ((a) > (b) ? (a) : (b))
 #define MAX_FAST_ALLOC (MAX(sizeof(EdgePair), \
-                        MAX(sizeof(GLUvertex),sizeof(GLUface))))
+                         MAX(sizeof(GLUvertex),sizeof(GLUface))))
 
 
 GLUtesselator * GLAPIENTRY
@@ -169,6 +167,8 @@ static void GotoState( GLUtesselator *tess, enum TessState newState )
        CALL_ERROR_OR_ERROR_DATA( GLU_TESS_MISSING_BEGIN_CONTOUR );
        gluTessBeginContour( tess );
        break;
+      default:
+        ;
       }
     } else {
       switch( tess->state ) {
@@ -181,6 +181,8 @@ static void GotoState( GLUtesselator *tess, enum TessState newState )
        /* gluTessEndPolygon( tess ) is too much work! */
        MakeDormant( tess );
        break;
+      default:
+        ;
       }
     }
   }
@@ -242,7 +244,7 @@ gluGetTessProperty( GLUtesselator *tess, GLenum which, GLdouble *value )
       /* tolerance should be in range [0..1] */
       assert(0.0 <= tess->relTolerance && tess->relTolerance <= 1.0);
       *value= tess->relTolerance;
-      break;    
+      break;
    case GLU_TESS_WINDING_RULE:
       assert(tess->windingRule == GLU_TESS_WINDING_ODD ||
             tess->windingRule == GLU_TESS_WINDING_NONZERO ||
@@ -291,7 +293,7 @@ gluTessCallback( GLUtesselator *tess, GLenum which, _GLUfuncptr fn)
     return;
   case GLU_TESS_EDGE_FLAG_DATA:
     tess->callEdgeFlagData= (fn == NULL) ?
-       &__gl_noEdgeFlagData : (void (GLAPIENTRY *)(GLboolean, void *)) fn; 
+       &__gl_noEdgeFlagData : (void (GLAPIENTRY *)(GLboolean, void *)) fn;
     /* If the client wants boundary edges to be flagged,
      * we render everything as separate triangles (no strips or fans).
      */
@@ -309,8 +311,8 @@ gluTessCallback( GLUtesselator *tess, GLenum which, _GLUfuncptr fn)
     tess->callEnd = (fn == NULL) ? &noEnd : (void (GLAPIENTRY *)(void)) fn;
     return;
   case GLU_TESS_END_DATA:
-    tess->callEndData = (fn == NULL) ? &__gl_noEndData : 
-                                       (void (GLAPIENTRY *)(void *)) fn;
+    tess->callEndData = (fn == NULL) ? &__gl_noEndData :
+                                      (void (GLAPIENTRY *)(void *)) fn;
     return;
   case GLU_TESS_ERROR:
     tess->callError = (fn == NULL) ? &noError : (void (GLAPIENTRY *)(GLenum)) fn;
@@ -325,9 +327,9 @@ gluTessCallback( GLUtesselator *tess, GLenum which, _GLUfuncptr fn)
     return;
   case GLU_TESS_COMBINE_DATA:
     tess->callCombineData = (fn == NULL) ? &__gl_noCombineData :
-                                           (void (GLAPIENTRY *)(GLdouble [3],
-                                                    void *[4], 
-                                                    GLfloat [4], 
+                                          (void (GLAPIENTRY *)(GLdouble [3],
+                                                    void *[4],
+                                                    GLfloat [4],
                                                     void **,
                                                     void *)) fn;
     return;
@@ -364,7 +366,7 @@ static int AddVertex( GLUtesselator *tess, GLdouble coords[3], void *data )
   e->Org->coords[0] = coords[0];
   e->Org->coords[1] = coords[1];
   e->Org->coords[2] = coords[2];
-  
+
   /* The winding of an edge says how the winding number changes as we
    * cross from the edge''s right face to its left face.  We add the
    * vertices in such an order that a CCW contour will add +1 to
@@ -499,7 +501,7 @@ gluTessEndPolygon( GLUtesselator *tess )
 {
   GLUmesh *mesh;
 
-  if (setjmp(tess->env) != 0) {        
+  if (setjmp(tess->env) != 0) { 
      /* come back here if out of memory */
      CALL_ERROR_OR_ERROR_DATA( GLU_OUT_OF_MEMORY );
      return;
@@ -517,7 +519,7 @@ gluTessEndPolygon( GLUtesselator *tess )
        * an explicit mesh either.
        */
       if( __gl_renderCache( tess )) {
-       tess->polygonData= NULL; 
+       tess->polygonData= NULL;
        return;
       }
     }
@@ -550,15 +552,15 @@ gluTessEndPolygon( GLUtesselator *tess )
     if( tess->boundaryOnly ) {
       rc = __gl_meshSetWindingNumber( mesh, 1, TRUE );
     } else {
-      rc = __gl_meshTessellateInterior( mesh ); 
+      rc = __gl_meshTessellateInterior( mesh );
     }
     if (rc == 0) longjmp(tess->env,1); /* could've used a label */
 
     __gl_meshCheckMesh( mesh );
 
     if( tess->callBegin != &noBegin || tess->callEnd != &noEnd
-       || tess->callVertex != &noVertex || tess->callEdgeFlag != &noEdgeFlag 
-       || tess->callBeginData != &__gl_noBeginData 
+       || tess->callVertex != &noVertex || tess->callEdgeFlag != &noEdgeFlag
+       || tess->callBeginData != &__gl_noBeginData
        || tess->callEndData != &__gl_noEndData
        || tess->callVertexData != &__gl_noVertexData
        || tess->callEdgeFlagData != &__gl_noEdgeFlagData )