ReactOS  0.4.15-dev-1203-g0e5a4d5
NurbsTessellator Class Reference

#include <nurbstess.h>

Inheritance diagram for NurbsTessellator:
Collaboration diagram for NurbsTessellator:

Public Member Functions

 NurbsTessellator (BasicCurveEvaluator &c, BasicSurfaceEvaluator &e)
 
virtual ~NurbsTessellator (void)
 
void getnurbsproperty (long, INREAL *)
 
void getnurbsproperty (long, long, INREAL *)
 
void setnurbsproperty (long, INREAL)
 
void setnurbsproperty (long, long, INREAL)
 
void setnurbsproperty (long, long, INREAL *)
 
void setnurbsproperty (long, long, INREAL *, long, long)
 
virtual void bgnrender (void)
 
virtual void endrender (void)
 
virtual void makeobj (int n)
 
virtual void closeobj (void)
 
virtual void errorHandler (int)
 
void bgnsurface (long)
 
void endsurface (void)
 
void bgntrim (void)
 
void endtrim (void)
 
void bgncurve (long)
 
void endcurve (void)
 
void pwlcurve (long, INREAL[], long, long)
 
void nurbscurve (long, INREAL[], long, INREAL[], long, long)
 
void nurbssurface (long, INREAL[], long, INREAL[], long, long, INREAL[], long, long, long)
 
void defineMap (long, long, long)
 
void redefineMaps (void)
 
void discardRecording (void *)
 
voidbeginRecording (void)
 
void endRecording (void)
 
void playRecording (void *)
 
void set_domain_distance_u_rate (REAL u_rate)
 
void set_domain_distance_v_rate (REAL v_rate)
 
void set_is_domain_distance_sampling (int flag)
 

Public Attributes

Pool quiltPool
 

Protected Attributes

Renderhints renderhints
 
Maplist maplist
 
Backend backend
 

Private Member Functions

void resetObjects (void)
 
int do_check_knots (Knotvector *, const char *)
 
void do_nurbserror (int)
 
void do_bgncurve (O_curve *)
 
void do_endcurve (void)
 
void do_freeall (void)
 
void do_freecurveall (O_curve *)
 
void do_freebgntrim (O_trim *)
 
void do_freebgncurve (O_curve *)
 
void do_freepwlcurve (O_pwlcurve *)
 
void do_freenurbscurve (O_nurbscurve *)
 
void do_freenurbssurface (O_nurbssurface *)
 
void do_freebgnsurface (O_surface *)
 
void do_bgnsurface (O_surface *)
 
void do_endsurface (void)
 
void do_bgntrim (O_trim *)
 
void do_endtrim (void)
 
void do_pwlcurve (O_pwlcurve *)
 
void do_nurbscurve (O_nurbscurve *)
 
void do_nurbssurface (O_nurbssurface *)
 
void do_freenurbsproperty (Property *)
 
void do_setnurbsproperty (Property *)
 
void do_setnurbsproperty2 (Property *)
 

Private Attributes

Subdivider subdivider
 
JumpBuffer * jumpbuffer
 
Pool o_pwlcurvePool
 
Pool o_nurbscurvePool
 
Pool o_curvePool
 
Pool o_trimPool
 
Pool o_surfacePool
 
Pool o_nurbssurfacePool
 
Pool propertyPool
 
TrimVertexPool extTrimVertexPool
 
int inSurface
 
int inCurve
 
int inTrim
 
int isCurveModified
 
int isTrimModified
 
int isSurfaceModified
 
int isDataValid
 
int numTrims
 
int playBack
 
O_trim ** nextTrim
 
O_curve ** nextCurve
 
O_nurbscurve ** nextNurbscurve
 
O_pwlcurve ** nextPwlcurve
 
O_nurbssurface ** nextNurbssurface
 
O_surfacecurrentSurface
 
O_trimcurrentTrim
 
O_curvecurrentCurve
 
DisplayListdl
 

Detailed Description

Definition at line 53 of file nurbstess.h.

Constructor & Destructor Documentation

◆ NurbsTessellator()

NurbsTessellator::NurbsTessellator ( BasicCurveEvaluator c,
BasicSurfaceEvaluator e 
)

Definition at line 66 of file nurbsinterfac.cc.

67  : maplist( backend ),
68  backend( c, e ),
70  o_pwlcurvePool( sizeof( O_pwlcurve ), 32, "o_pwlcurvePool" ),
71  o_nurbscurvePool( sizeof( O_nurbscurve ), 32, "o_nurbscurvePool"),
72  o_curvePool( sizeof( O_curve ), 32, "o_curvePool" ),
73  o_trimPool( sizeof( O_trim ), 32, "o_trimPool" ),
74  o_surfacePool( sizeof( O_surface ), 1, "o_surfacePool" ),
75  o_nurbssurfacePool( sizeof( O_nurbssurface ), 4, "o_nurbssurfacePool" ),
76  propertyPool( sizeof( Property ), 32, "propertyPool" ),
77  quiltPool( sizeof( Quilt ), 32, "quiltPool" )
78 {
79  dl = 0;
80  inSurface = 0;
81  inCurve = 0;
82  inTrim = 0;
83  playBack = 0;
84  jumpbuffer = newJumpbuffer();
86 }
Definition: quilt.h:64
Renderhints renderhints
Definition: nurbstess.h:104
void setJumpbuffer(JumpBuffer *)
Definition: subdivider.cc:124
Definition: reader.h:55
DisplayList * dl
Definition: nurbstess.h:168
#define e
Definition: ke_i.h:82
Pool o_nurbscurvePool
Definition: nurbstess.h:137
JumpBuffer * jumpbuffer
Definition: nurbstess.h:135
Backend backend
Definition: nurbstess.h:106
const GLubyte * c
Definition: glext.h:8905
Definition: reader.h:94
Pool o_nurbssurfacePool
Definition: nurbstess.h:141
Maplist maplist
Definition: nurbstess.h:105
Subdivider subdivider
Definition: nurbstess.h:134

◆ ~NurbsTessellator()

NurbsTessellator::~NurbsTessellator ( void  )
virtual

Definition at line 88 of file nurbsinterfac.cc.

89 {
90  if( inTrim ) {
91  do_nurbserror( 12 );
92  endtrim();
93  }
94 
95  if( inSurface ) {
96  *nextNurbssurface = 0;
97  do_freeall();
98  }
99 
100  if (jumpbuffer) {
101  deleteJumpbuffer(jumpbuffer);
102  jumpbuffer= 0;
103  }
104 }
void endtrim(void)
void do_nurbserror(int)
Definition: nurbstess.cc:672
JumpBuffer * jumpbuffer
Definition: nurbstess.h:135
void do_freeall(void)
Definition: nurbstess.cc:315
O_nurbssurface ** nextNurbssurface
Definition: nurbstess.h:162

Member Function Documentation

◆ beginRecording()

void * NurbsTessellator::beginRecording ( void  )

Definition at line 515 of file nurbsinterfac.cc.

516 {
517  dl = new DisplayList( this );
518  return (void *) dl;
519 }
DisplayList * dl
Definition: nurbstess.h:168

◆ bgncurve()

void NurbsTessellator::bgncurve ( long  nuid)

Definition at line 127 of file nurbsinterfac.cc.

128 {
129  O_curve *o_curve = new(o_curvePool) O_curve;
130  o_curve->nuid = nuid;
131  THREAD( do_bgncurve, o_curve, do_freebgncurve );
132 }
void do_freebgncurve(O_curve *)
Definition: nurbstess.cc:456
#define THREAD(work, arg, cleanup)
void do_bgncurve(O_curve *)
Definition: nurbstess.cc:154
Definition: reader.h:55
long nuid
Definition: reader.h:65

Referenced by do_nurbscurve(), and do_pwlcurve().

◆ bgnrender()

void NurbsTessellator::bgnrender ( void  )
virtual

Reimplemented in GLUnurbs.

Definition at line 93 of file nurbstess.cc.

94 {
95 #ifndef NDEBUG
96  _glu_dprintf( "bgnrender\n" );
97 #endif
98 }

Referenced by do_bgncurve(), do_bgnsurface(), and playRecording().

◆ bgnsurface()

void NurbsTessellator::bgnsurface ( long  nuid)

Definition at line 113 of file nurbsinterfac.cc.

114 {
115  O_surface *o_surface = new(o_surfacePool) O_surface;
116  o_surface->nuid = nuid;
117  THREAD( do_bgnsurface, o_surface, do_freebgnsurface );
118 }
#define THREAD(work, arg, cleanup)
void do_bgnsurface(O_surface *)
Definition: nurbstess.cc:128
void do_freebgnsurface(O_surface *)
Definition: nurbstess.cc:115
long nuid
Definition: reader.h:116

Referenced by do_bgntrim(), and do_nurbssurface().

◆ bgntrim()

void NurbsTessellator::bgntrim ( void  )

Definition at line 166 of file nurbsinterfac.cc.

167 {
168  O_trim *o_trim = new(o_trimPool) O_trim;
169  THREAD( do_bgntrim, o_trim, do_freebgntrim );
170 }
#define THREAD(work, arg, cleanup)
void do_bgntrim(O_trim *)
Definition: nurbstess.cc:389
Definition: reader.h:94
void do_freebgntrim(O_trim *)
Definition: nurbstess.cc:376

◆ closeobj()

void NurbsTessellator::closeobj ( void  )
virtual

Definition at line 85 of file nurbstess.cc.

86 {
87 #ifndef NDEBUG
88  _glu_dprintf( "closeobj\n" );
89 #endif
90 }

◆ defineMap()

void NurbsTessellator::defineMap ( long  type,
long  rational,
long  ncoords 
)

Definition at line 503 of file nurbsinterfac.cc.

504 {
505  maplist.define( type, (int) rational, (int) ncoords );
506 }
void define(long, int, int)
Definition: maplist.cc:71
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Maplist maplist
Definition: nurbstess.h:105

Referenced by GLUnurbs::GLUnurbs().

◆ discardRecording()

void NurbsTessellator::discardRecording ( void _dl)

Definition at line 509 of file nurbsinterfac.cc.

510 {
511  delete (DisplayList *) _dl;
512 }

◆ do_bgncurve()

void NurbsTessellator::do_bgncurve ( O_curve o_curve)
private

Definition at line 154 of file nurbstess.cc.

155 {
156  if ( inCurve ) {
157  do_nurbserror( 6 );
158  endcurve();
159  }
160 
161  inCurve = 1;
162  currentCurve = o_curve;
164 
165  if( inTrim ) {
166  if( *nextCurve != o_curve ) {
167  isCurveModified = 1;
168  *nextCurve = o_curve;
169  }
170  } else {
171  if( ! playBack ) bgnrender();
172  isDataValid = 1;
173  }
174  nextCurve = &(o_curve->next);
175  nextPwlcurve = &(o_curve->curve.o_pwlcurve);
176  nextNurbscurve = &(o_curve->curve.o_nurbscurve);
177 }
O_nurbscurve ** nextNurbscurve
Definition: nurbstess.h:160
void endcurve(void)
union O_curve::@286 curve
O_curve ** nextCurve
Definition: nurbstess.h:159
void do_nurbserror(int)
Definition: nurbstess.cc:672
O_pwlcurve * o_pwlcurve
Definition: reader.h:58
Curvetype curvetype
Definition: reader.h:60
O_pwlcurve ** nextPwlcurve
Definition: nurbstess.h:161
O_nurbscurve * o_nurbscurve
Definition: reader.h:57
Definition: reader.h:42
virtual void bgnrender(void)
Definition: nurbstess.cc:93
O_curve * currentCurve
Definition: nurbstess.h:166
O_curve * next
Definition: reader.h:61

Referenced by bgncurve().

◆ do_bgnsurface()

void NurbsTessellator::do_bgnsurface ( O_surface o_surface)
private

Definition at line 128 of file nurbstess.cc.

129 {
130  if( inSurface ) {
131  do_nurbserror( 27 );
132  endsurface();
133  }
134  inSurface = 1;
135 
136  if( ! playBack ) bgnrender();
137 
138  isTrimModified = 0;
139  isSurfaceModified = 0;
140  isDataValid = 1;
141  numTrims = 0;
142  currentSurface = o_surface;
145 }
O_surface * currentSurface
Definition: nurbstess.h:164
void endsurface(void)
void do_nurbserror(int)
Definition: nurbstess.cc:672
O_nurbssurface * o_nurbssurface
Definition: reader.h:113
O_trim * o_trim
Definition: reader.h:114
O_trim ** nextTrim
Definition: nurbstess.h:158
virtual void bgnrender(void)
Definition: nurbstess.cc:93
O_nurbssurface ** nextNurbssurface
Definition: nurbstess.h:162

Referenced by bgnsurface().

◆ do_bgntrim()

void NurbsTessellator::do_bgntrim ( O_trim o_trim)
private

Definition at line 389 of file nurbstess.cc.

390 {
391 
392  if( ! inSurface ) {
393  do_nurbserror( 15 );
394  bgnsurface( 0 );
395  inSurface = 2;
396  }
397 
398  if( inTrim ) {
399  do_nurbserror( 16 );
400  endtrim();
401  }
402  inTrim = 1;
403 
404  if( *nextTrim != o_trim ) {
405  isTrimModified = 1;
406  *nextTrim = o_trim;
407  }
408 
409  currentTrim = o_trim;
410  nextTrim = &(o_trim->next);
411  nextCurve = &(o_trim->o_curve);
412 }
void endtrim(void)
O_curve ** nextCurve
Definition: nurbstess.h:159
void do_nurbserror(int)
Definition: nurbstess.cc:672
O_curve * o_curve
Definition: reader.h:95
O_trim ** nextTrim
Definition: nurbstess.h:158
O_trim * currentTrim
Definition: nurbstess.h:165
void bgnsurface(long)
O_trim * next
Definition: reader.h:96

Referenced by bgntrim().

◆ do_check_knots()

int NurbsTessellator::do_check_knots ( Knotvector knots,
const char msg 
)
private

Definition at line 678 of file nurbstess.cc.

679 {
680  int status = knots->validate();
681  if( status ) {
683  if( renderhints.errorchecking != N_NOMSG ) knots->show( msg );
684  }
685  return status;
686 }
Renderhints renderhints
Definition: nurbstess.h:104
REAL errorchecking
Definition: renderhints.h:50
void show(const char *)
Definition: knotvector.cc:132
void do_nurbserror(int)
Definition: nurbstess.cc:672
#define N_NOMSG
Definition: nurbsconsts.h:84
#define msg(x)
Definition: auth_time.c:54
int validate(void)
Definition: knotvector.cc:75
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by nurbscurve(), and nurbssurface().

◆ do_endcurve()

void NurbsTessellator::do_endcurve ( void  )
private

Definition at line 187 of file nurbstess.cc.

188 {
189  if( ! inCurve ) {
190  do_nurbserror( 7 );
191  return;
192  }
193  inCurve = 0;
194 
195  *nextCurve = 0;
197  *nextNurbscurve = 0;
198  else
199  *nextPwlcurve = 0;
200 
201  if ( ! inTrim ) {
202  if( ! isDataValid ) {
204  return;
205  }
206 
207  int errval;
208  errval = ::mysetjmp( jumpbuffer );
209  if( errval == 0 ) {
212  for( O_nurbscurve *n = currentCurve->curve.o_nurbscurve; n != 0; n = n->next )
213  subdivider.addQuilt( n->bezier_curves );
216  if( ! playBack ) endrender();
217  } else {
218  /* XXX */
219  if( ! playBack ) endrender();
220  /*do_draw_pwlcurve( currentCurve->curve.o_pwlcurve ) */;
221  do_nurbserror( 9 );
222  }
223  } else {
224  if( ! playBack ) endrender();
225  do_nurbserror( errval );
226  }
228  resetObjects();
229  }
230 }
O_nurbscurve ** nextNurbscurve
Definition: nurbstess.h:160
void drawCurves(void)
Definition: curvesub.cc:56
union O_curve::@286 curve
GLdouble n
Definition: glext.h:7729
void beginQuilts(void)
Definition: subdivider.cc:186
O_curve ** nextCurve
Definition: nurbstess.h:159
void do_nurbserror(int)
Definition: nurbstess.cc:672
void resetObjects(void)
Definition: nurbstess.cc:71
JumpBuffer * jumpbuffer
Definition: nurbstess.h:135
virtual void endrender(void)
Definition: nurbstess.cc:101
Curvetype curvetype
Definition: reader.h:60
O_pwlcurve ** nextPwlcurve
Definition: nurbstess.h:161
void endQuilts(void)
Definition: subdivider.h:70
O_nurbscurve * o_nurbscurve
Definition: reader.h:57
O_curve * currentCurve
Definition: nurbstess.h:166
void addQuilt(Quilt *)
Definition: subdivider.cc:192
O_nurbscurve * next
Definition: reader.h:75
Subdivider subdivider
Definition: nurbstess.h:134
void do_freecurveall(O_curve *)
Definition: nurbstess.cc:341

Referenced by endcurve().

◆ do_endsurface()

void NurbsTessellator::do_endsurface ( void  )
private

Definition at line 239 of file nurbstess.cc.

240 {
241  if( inTrim ) {
242  do_nurbserror( 12 );
243  endtrim();
244  }
245 
246  if( ! inSurface ) {
247  do_nurbserror( 13 );
248  return;
249  }
250  inSurface = 0;
251 
252  *nextNurbssurface = 0;
253 
254  if( ! isDataValid ) {
255  do_freeall( );
256  return;
257  }
258 
259  if( *nextTrim != 0 ) {
260  isTrimModified = 1;
261  *nextTrim = 0;
262  }
263 
264  int errval;
265 
266  errval = ::mysetjmp( jumpbuffer );
267  if( errval == 0 ) {
268  if( numTrims > 0 ) {
269 
271  for( O_trim *trim = currentSurface->o_trim; trim; trim = trim->next ) {
273  for( O_curve *curve = trim->o_curve; curve; curve = curve->next ) {
274  curve->used = 0;
275  assert( curve->curvetype != ct_none );
276  if (curve->curvetype == ct_pwlcurve) {
277  O_pwlcurve *c = curve->curve.o_pwlcurve;
278  subdivider.addArc( c->npts, c->pts, curve->nuid );
279  } else {
280  Quilt *quilt = curve->curve.o_nurbscurve->bezier_curves;
281  Quiltspec *qspec = quilt->qspec;
282  REAL *cpts = quilt->cpts + qspec->offset;
283  REAL *cptsend = cpts + (qspec->width * qspec->order * qspec->stride);
284  for( ; cpts != cptsend; cpts += qspec->order*qspec->stride )
285  subdivider.addArc( cpts, quilt, curve->nuid );
286  }
287  }
289  }
291  }
292 
295  subdivider.addQuilt( n->bezier_patches );
298  if( ! playBack ) endrender();
299  } else {
300  if( ! playBack ) endrender();
301  do_nurbserror( errval );
302  }
303 
304  do_freeall( );
305  resetObjects();
306 }
void beginTrims(void)
Definition: subdivider.h:61
Definition: quilt.h:64
void addArc(REAL *, Quilt *, long)
Definition: subdivider.cc:157
void endtrim(void)
Quiltspec qspec[MAXDIM]
Definition: quilt.h:69
GLdouble n
Definition: glext.h:7729
#define assert(x)
Definition: debug.h:53
O_surface * currentSurface
Definition: nurbstess.h:164
Definition: reader.h:55
void beginQuilts(void)
Definition: subdivider.cc:186
int stride
Definition: quilt.h:52
int offset
Definition: quilt.h:54
void do_nurbserror(int)
Definition: nurbstess.cc:672
O_nurbssurface * o_nurbssurface
Definition: reader.h:113
void drawSurfaces(long)
Definition: subdivider.cc:204
void resetObjects(void)
Definition: nurbstess.cc:71
JumpBuffer * jumpbuffer
Definition: nurbstess.h:135
virtual void endrender(void)
Definition: nurbstess.cc:101
const GLubyte * c
Definition: glext.h:8905
O_trim * o_trim
Definition: reader.h:114
void endQuilts(void)
Definition: subdivider.h:70
O_trim ** nextTrim
Definition: nurbstess.h:158
Definition: reader.h:94
Definition: reader.h:42
int width
Definition: quilt.h:53
void addQuilt(Quilt *)
Definition: subdivider.cc:192
void endLoop(void)
Definition: subdivider.h:65
void do_freeall(void)
Definition: nurbstess.cc:315
int order
Definition: quilt.h:55
REAL * cpts
Definition: quilt.h:68
O_nurbssurface * next
Definition: reader.h:105
long nuid
Definition: reader.h:116
float REAL
Definition: types.h:41
void beginLoop(void)
Definition: subdivider.h:194
char * trim(char *str, char **last_chr, BOOL strip_quotes)
Definition: inf.c:258
Subdivider subdivider
Definition: nurbstess.h:134
void endTrims(void)
Definition: subdivider.h:66
O_nurbssurface ** nextNurbssurface
Definition: nurbstess.h:162

Referenced by endsurface().

◆ do_endtrim()

void NurbsTessellator::do_endtrim ( void  )
private

Definition at line 422 of file nurbstess.cc.

423 {
424  if( ! inTrim ) {
425  do_nurbserror( 17 );
426  return;
427  }
428  inTrim = 0;
429 
430  if( currentTrim->o_curve == 0 ) {
431  do_nurbserror( 18 );
432  isDataValid = 0;
433  }
434 
435  numTrims++;
436 
437  if( *nextCurve != 0 ) {
438  isTrimModified = 1;
439  *nextCurve = 0;
440  }
441 }
O_curve ** nextCurve
Definition: nurbstess.h:159
void do_nurbserror(int)
Definition: nurbstess.cc:672
O_curve * o_curve
Definition: reader.h:95
O_trim * currentTrim
Definition: nurbstess.h:165

Referenced by endtrim().

◆ do_freeall()

void NurbsTessellator::do_freeall ( void  )
private

Definition at line 315 of file nurbstess.cc.

316 {
317  for( O_trim *o_trim = currentSurface->o_trim; o_trim; ) {
318  O_trim *next_o_trim = o_trim->next;
319  for( O_curve *curve = o_trim->o_curve; curve; ) {
320  O_curve *next_o_curve = curve->next;
321  do_freecurveall( curve );
322  curve = next_o_curve;
323  }
324  if( o_trim->save == 0 ) do_freebgntrim( o_trim );
325  o_trim = next_o_trim;
326  }
327 
328  O_nurbssurface *nurbss, *next_nurbss;
329  for( nurbss= currentSurface->o_nurbssurface; nurbss; nurbss = next_nurbss) {
330  next_nurbss = nurbss->next;
331  if( nurbss->save == 0 )
332  do_freenurbssurface( nurbss );
333  else
334  nurbss->used = 0;
335  }
336 
338 }
void do_freenurbssurface(O_nurbssurface *)
Definition: nurbstess.cc:585
O_surface * currentSurface
Definition: nurbstess.h:164
Definition: reader.h:55
O_nurbssurface * o_nurbssurface
Definition: reader.h:113
O_trim * o_trim
Definition: reader.h:114
Definition: reader.h:94
int save
Definition: reader.h:115
void do_freebgnsurface(O_surface *)
Definition: nurbstess.cc:115
O_curve * next
Definition: reader.h:61
O_trim * next
Definition: reader.h:96
O_nurbssurface * next
Definition: reader.h:105
void do_freebgntrim(O_trim *)
Definition: nurbstess.cc:376
void do_freecurveall(O_curve *)
Definition: nurbstess.cc:341

Referenced by do_endsurface(), and ~NurbsTessellator().

◆ do_freebgncurve()

void NurbsTessellator::do_freebgncurve ( O_curve o_curve)
private

Definition at line 456 of file nurbstess.cc.

457 {
458  o_curve->deleteMe( o_curvePool );
459 }
void deleteMe(Pool &)
Definition: bufpool.h:136

Referenced by bgncurve(), and do_freecurveall().

◆ do_freebgnsurface()

void NurbsTessellator::do_freebgnsurface ( O_surface o_surface)
private

Definition at line 115 of file nurbstess.cc.

116 {
117  o_surface->deleteMe( o_surfacePool );
118 }
void deleteMe(Pool &)
Definition: bufpool.h:136

Referenced by bgnsurface(), and do_freeall().

◆ do_freebgntrim()

void NurbsTessellator::do_freebgntrim ( O_trim o_trim)
private

Definition at line 376 of file nurbstess.cc.

377 {
378  o_trim->deleteMe( o_trimPool );
379 }
void deleteMe(Pool &)
Definition: bufpool.h:136

Referenced by bgntrim(), and do_freeall().

◆ do_freecurveall()

void NurbsTessellator::do_freecurveall ( O_curve curve)
private

Definition at line 341 of file nurbstess.cc.

342 {
343  assert( curve->curvetype != ct_none );
344 
345  if( curve->curvetype == ct_nurbscurve ) {
346  O_nurbscurve *ncurve, *next_ncurve;
347  for( ncurve=curve->curve.o_nurbscurve; ncurve; ncurve=next_ncurve ) {
348  next_ncurve = ncurve->next;
349  if( ncurve->save == 0 )
350  do_freenurbscurve( ncurve );
351  else
352  ncurve->used = 0;
353  }
354  } else {
355  O_pwlcurve *pcurve, *next_pcurve;
356  for( pcurve=curve->curve.o_pwlcurve; pcurve; pcurve=next_pcurve ) {
357  next_pcurve = pcurve->next;
358  if( pcurve->save == 0 )
359  do_freepwlcurve( pcurve );
360  else
361  pcurve->used = 0;
362  }
363  }
364  if( curve->save == 0 )
365  do_freebgncurve( curve );
366 }
void do_freebgncurve(O_curve *)
Definition: nurbstess.cc:456
union O_curve::@286 curve
int save
Definition: reader.h:64
int save
Definition: reader.h:89
#define assert(x)
Definition: debug.h:53
void do_freepwlcurve(O_pwlcurve *)
Definition: nurbstess.cc:450
O_pwlcurve * next
Definition: reader.h:87
int used
Definition: reader.h:76
O_pwlcurve * o_pwlcurve
Definition: reader.h:58
int used
Definition: reader.h:88
Curvetype curvetype
Definition: reader.h:60
int save
Definition: reader.h:77
O_nurbscurve * o_nurbscurve
Definition: reader.h:57
Definition: reader.h:42
void do_freenurbscurve(O_nurbscurve *)
Definition: nurbstess.cc:520
O_nurbscurve * next
Definition: reader.h:75

Referenced by do_endcurve(), and do_freeall().

◆ do_freenurbscurve()

void NurbsTessellator::do_freenurbscurve ( O_nurbscurve o_nurbscurve)
private

Definition at line 520 of file nurbstess.cc.

521 {
522  o_nurbscurve->bezier_curves->deleteMe( quiltPool );
523  o_nurbscurve->deleteMe( o_nurbscurvePool );
524 }
Quilt * bezier_curves
Definition: reader.h:71
void deleteMe(Pool &)
Definition: bufpool.h:136
Pool o_nurbscurvePool
Definition: nurbstess.h:137
void deleteMe(Pool &)
Definition: quilt.cc:61

Referenced by do_freecurveall(), and nurbscurve().

◆ do_freenurbsproperty()

void NurbsTessellator::do_freenurbsproperty ( Property prop)
private

Definition at line 636 of file nurbstess.cc.

637 {
638  prop->deleteMe( propertyPool );
639 }
void deleteMe(Pool &)
Definition: bufpool.h:136

Referenced by do_setnurbsproperty(), do_setnurbsproperty2(), and setnurbsproperty().

◆ do_freenurbssurface()

void NurbsTessellator::do_freenurbssurface ( O_nurbssurface o_nurbssurface)
private

Definition at line 585 of file nurbstess.cc.

586 {
587  o_nurbssurface->bezier_patches->deleteMe( quiltPool );
588  o_nurbssurface->deleteMe( o_nurbssurfacePool );
589 }
void deleteMe(Pool &)
Definition: bufpool.h:136
Quilt * bezier_patches
Definition: reader.h:102
void deleteMe(Pool &)
Definition: quilt.cc:61
Pool o_nurbssurfacePool
Definition: nurbstess.h:141

Referenced by do_freeall(), and nurbssurface().

◆ do_freepwlcurve()

void NurbsTessellator::do_freepwlcurve ( O_pwlcurve o_pwlcurve)
private

Definition at line 450 of file nurbstess.cc.

451 {
452  o_pwlcurve->deleteMe( o_pwlcurvePool );
453 }
void deleteMe(Pool &)
Definition: bufpool.h:136

Referenced by do_freecurveall(), do_pwlcurve(), and pwlcurve().

◆ do_nurbscurve()

void NurbsTessellator::do_nurbscurve ( O_nurbscurve o_nurbscurve)
private

Definition at line 534 of file nurbstess.cc.

535 {
536  if ( ! inCurve ) {
537  bgncurve( 0 );
538  inCurve = 2;
539  }
540 
541  if( o_nurbscurve->used ) {
542  /* error - curve was already called in current surface */
543  do_nurbserror( 23 );
544  isDataValid = 0;
545  return;
546  } else
547  o_nurbscurve->used = 1;
548 
549  if( currentCurve->curvetype == ct_none ) {
551  } else if( currentCurve->curvetype != ct_nurbscurve ) {
552  do_nurbserror( 24 );
553  isDataValid = 0;
554  return;
555  }
556 
557  if( *nextNurbscurve != o_nurbscurve ) {
558  isCurveModified = 1;
559  *nextNurbscurve = o_nurbscurve;
560  }
561 
562  nextNurbscurve = &(o_nurbscurve->next);
563 
564  if( o_nurbscurve->owner != currentCurve ) {
565  isCurveModified = 1;
566  o_nurbscurve->owner = currentCurve;
567  }
568 
569  if( o_nurbscurve->owner == 0 )
570  isCurveModified = 1;
571 
572  if( inCurve == 2 )
573  endcurve();
574 }
O_nurbscurve ** nextNurbscurve
Definition: nurbstess.h:160
void endcurve(void)
O_curve * owner
Definition: reader.h:78
void do_nurbserror(int)
Definition: nurbstess.cc:672
int used
Definition: reader.h:76
Curvetype curvetype
Definition: reader.h:60
Definition: reader.h:42
O_curve * currentCurve
Definition: nurbstess.h:166
O_nurbscurve * next
Definition: reader.h:75
void bgncurve(long)

Referenced by nurbscurve().

◆ do_nurbserror()

void NurbsTessellator::do_nurbserror ( int  msg)
private

◆ do_nurbssurface()

void NurbsTessellator::do_nurbssurface ( O_nurbssurface o_nurbssurface)
private

Definition at line 598 of file nurbstess.cc.

599 {
600  if( ! inSurface ) {
601  bgnsurface( 0 );
602  inSurface = 2;
603  }
604 
605  if( o_nurbssurface->used ) {
606  /* error - surface was already called in current block */
607  do_nurbserror( 25 );
608  isDataValid = 0;
609  return;
610  } else
611  o_nurbssurface->used = 1;
612 
613  if( *nextNurbssurface != o_nurbssurface ) {
614  isSurfaceModified = 1;
615  *nextNurbssurface = o_nurbssurface;
616  }
617 
618  if( o_nurbssurface->owner != currentSurface ) {
619  isSurfaceModified = 1;
620  o_nurbssurface->owner = currentSurface;
621  }
622  nextNurbssurface = &(o_nurbssurface->next);
623 
624  if( inSurface == 2 )
625  endsurface();
626 }
O_surface * currentSurface
Definition: nurbstess.h:164
void endsurface(void)
O_surface * owner
Definition: reader.h:104
void do_nurbserror(int)
Definition: nurbstess.cc:672
void bgnsurface(long)
O_nurbssurface * next
Definition: reader.h:105
O_nurbssurface ** nextNurbssurface
Definition: nurbstess.h:162

Referenced by nurbssurface().

◆ do_pwlcurve()

void NurbsTessellator::do_pwlcurve ( O_pwlcurve o_pwlcurve)
private

Definition at line 468 of file nurbstess.cc.

469 {
470  if( ! inTrim ) {
471  do_nurbserror( 19 );
472  if( o_pwlcurve->save == 0 )
473  do_freepwlcurve(o_pwlcurve );
474  return;
475  }
476 
477  if( ! inCurve ) {
478  bgncurve( 0 );
479  inCurve = 2;
480  }
481 
482  if( o_pwlcurve->used ) {
483  do_nurbserror( 20 );
484  isDataValid = 0;
485  return;
486  } else
487  o_pwlcurve->used = 1;
488 
489  if( currentCurve->curvetype == ct_none ) {
491  } else if( currentCurve->curvetype != ct_pwlcurve ) {
492  do_nurbserror( 21 );
493  isDataValid = 0;
494  return;
495  }
496 
497  if( *nextPwlcurve != o_pwlcurve ) {
498  isCurveModified = 1;
499  *nextPwlcurve = o_pwlcurve;
500  }
501  nextPwlcurve = &(o_pwlcurve->next);
502 
503  if( o_pwlcurve->owner != currentCurve ) {
504  isCurveModified = 1;
505  o_pwlcurve->owner = currentCurve;
506  }
507 
508  if( inCurve == 2 )
509  endcurve();
510 }
void endcurve(void)
int save
Definition: reader.h:89
O_curve * owner
Definition: reader.h:90
void do_freepwlcurve(O_pwlcurve *)
Definition: nurbstess.cc:450
O_pwlcurve * next
Definition: reader.h:87
void do_nurbserror(int)
Definition: nurbstess.cc:672
int used
Definition: reader.h:88
Curvetype curvetype
Definition: reader.h:60
O_pwlcurve ** nextPwlcurve
Definition: nurbstess.h:161
Definition: reader.h:42
O_curve * currentCurve
Definition: nurbstess.h:166
void bgncurve(long)

Referenced by pwlcurve().

◆ do_setnurbsproperty()

void NurbsTessellator::do_setnurbsproperty ( Property prop)
private

Definition at line 649 of file nurbstess.cc.

650 {
651  renderhints.setProperty( prop->tag, prop->value );
652  if( prop->save == 0 )
653  do_freenurbsproperty( prop );
654 }
REAL value
Definition: reader.h:123
void do_freenurbsproperty(Property *)
Definition: nurbstess.cc:636
Renderhints renderhints
Definition: nurbstess.h:104
int save
Definition: reader.h:124
long tag
Definition: reader.h:122
void setProperty(long, REAL)
Definition: renderhints.cc:117

Referenced by setnurbsproperty().

◆ do_setnurbsproperty2()

void NurbsTessellator::do_setnurbsproperty2 ( Property prop)
private

Definition at line 657 of file nurbstess.cc.

658 {
659  Mapdesc *mapdesc = maplist.find( prop->type );
660 
661  mapdesc->setProperty( prop->tag, prop->value );
662  if( prop->save == 0 )
663  do_freenurbsproperty( prop );
664 }
REAL value
Definition: reader.h:123
void do_freenurbsproperty(Property *)
Definition: nurbstess.cc:636
int save
Definition: reader.h:124
Mapdesc * find(long)
Definition: maplist.cc:102
long type
Definition: reader.h:121
long tag
Definition: reader.h:122
void setProperty(long, REAL)
Definition: mapdesc.cc:797
Maplist maplist
Definition: nurbstess.h:105

Referenced by setnurbsproperty().

◆ endcurve()

void NurbsTessellator::endcurve ( void  )

Definition at line 141 of file nurbsinterfac.cc.

142 {
143  THREAD2( do_endcurve );
144 }
#define THREAD2(work)
void do_endcurve(void)
Definition: nurbstess.cc:187

Referenced by do_bgncurve(), do_nurbscurve(), and do_pwlcurve().

◆ endRecording()

void NurbsTessellator::endRecording ( void  )

Definition at line 522 of file nurbsinterfac.cc.

523 {
524  dl->endList();
525  dl = 0;
526 }
DisplayList * dl
Definition: nurbstess.h:168
void endList(void)
Definition: displaylist.cc:70

◆ endrender()

void NurbsTessellator::endrender ( void  )
virtual

Reimplemented in GLUnurbs.

Definition at line 101 of file nurbstess.cc.

102 {
103 #ifndef NDEBUG
104  _glu_dprintf( "endrender\n" );
105 #endif
106 }

Referenced by do_endcurve(), do_endsurface(), and playRecording().

◆ endsurface()

void NurbsTessellator::endsurface ( void  )

Definition at line 153 of file nurbsinterfac.cc.

154 {
156 }
void do_endsurface(void)
Definition: nurbstess.cc:239
#define THREAD2(work)

Referenced by do_bgnsurface(), and do_nurbssurface().

◆ endtrim()

void NurbsTessellator::endtrim ( void  )

Definition at line 179 of file nurbsinterfac.cc.

180 {
181  THREAD2( do_endtrim );
182 }
#define THREAD2(work)
void do_endtrim(void)
Definition: nurbstess.cc:422

Referenced by do_bgntrim(), do_endsurface(), and ~NurbsTessellator().

◆ errorHandler()

void NurbsTessellator::errorHandler ( int  )
virtual

Reimplemented in GLUnurbs.

Definition at line 667 of file nurbstess.cc.

668 {
669 }

Referenced by do_nurbserror().

◆ getnurbsproperty() [1/2]

void NurbsTessellator::getnurbsproperty ( long  tag,
INREAL value 
)

Definition at line 415 of file nurbsinterfac.cc.

416 {
417  if( renderhints.isProperty( tag ) ) {
419  } else {
420  do_nurbserror( 26 );
421  }
422 }
Renderhints renderhints
Definition: nurbstess.h:104
int isProperty(long)
Definition: renderhints.cc:85
Definition: ecma_167.h:138
void do_nurbserror(int)
Definition: nurbstess.cc:672
REAL getProperty(long)
Definition: renderhints.cc:99

◆ getnurbsproperty() [2/2]

void NurbsTessellator::getnurbsproperty ( long  type,
long  tag,
INREAL value 
)

Definition at line 431 of file nurbsinterfac.cc.

432 {
433  Mapdesc *mapdesc = maplist.locate( type );
434 
435  if( mapdesc == 0 )
436  do_nurbserror( 35 );
437 
438  if( mapdesc->isProperty( tag ) ) {
439  *value = mapdesc->getProperty( tag );
440  } else {
441  do_nurbserror( 26 );
442  }
443 }
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: ecma_167.h:138
REAL getProperty(long)
Definition: mapdesc.cc:769
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
int isProperty(long)
Definition: mapdesc.cc:750
Maplist maplist
Definition: nurbstess.h:105

◆ makeobj()

void NurbsTessellator::makeobj ( int  n)
virtual

Definition at line 77 of file nurbstess.cc.

78 {
79 #ifndef NDEBUG
80  _glu_dprintf( "makeobj\n" );
81 #endif
82 }

◆ nurbscurve()

void NurbsTessellator::nurbscurve ( long  nknots,
INREAL  knot[],
long  byte_stride,
INREAL  ctlarray[],
long  order,
long  type 
)

Definition at line 269 of file nurbsinterfac.cc.

276 {
277 
278  Mapdesc *mapdesc = maplist.locate( type );
279 
280  if( mapdesc == 0 ) {
281  do_nurbserror( 35 );
282  isDataValid = 0;
283  return;
284  }
285 
286  if( ctlarray == 0 ) {
287  do_nurbserror( 36 );
288  isDataValid = 0;
289  return;
290  }
291 
292  if( byte_stride < 0 ) {
293  do_nurbserror( 34 );
294  isDataValid = 0;
295  return;
296  }
297 
298  Knotvector knots;
299 
300  knots.init( nknots, byte_stride, order, knot );
301  if( do_check_knots( &knots, "curve" ) ) return;
302 
303  O_nurbscurve *o_nurbscurve = new(o_nurbscurvePool) O_nurbscurve(type);
304  o_nurbscurve->bezier_curves = new(quiltPool) Quilt(mapdesc);
305  o_nurbscurve->bezier_curves->toBezier( knots,ctlarray, mapdesc->getNcoords() );
306 
307  THREAD( do_nurbscurve, o_nurbscurve, do_freenurbscurve );
308 }
GLuint GLdouble GLdouble GLint GLint order
Definition: glext.h:11194
Definition: quilt.h:64
void init(long, long, long, INREAL *)
Definition: knotvector.cc:50
#define THREAD(work, arg, cleanup)
Quilt * bezier_curves
Definition: reader.h:71
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
void toBezier(Knotvector &, INREAL *, long)
Definition: tobezier.cc:117
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
int getNcoords(void)
Definition: mapdesc.h:198
void do_nurbscurve(O_nurbscurve *)
Definition: nurbstess.cc:534
Pool o_nurbscurvePool
Definition: nurbstess.h:137
Maplist maplist
Definition: nurbstess.h:105
void do_freenurbscurve(O_nurbscurve *)
Definition: nurbstess.cc:520
int do_check_knots(Knotvector *, const char *)
Definition: nurbstess.cc:678

◆ nurbssurface()

void NurbsTessellator::nurbssurface ( long  sknot_count,
INREAL  sknot[],
long  tknot_count,
INREAL  tknot[],
long  s_byte_stride,
long  t_byte_stride,
INREAL  ctlarray[],
long  sorder,
long  torder,
long  type 
)

Definition at line 318 of file nurbsinterfac.cc.

329 {
330  Mapdesc *mapdesc = maplist.locate( type );
331 
332  if( mapdesc == 0 ) {
333  do_nurbserror( 35 );
334  isDataValid = 0;
335  return;
336  }
337 
338  if( s_byte_stride < 0 ) {
339  do_nurbserror( 34 );
340  isDataValid = 0;
341  return;
342  }
343 
344  if( t_byte_stride < 0 ) {
345  do_nurbserror( 34 );
346  isDataValid = 0;
347  return;
348  }
349 
350  Knotvector sknotvector, tknotvector;
351 
352  sknotvector.init( sknot_count, s_byte_stride, sorder, sknot );
353  if( do_check_knots( &sknotvector, "surface" ) ) return;
354 
355  tknotvector.init( tknot_count, t_byte_stride, torder, tknot );
356  if( do_check_knots( &tknotvector, "surface" ) ) return;
357 
358  O_nurbssurface *o_nurbssurface = new(o_nurbssurfacePool) O_nurbssurface(type);
359  o_nurbssurface->bezier_patches = new(quiltPool) Quilt(mapdesc);
360 
361  o_nurbssurface->bezier_patches->toBezier( sknotvector, tknotvector,
362  ctlarray, mapdesc->getNcoords() );
363  THREAD( do_nurbssurface, o_nurbssurface, do_freenurbssurface );
364 }
Definition: quilt.h:64
void init(long, long, long, INREAL *)
Definition: knotvector.cc:50
void do_freenurbssurface(O_nurbssurface *)
Definition: nurbstess.cc:585
#define THREAD(work, arg, cleanup)
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
void toBezier(Knotvector &, INREAL *, long)
Definition: tobezier.cc:117
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
int getNcoords(void)
Definition: mapdesc.h:198
Quilt * bezier_patches
Definition: reader.h:102
Pool o_nurbssurfacePool
Definition: nurbstess.h:141
Maplist maplist
Definition: nurbstess.h:105
int do_check_knots(Knotvector *, const char *)
Definition: nurbstess.cc:678
void do_nurbssurface(O_nurbssurface *)
Definition: nurbstess.cc:598

◆ playRecording()

void NurbsTessellator::playRecording ( void _dl)

Definition at line 529 of file nurbsinterfac.cc.

530 {
531  playBack = 1;
532  bgnrender();
533  ((DisplayList *)_dl)->play();
534  endrender();
535  playBack = 0;
536 }
virtual void endrender(void)
Definition: nurbstess.cc:101
virtual void bgnrender(void)
Definition: nurbstess.cc:93

◆ pwlcurve()

void NurbsTessellator::pwlcurve ( long  count,
INREAL  array[],
long  byte_stride,
long  type 
)

Definition at line 197 of file nurbsinterfac.cc.

198 {
199  Mapdesc *mapdesc = maplist.locate( type );
200 
201  if( mapdesc == 0 ) {
202  do_nurbserror( 35 );
203  isDataValid = 0;
204  return;
205  }
206 
207  if ( (type != N_P2D) && (type != N_P2DR) ) {
208  do_nurbserror( 22 );
209  isDataValid = 0;
210  return;
211  }
212  if( count < 0 ) {
213  do_nurbserror( 33 );
214  isDataValid = 0;
215  return;
216  }
217  if( byte_stride < 0 ) {
218  do_nurbserror( 34 );
219  isDataValid = 0;
220  return;
221  }
222 
223 #ifdef NOTDEF
224  if( mapdesc->isRational() ) {
225  INREAL *p = array;
226  INREAL x = p[0]; INREAL y = p[1]; INREAL w = p[2];
227  p = (INREAL *) (((char *) p) + byte_stride);
228  for( long i = 1; i != count; i++ ) {
229  if( p[0] == x && p[1] == y && p[2] == w ) break;
230  x = p[0]; y = p[1]; w = p[2];
231  p = (INREAL *) (((char *) p) + byte_stride);
232  }
233  if( i != count ) {
234  do_nurbserror( 37 );
235  _glu_dprintf( "point %d (%f,%f)\n", i, x, y );
236  isDataValid = 0;
237  return;
238  }
239  } else {
240  INREAL *p = array;
241  INREAL x = p[0]; INREAL y = p[1];
242  p = (INREAL *) (((char *) p) + byte_stride);
243  for( long i = 1; i != count; i++ ) {
244  if( p[0] == x && p[1] == y ) break;
245  x = p[0]; y = p[1];
246  p = (INREAL *) (((char *) p) + byte_stride);
247  }
248  if( i != count ) {
249  do_nurbserror( 37 );
250  _glu_dprintf( "point %d (%f,%f)\n", i, x, y );
251  isDataValid = 0;
252  return;
253  }
254  }
255 #endif
256 
257  O_pwlcurve *o_pwlcurve = new(o_pwlcurvePool) O_pwlcurve( type, count, array, byte_stride, extTrimVertexPool.get((int)count) );
258  THREAD( do_pwlcurve, o_pwlcurve, do_freepwlcurve );
259 }
TrimVertexPool extTrimVertexPool
Definition: nurbstess.h:146
GLubyte GLubyte GLubyte GLubyte w
Definition: glext.h:6102
#define THREAD(work, arg, cleanup)
void do_pwlcurve(O_pwlcurve *)
Definition: nurbstess.cc:468
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
void do_freepwlcurve(O_pwlcurve *)
Definition: nurbstess.cc:450
Mapdesc * locate(long)
Definition: maplist.cc:110
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
void do_nurbserror(int)
Definition: nurbstess.cc:672
TrimVertex * get(int)
#define N_P2D
Definition: nurbsconsts.h:116
#define N_P2DR
Definition: nurbsconsts.h:117
#define INREAL
Definition: types.h:40
Maplist maplist
Definition: nurbstess.h:105
int isRational(void)
Definition: mapdesc.h:192
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLfloat GLfloat p
Definition: glext.h:8902
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint GLenum GLenum GLenum GLint GLuint GLenum GLenum GLfloat GLenum GLfloat GLenum GLint const GLfloat GLenum GLint const GLushort GLint GLint GLsizei GLsizei GLenum GLsizei GLsizei GLenum GLenum const GLvoid GLenum GLdouble GLenum GLint GLenum GLenum GLint GLenum GLenum GLfloat GLenum GLenum GLfloat GLenum GLfloat GLenum GLushort const GLubyte GLenum GLenum GLenum GLint GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLvoid GLenum GLenum GLint GLenum GLint GLenum GLint GLuint GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble const GLfloat GLenum const GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLdouble GLint GLint GLsizei GLsizei GLenum GLuint GLenum array
Definition: glfuncs.h:320

◆ redefineMaps()

void NurbsTessellator::redefineMaps ( void  )

Definition at line 497 of file nurbsinterfac.cc.

498 {
500 }
void initialize(void)
Definition: maplist.cc:56
Maplist maplist
Definition: nurbstess.h:105

Referenced by GLUnurbs::GLUnurbs().

◆ resetObjects()

void NurbsTessellator::resetObjects ( void  )
private

Definition at line 71 of file nurbstess.cc.

72 {
73  subdivider.clear();
74 }
void clear(void)
Definition: subdivider.cc:135
Subdivider subdivider
Definition: nurbstess.h:134

Referenced by do_endcurve(), and do_endsurface().

◆ set_domain_distance_u_rate()

void NurbsTessellator::set_domain_distance_u_rate ( REAL  u_rate)

Definition at line 53 of file nurbstess.cc.

54 {
56 }
void set_domain_distance_u_rate(REAL u_rate)
Definition: subdivider.h:82
Subdivider subdivider
Definition: nurbstess.h:134

Referenced by GLUnurbs::GLUnurbs().

◆ set_domain_distance_v_rate()

void NurbsTessellator::set_domain_distance_v_rate ( REAL  v_rate)

Definition at line 59 of file nurbstess.cc.

60 {
62 }
void set_domain_distance_v_rate(REAL v_rate)
Definition: subdivider.h:86
Subdivider subdivider
Definition: nurbstess.h:134

Referenced by GLUnurbs::GLUnurbs().

◆ set_is_domain_distance_sampling()

void NurbsTessellator::set_is_domain_distance_sampling ( int  flag)

Definition at line 65 of file nurbstess.cc.

66 {
68 }
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean flag
Definition: glfuncs.h:52
void set_is_domain_distance_sampling(int flag)
Definition: subdivider.h:90
Subdivider subdivider
Definition: nurbstess.h:134

Referenced by GLUnurbs::GLUnurbs().

◆ setnurbsproperty() [1/4]

void NurbsTessellator::setnurbsproperty ( long  tag,
INREAL  value 
)

Definition at line 373 of file nurbsinterfac.cc.

374 {
375  if( ! renderhints.isProperty( tag ) ) {
376  do_nurbserror( 26 );
377  } else {
378  Property *prop = new(propertyPool) Property( tag, value );
380  }
381 }
void do_freenurbsproperty(Property *)
Definition: nurbstess.cc:636
Renderhints renderhints
Definition: nurbstess.h:104
#define THREAD(work, arg, cleanup)
int isProperty(long)
Definition: renderhints.cc:85
Definition: ecma_167.h:138
void do_nurbserror(int)
Definition: nurbstess.cc:672
void do_setnurbsproperty(Property *)
Definition: nurbstess.cc:649
_In_ DWORD Property
Definition: setupapi.h:1545

Referenced by GLUnurbs::GLUnurbs(), GLUnurbs::loadCullingMatrix(), GLUnurbs::loadSamplingMatrix(), and GLUnurbs::setSamplingMatrixIdentity().

◆ setnurbsproperty() [2/4]

void NurbsTessellator::setnurbsproperty ( long  type,
long  tag,
INREAL  value 
)

Definition at line 389 of file nurbsinterfac.cc.

390 {
391  Mapdesc *mapdesc = maplist.locate( type );
392 
393  if( mapdesc == 0 ) {
394  do_nurbserror( 35 );
395  return;
396  }
397 
398  if( ! mapdesc->isProperty( tag ) ) {
399  do_nurbserror( 26 );
400  return;
401  }
402 
403  Property *prop = new(propertyPool) Property( type, tag, value );
405 }
void do_freenurbsproperty(Property *)
Definition: nurbstess.cc:636
#define THREAD(work, arg, cleanup)
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
Definition: ecma_167.h:138
void do_setnurbsproperty2(Property *)
Definition: nurbstess.cc:657
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
int isProperty(long)
Definition: mapdesc.cc:750
_In_ DWORD Property
Definition: setupapi.h:1545
Maplist maplist
Definition: nurbstess.h:105

◆ setnurbsproperty() [3/4]

void NurbsTessellator::setnurbsproperty ( long  type,
long  purpose,
INREAL mat 
)

Definition at line 451 of file nurbsinterfac.cc.

452 {
453  // XXX - cannot be put in display list
454  Mapdesc *mapdesc = maplist.locate( type );
455 
456  if( mapdesc == 0 ) {
457  do_nurbserror( 35 );
458  isDataValid = 0;
459  } else if( purpose == N_BBOXSIZE ) {
460  mapdesc->setBboxsize( mat );
461  } else {
462 #ifndef NDEBUG
463  _glu_dprintf( "ERRORRORRORR!!!\n");
464 #endif
465  }
466 }
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static const MAT2 mat
Definition: font.c:66
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
void setBboxsize(INREAL *)
Definition: mapdesc.cc:84
#define N_BBOXSIZE
Definition: nurbsconsts.h:112
Maplist maplist
Definition: nurbstess.h:105

◆ setnurbsproperty() [4/4]

void NurbsTessellator::setnurbsproperty ( long  type,
long  purpose,
INREAL mat,
long  rstride,
long  cstride 
)

Definition at line 474 of file nurbsinterfac.cc.

476 {
477  // XXX - cannot be put in display list
478  Mapdesc *mapdesc = maplist.locate( type );
479 
480  if( mapdesc == 0 ) {
481  do_nurbserror( 35 );
482  isDataValid = 0;
483  } else if( purpose == N_CULLINGMATRIX ) {
484  mapdesc->setCmat( mat, rstride, cstride );
485  } else if( purpose == N_SAMPLINGMATRIX ) {
486  mapdesc->setSmat( mat, rstride, cstride );
487  } else if( purpose == N_BBOXMATRIX ) {
488  mapdesc->setBmat( mat, rstride, cstride );
489  } else {
490 #ifndef NDEBUG
491  _glu_dprintf( "ERRORRORRORR!!!\n");
492 #endif
493  }
494 }
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
static const MAT2 mat
Definition: font.c:66
#define N_CULLINGMATRIX
Definition: nurbsconsts.h:105
#define N_SAMPLINGMATRIX
Definition: nurbsconsts.h:106
Mapdesc * locate(long)
Definition: maplist.cc:110
void do_nurbserror(int)
Definition: nurbstess.cc:672
void setBmat(INREAL *, long, long)
Definition: mapdesc.h:150
void setCmat(INREAL *, long, long)
Definition: mapdesc.h:156
void setSmat(INREAL *, long, long)
Definition: mapdesc.h:162
Maplist maplist
Definition: nurbstess.h:105
#define N_BBOXMATRIX
Definition: nurbsconsts.h:107

Member Data Documentation

◆ backend

Backend NurbsTessellator::backend
protected

Definition at line 106 of file nurbstess.h.

◆ currentCurve

O_curve* NurbsTessellator::currentCurve
private

Definition at line 166 of file nurbstess.h.

Referenced by do_bgncurve(), do_endcurve(), do_nurbscurve(), and do_pwlcurve().

◆ currentSurface

O_surface* NurbsTessellator::currentSurface
private

Definition at line 164 of file nurbstess.h.

Referenced by do_bgnsurface(), do_endsurface(), do_freeall(), and do_nurbssurface().

◆ currentTrim

O_trim* NurbsTessellator::currentTrim
private

Definition at line 165 of file nurbstess.h.

Referenced by do_bgntrim(), and do_endtrim().

◆ dl

DisplayList* NurbsTessellator::dl
private

Definition at line 168 of file nurbstess.h.

Referenced by beginRecording(), endRecording(), and NurbsTessellator().

◆ extTrimVertexPool

TrimVertexPool NurbsTessellator::extTrimVertexPool
private

Definition at line 146 of file nurbstess.h.

Referenced by pwlcurve().

◆ inCurve

int NurbsTessellator::inCurve
private

Definition at line 149 of file nurbstess.h.

Referenced by do_bgncurve(), do_endcurve(), do_nurbscurve(), do_pwlcurve(), and NurbsTessellator().

◆ inSurface

int NurbsTessellator::inSurface
private

◆ inTrim

int NurbsTessellator::inTrim
private

◆ isCurveModified

int NurbsTessellator::isCurveModified
private

Definition at line 151 of file nurbstess.h.

Referenced by do_bgncurve(), do_nurbscurve(), and do_pwlcurve().

◆ isDataValid

◆ isSurfaceModified

int NurbsTessellator::isSurfaceModified
private

Definition at line 153 of file nurbstess.h.

Referenced by do_bgnsurface(), and do_nurbssurface().

◆ isTrimModified

int NurbsTessellator::isTrimModified
private

Definition at line 152 of file nurbstess.h.

Referenced by do_bgnsurface(), do_bgntrim(), do_endsurface(), and do_endtrim().

◆ jumpbuffer

JumpBuffer* NurbsTessellator::jumpbuffer
private

Definition at line 135 of file nurbstess.h.

Referenced by do_endcurve(), do_endsurface(), NurbsTessellator(), and ~NurbsTessellator().

◆ maplist

Maplist NurbsTessellator::maplist
protected

◆ nextCurve

O_curve** NurbsTessellator::nextCurve
private

Definition at line 159 of file nurbstess.h.

Referenced by do_bgncurve(), do_bgntrim(), do_endcurve(), and do_endtrim().

◆ nextNurbscurve

O_nurbscurve** NurbsTessellator::nextNurbscurve
private

Definition at line 160 of file nurbstess.h.

Referenced by do_bgncurve(), do_endcurve(), and do_nurbscurve().

◆ nextNurbssurface

O_nurbssurface** NurbsTessellator::nextNurbssurface
private

Definition at line 162 of file nurbstess.h.

Referenced by do_bgnsurface(), do_endsurface(), do_nurbssurface(), and ~NurbsTessellator().

◆ nextPwlcurve

O_pwlcurve** NurbsTessellator::nextPwlcurve
private

Definition at line 161 of file nurbstess.h.

Referenced by do_bgncurve(), do_endcurve(), and do_pwlcurve().

◆ nextTrim

O_trim** NurbsTessellator::nextTrim
private

Definition at line 158 of file nurbstess.h.

Referenced by do_bgnsurface(), do_bgntrim(), and do_endsurface().

◆ numTrims

int NurbsTessellator::numTrims
private

Definition at line 155 of file nurbstess.h.

Referenced by do_bgnsurface(), do_endsurface(), and do_endtrim().

◆ o_curvePool

Pool NurbsTessellator::o_curvePool
private

Definition at line 138 of file nurbstess.h.

Referenced by bgncurve(), and do_freebgncurve().

◆ o_nurbscurvePool

Pool NurbsTessellator::o_nurbscurvePool
private

Definition at line 137 of file nurbstess.h.

Referenced by do_freenurbscurve(), and nurbscurve().

◆ o_nurbssurfacePool

Pool NurbsTessellator::o_nurbssurfacePool
private

Definition at line 141 of file nurbstess.h.

Referenced by do_freenurbssurface(), and nurbssurface().

◆ o_pwlcurvePool

Pool NurbsTessellator::o_pwlcurvePool
private

Definition at line 136 of file nurbstess.h.

Referenced by do_freepwlcurve(), and pwlcurve().

◆ o_surfacePool

Pool NurbsTessellator::o_surfacePool
private

Definition at line 140 of file nurbstess.h.

Referenced by bgnsurface(), and do_freebgnsurface().

◆ o_trimPool

Pool NurbsTessellator::o_trimPool
private

Definition at line 139 of file nurbstess.h.

Referenced by bgntrim(), and do_freebgntrim().

◆ playBack

int NurbsTessellator::playBack
private

◆ propertyPool

Pool NurbsTessellator::propertyPool
private

Definition at line 142 of file nurbstess.h.

Referenced by do_freenurbsproperty(), and setnurbsproperty().

◆ quiltPool

Pool NurbsTessellator::quiltPool

Definition at line 144 of file nurbstess.h.

Referenced by do_freenurbscurve(), do_freenurbssurface(), nurbscurve(), and nurbssurface().

◆ renderhints

Renderhints NurbsTessellator::renderhints
protected

◆ subdivider


The documentation for this class was generated from the following files: