/* ** Copyright 1992, Silicon Graphics, Inc. ** All Rights Reserved. ** ** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.; ** the contents of this file may not be disclosed to third parties, copied or ** duplicated in any form, in whole or in part, without the prior written ** permission of Silicon Graphics, Inc. ** ** RESTRICTED RIGHTS LEGEND: ** Use, duplication or disclosure by the Government is subject to restrictions ** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data ** and Computer Software clause at DFARS 252.227-7013, and/or in similar or ** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished - ** rights reserved under the Copyright Laws of the United States. ** */ #include #include struct JumpBuffer { jmp_buf buf; }; #define mysetjmp(x) setjmp((x)->buf) #define mylongjmp(x,y) longjmp((x)->buf, y) /* < 02/03/92>> */ /* < ../core/quilt.c++ > */ void *__vec_new (void *, int , int , void *); void __vec_ct (void *, int , int , void *); void __vec_dt (void *, int , int , void *); void __vec_delete (void *, int , int , void *, int , int ); typedef int (*__vptp)(void); struct __mptr {short d; short i; __vptp f; }; typedef unsigned int size_t ; // extern void *malloc (size_t ); // extern void free (void *); struct Buffer; struct Buffer { struct Buffer *next__6Buffer ; }; struct Pool; enum __Q2_4Pool5Magic { is_allocated__Q2_4Pool5Magic = 62369, is_free__Q2_4Pool5Magic = 61858} ; struct Pool { struct Buffer *freelist__4Pool ; char *blocklist__4Pool [32]; int nextblock__4Pool ; char *curblock__4Pool ; int buffersize__4Pool ; int nextsize__4Pool ; int nextfree__4Pool ; int initsize__4Pool ; char *name__4Pool ; int magic__4Pool ; }; void __glgrow__4PoolFv (struct Pool *); struct PooledObj; struct PooledObj { char __W3__9PooledObj ; }; typedef float REAL ; typedef void (*Pfvv )(void ); typedef void (*Pfvf )(float *); typedef int (*cmpfunc )(void *, void *); typedef REAL Knot ; typedef REAL *Knot_ptr ; struct Backend; struct Mapdesc; struct Flist; struct Knotvector; struct Quiltspec; struct Quiltspec { int stride__9Quiltspec ; int width__9Quiltspec ; int offset__9Quiltspec ; int order__9Quiltspec ; int index__9Quiltspec ; int bdry__9Quiltspec [2]; REAL step_size__9Quiltspec ; Knot *breakpoints__9Quiltspec ; }; typedef struct Quiltspec *Quiltspec_ptr ; struct Quilt; struct Quilt { char __W3__9PooledObj ; struct Mapdesc *mapdesc__5Quilt ; REAL *cpts__5Quilt ; struct Quiltspec qspec__5Quilt [2]; Quiltspec_ptr eqspec__5Quilt ; struct Quilt *next__5Quilt ; }; typedef struct Quilt *Quilt_ptr ; struct TrimVertex; struct TrimVertex { REAL param__10TrimVertex [2]; long nuid__10TrimVertex ; }; typedef struct TrimVertex *TrimVertex_p ; struct GridVertex; struct GridVertex { long gparam__10GridVertex [2]; }; struct GridTrimVertex; struct GridTrimVertex { char __W3__9PooledObj ; struct TrimVertex dummyt__14GridTrimVertex ; struct GridVertex dummyg__14GridTrimVertex ; struct TrimVertex *t__14GridTrimVertex ; struct GridVertex *g__14GridTrimVertex ; }; typedef struct GridTrimVertex *GridTrimVertex_p ; struct BasicCurveEvaluator; struct BasicSurfaceEvaluator; struct Backend; struct Backend { struct BasicCurveEvaluator *curveEvaluator__7Backend ; struct BasicSurfaceEvaluator *surfaceEvaluator__7Backend ; int wireframetris__7Backend ; int wireframequads__7Backend ; int npts__7Backend ; REAL mesh__7Backend [3][4]; int meshindex__7Backend ; }; typedef REAL Maxmatrix [5][5]; struct Mapdesc; struct Mapdesc { char __W3__9PooledObj ; REAL pixel_tolerance__7Mapdesc ; REAL clampfactor__7Mapdesc ; REAL minsavings__7Mapdesc ; REAL maxrate__7Mapdesc ; REAL maxsrate__7Mapdesc ; REAL maxtrate__7Mapdesc ; REAL bboxsize__7Mapdesc [5]; long type__7Mapdesc ; int isrational__7Mapdesc ; int ncoords__7Mapdesc ; int hcoords__7Mapdesc ; int inhcoords__7Mapdesc ; int mask__7Mapdesc ; Maxmatrix bmat__7Mapdesc ; Maxmatrix cmat__7Mapdesc ; Maxmatrix smat__7Mapdesc ; REAL s_steps__7Mapdesc ; REAL t_steps__7Mapdesc ; REAL sampling_method__7Mapdesc ; REAL culling_method__7Mapdesc ; REAL bbox_subdividing__7Mapdesc ; struct Mapdesc *next__7Mapdesc ; struct Backend *backend__7Mapdesc ; }; void __glcopy__7MapdescSFPA5_flPfN20 (REAL (*)[5], long , float *, long , long ); void __glxformRational__7MapdescFPA0 (struct Mapdesc *, REAL (*)[5], REAL *, REAL *); void __glxformNonrational__7Mapdesc0 (struct Mapdesc *, REAL (*)[5], REAL *, REAL *); struct Sorter; struct Sorter { int es__6Sorter ; struct __mptr *__vptr__6Sorter ; }; struct FlistSorter; struct FlistSorter { int es__6Sorter ; struct __mptr *__vptr__6Sorter ; }; struct Flist; struct Flist { REAL *pts__5Flist ; int npts__5Flist ; int start__5Flist ; int end__5Flist ; struct FlistSorter sorter__5Flist ; }; struct Knotvector; struct Knotvector { long order__10Knotvector ; long knotcount__10Knotvector ; long stride__10Knotvector ; Knot *knotlist__10Knotvector ; }; struct Pspec; struct Pspec { REAL range__5Pspec [3]; REAL sidestep__5Pspec [2]; REAL stepsize__5Pspec ; REAL minstepsize__5Pspec ; int needsSubdivision__5Pspec ; }; struct Patchspec; struct Patchspec { REAL range__5Pspec [3]; REAL sidestep__5Pspec [2]; REAL stepsize__5Pspec ; REAL minstepsize__5Pspec ; int needsSubdivision__5Pspec ; int order__9Patchspec ; int stride__9Patchspec ; }; struct Patch; struct Patch { struct Mapdesc *mapdesc__5Patch ; struct Patch *next__5Patch ; int cullval__5Patch ; int notInBbox__5Patch ; int needsSampling__5Patch ; REAL cpts__5Patch [2880]; REAL spts__5Patch [2880]; REAL bpts__5Patch [2880]; struct Patchspec pspec__5Patch [2]; REAL bb__5Patch [2][5]; }; struct Patchlist; struct Patchlist { struct Patch *patch__9Patchlist ; int notInBbox__9Patchlist ; int needsSampling__9Patchlist ; struct Pspec pspec__9Patchlist [2]; }; extern struct __mptr* __ptbl_vec_____core_quilt_c_____ct_[]; struct Quilt *__gl__ct__5QuiltFP7Mapdesc (struct Quilt *__0this , struct Mapdesc *__1_mapdesc ) { __0this -> mapdesc__5Quilt = __1_mapdesc ; return __0this ; } void __gldeleteMe__5QuiltFR4Pool (struct Quilt *, struct Pool *); void __gldeleteMe__5QuiltFR4Pool (struct Quilt *__0this , struct Pool *__1p ) { { { struct Quiltspec *__1q ; void *__1__X9 ; __1q = __0this -> qspec__5Quilt ; for(;__1q != __0this -> eqspec__5Quilt ;__1q ++ ) { void *__1__X8 ; if (__1q -> breakpoints__9Quiltspec )( (__1__X8 = (void *)__1q -> breakpoints__9Quiltspec ), ( (__1__X8 ?( free ( __1__X8 ) , 0 ) :( 0 ) )) ) ; __1q -> breakpoints__9Quiltspec = 0 ; } if (__0this -> cpts__5Quilt )( (__1__X9 = (void *)__0this -> cpts__5Quilt ), ( (__1__X9 ?( free ( __1__X9 ) , 0 ) :( 0 ) )) ) ; __0this -> cpts__5Quilt = 0 ; ( ( (((void )0 )), ( ((((struct Buffer *)(((struct Buffer *)(((void *)((struct PooledObj *)__0this )))))))-> next__6Buffer = ((struct Pool *)__1p )-> freelist__4Pool ), (((struct Pool *)__1p )-> freelist__4Pool = (((struct Buffer *)(((struct Buffer *)(((void *)((struct PooledObj *)__0this ))))))))) ) ) ; } } } void __glshow__5QuiltFv (struct Quilt *__0this ) { } void __glselect__5QuiltFPfT1 (struct Quilt *__0this , REAL *__1pta , REAL *__1ptb ) { int __1dim ; __1dim = (__0this -> eqspec__5Quilt - __0this -> qspec__5Quilt ); { { int __1i ; __1i = 0 ; for(;__1i < __1dim ;__1i ++ ) { { { int __2j ; __2j = ((__0this -> qspec__5Quilt [__1i ]). width__9Quiltspec - 1 ); for(;__2j >= 0 ;__2j -- ) if ((((__0this -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [__2j ])<= (__1pta [__1i ]))&& ((__1ptb [__1i ])<= ((__0this -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [(__2j + 1 )]))) break ; ((void )0 ); (__0this -> qspec__5Quilt [__1i ]). index__9Quiltspec = __2j ; } } } } } } void __glsurfpts__7BackendFlPfN21iT0 (struct Backend *, long , REAL *, long , long , int , int , REAL , REAL , REAL , REAL ); void __glcurvpts__7BackendFlPfT1ifT0 (struct Backend *, long , REAL *, long , int , REAL , REAL ); void __gldownload__5QuiltFR7Backend (struct Quilt *__0this , struct Backend *__1backend ) { if (( (__0this -> eqspec__5Quilt - __0this -> qspec__5Quilt )) == 2 ){ REAL *__2ps ; __2ps = __0this -> cpts__5Quilt ; __2ps += (__0this -> qspec__5Quilt [0 ]). offset__9Quiltspec ; __2ps += (__0this -> qspec__5Quilt [1 ]). offset__9Quiltspec ; __2ps += (((__0this -> qspec__5Quilt [0 ]). index__9Quiltspec * (__0this -> qspec__5Quilt [0 ]). order__9Quiltspec )* (__0this -> qspec__5Quilt [0 ]). stride__9Quiltspec ); __2ps += (((__0this -> qspec__5Quilt [1 ]). index__9Quiltspec * (__0this -> qspec__5Quilt [1 ]). order__9Quiltspec )* (__0this -> qspec__5Quilt [1 ]). stride__9Quiltspec ); __glsurfpts__7BackendFlPfN21iT0 ( (struct Backend *)__1backend , ( ((struct Mapdesc *)__0this -> mapdesc__5Quilt )-> type__7Mapdesc ) , __2ps , (long )(__0this -> qspec__5Quilt [0 ]). stride__9Quiltspec , (long )(__0this -> qspec__5Quilt [1 ]). stride__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). order__9Quiltspec , (__0this -> qspec__5Quilt [1 ]). order__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [(__0this -> qspec__5Quilt [0 ]). index__9Quiltspec ], (__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [((__0this -> qspec__5Quilt [0 ]). index__9Quiltspec + 1 )], (__0this -> qspec__5Quilt [1 ]). breakpoints__9Quiltspec [(__0this -> qspec__5Quilt [1 ]). index__9Quiltspec ], (__0this -> qspec__5Quilt [1 ]). breakpoints__9Quiltspec [((__0this -> qspec__5Quilt [1 ]). index__9Quiltspec + 1 )]) ; } else { REAL *__2ps ; __2ps = __0this -> cpts__5Quilt ; __2ps += (__0this -> qspec__5Quilt [0 ]). offset__9Quiltspec ; __2ps += (((__0this -> qspec__5Quilt [0 ]). index__9Quiltspec * (__0this -> qspec__5Quilt [0 ]). order__9Quiltspec )* (__0this -> qspec__5Quilt [0 ]). stride__9Quiltspec ); __glcurvpts__7BackendFlPfT1ifT0 ( (struct Backend *)__1backend , ( ((struct Mapdesc *)__0this -> mapdesc__5Quilt )-> type__7Mapdesc ) , __2ps , (long )(__0this -> qspec__5Quilt [0 ]). stride__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). order__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [(__0this -> qspec__5Quilt [0 ]). index__9Quiltspec ], (__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [((__0this -> qspec__5Quilt [0 ]). index__9Quiltspec + 1 )]) ; } } void __gldownloadAll__5QuiltFPfT1R70 (struct Quilt *__0this , REAL *__1pta , REAL *__1ptb , struct Backend *__1backend ) { { { struct Quilt *__1m ; __1m = (struct Quilt *)__0this ; for(;__1m ;__1m = __1m -> next__5Quilt ) { __glselect__5QuiltFPfT1 ( (struct Quilt *)__1m , __1pta , __1ptb ) ; __gldownload__5QuiltFR7Backend ( (struct Quilt *)__1m , __1backend ) ; } } } } int __glxformAndCullCheck__7Mapdes0 (struct Mapdesc *, REAL *, int , int , int , int ); int __glisCulled__5QuiltFv (struct Quilt *__0this ) { if (( ((((struct Mapdesc *)__0this -> mapdesc__5Quilt )-> culling_method__7Mapdesc != 0.0 )?1 :0 )) ) return __glxformAndCullCheck__7Mapdes0 ( (struct Mapdesc *)__0this -> mapdesc__5Quilt , (__0this -> cpts__5Quilt + (__0this -> qspec__5Quilt [0 ]). offset__9Quiltspec )+ (__0this -> qspec__5Quilt [1 ]). offset__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). order__9Quiltspec * (__0this -> qspec__5Quilt [0 ]). width__9Quiltspec , (__0this -> qspec__5Quilt [0 ]). stride__9Quiltspec , (__0this -> qspec__5Quilt [1 ]). order__9Quiltspec * (__0this -> qspec__5Quilt [1 ]). width__9Quiltspec , (__0this -> qspec__5Quilt [1 ]). stride__9Quiltspec ) ; else return 2 ; } void __glgetRange__5QuiltFPfT1iR5Fl0 (struct Quilt *, REAL *, REAL *, int , struct Flist *); void __glgetRange__5QuiltFPfT1R5Fli0 (struct Quilt *__0this , REAL *__1from , REAL *__1to , struct Flist *__1slist , struct Flist *__1tlist ) { __glgetRange__5QuiltFPfT1iR5Fl0 ( __0this , __1from , __1to , 0 , __1slist ) ; __glgetRange__5QuiltFPfT1iR5Fl0 ( __0this , __1from , __1to , 1 , __1tlist ) ; } void __glgrow__5FlistFi (struct Flist *, int ); void __gladd__5FlistFf (struct Flist *, REAL ); void __glfilter__5FlistFv (struct Flist *); void __gltaper__5FlistFfT1 (struct Flist *, REAL , REAL ); void __glgetRange__5QuiltFPfT1iR5Fl0 (struct Quilt *__0this , REAL *__1from , REAL *__1to , int __1i , struct Flist *__1list ) { struct Quilt *__1maps ; __1maps = (struct Quilt *)__0this ; (__1from [__1i ])= ((__1maps -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [0 ]); (__1to [__1i ])= ((__1maps -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [(__1maps -> qspec__5Quilt [__1i ]). width__9Quiltspec ]); { int __1maxpts ; __1maxpts = 0 ; { { Quilt_ptr __1m ; __1m = __1maps ; for(;__1m ;__1m = __1m -> next__5Quilt ) { if (((__1m -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [0 ])> (__1from [__1i ])) (__1from [__1i ])= ((__1m -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [0 ]); if (((__1m -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [(__1m -> qspec__5Quilt [__1i ]). width__9Quiltspec ])< (__1to [__1i ])) (__1to [__1i ])= ((__1m -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [(__1m -> qspec__5Quilt [__1i ]). width__9Quiltspec ]); __1maxpts += ((__1m -> qspec__5Quilt [__1i ]). width__9Quiltspec + 1 ); } __glgrow__5FlistFi ( (struct Flist *)__1list , __1maxpts ) ; for(__1m = __1maps ;__1m ;__1m = __1m -> next__5Quilt ) { { int __1j ; __1j = 0 ; for(;__1j <= (__1m -> qspec__5Quilt [__1i ]). width__9Quiltspec ;__1j ++ ) { __gladd__5FlistFf ( (struct Flist *)__1list , (__1m -> qspec__5Quilt [__1i ]). breakpoints__9Quiltspec [__1j ]) ; } } } __glfilter__5FlistFv ( (struct Flist *)__1list ) ; __gltaper__5FlistFfT1 ( (struct Flist *)__1list , __1from [__1i ], __1to [__1i ]) ; } } } } void __glgetRange__5QuiltFPfT1R5Fli1 (struct Quilt *__0this , REAL *__1from , REAL *__1to , struct Flist *__1slist ) { __glgetRange__5QuiltFPfT1iR5Fl0 ( __0this , __1from , __1to , 0 , __1slist ) ; } void __glfindSampleRates__5QuiltFR50 (struct Quilt *, struct Flist *, struct Flist *); void __glfindRates__5QuiltFR5FlistT0 (struct Quilt *__0this , struct Flist *__1slist , struct Flist *__1tlist , REAL *__1rate ) { __glfindSampleRates__5QuiltFR50 ( __0this , __1slist , __1tlist ) ; (__1rate [0 ])= (__0this -> qspec__5Quilt [0 ]). step_size__9Quiltspec ; (__1rate [1 ])= (__0this -> qspec__5Quilt [1 ]). step_size__9Quiltspec ; { { struct Quilt *__1q ; __1q = __0this -> next__5Quilt ; for(;__1q ;__1q = __1q -> next__5Quilt ) { __glfindSampleRates__5QuiltFR50 ( (struct Quilt *)__1q , __1slist , __1tlist ) ; if ((__1q -> qspec__5Quilt [0 ]). step_size__9Quiltspec < (__1rate [0 ])) (__1rate [0 ])= (__1q -> qspec__5Quilt [0 ]). step_size__9Quiltspec ; if ((__1q -> qspec__5Quilt [1 ]). step_size__9Quiltspec < (__1rate [1 ])) (__1rate [1 ])= (__1q -> qspec__5Quilt [1 ]). step_size__9Quiltspec ; } } } } struct Patchlist *__gl__ct__9PatchlistFP5QuiltPf0 (struct Patchlist *, struct Quilt *, REAL *, REAL *); void __glgetstepsize__9PatchlistFv (struct Patchlist *); void __gl__dt__9PatchlistFv (struct Patchlist *, int ); void __glfindSampleRates__5QuiltFR50 (struct Quilt *__0this , struct Flist *__1slist , struct Flist *__1tlist ) { (__0this -> qspec__5Quilt [0 ]). step_size__9Quiltspec = (.2 * (((__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [(__0this -> qspec__5Quilt [0 ]). width__9Quiltspec ])- ((__0this -> qspec__5Quilt [0 ]). breakpoints__9Quiltspec [0 ]))); (__0this -> qspec__5Quilt [1 ]). step_size__9Quiltspec = (.2 * (((__0this -> qspec__5Quilt [1 ]). breakpoints__9Quiltspec [(__0this -> qspec__5Quilt [1 ]). width__9Quiltspec ])- ((__0this -> qspec__5Quilt [1 ]). breakpoints__9Quiltspec [0 ]))); { { int __1i ; __1i = ((*__1slist )). start__5Flist ; for(;__1i < (((*__1slist )). end__5Flist - 1 );__1i ++ ) { { { int __2j ; __2j = ((*__1tlist )). start__5Flist ; for(;__2j < (((*__1tlist )). end__5Flist - 1 );__2j ++ ) { REAL __3pta [2]; REAL __3ptb [2]; (__3pta [0 ])= (((*__1slist )). pts__5Flist [__1i ]); (__3ptb [0 ])= (((*__1slist )). pts__5Flist [(__1i + 1 )]); (__3pta [1 ])= (((*__1tlist )). pts__5Flist [__2j ]); (__3ptb [1 ])= (((*__1tlist )). pts__5Flist [(__2j + 1 )]); { struct Patchlist __3patchlist ; __gl__ct__9PatchlistFP5QuiltPf0 ( (struct Patchlist *)(& __3patchlist ), (struct Quilt *)__0this , (float *)__3pta , (float *)__3ptb ) ; __glgetstepsize__9PatchlistFv ( (struct Patchlist *)(& __3patchlist )) ; if (( (((struct Patchlist *)(& __3patchlist ))-> pspec__9Patchlist [0 ]). stepsize__5Pspec ) < (__0this -> qspec__5Quilt [0 ]). step_size__9Quiltspec ) (__0this -> qspec__5Quilt [0 ]). step_size__9Quiltspec = ( (((struct Patchlist *)(& __3patchlist ))-> pspec__9Patchlist [0 ]). stepsize__5Pspec ) ; if (( (((struct Patchlist *)(& __3patchlist ))-> pspec__9Patchlist [1 ]). stepsize__5Pspec ) < (__0this -> qspec__5Quilt [1 ]). step_size__9Quiltspec ) (__0this -> qspec__5Quilt [1 ]). step_size__9Quiltspec = ( (((struct Patchlist *)(& __3patchlist ))-> pspec__9Patchlist [1 ]). stepsize__5Pspec ) ; __gl__dt__9PatchlistFv ( (struct Patchlist *)(& __3patchlist ), 2) ; } } } } } } } } /* the end */