ReactOS  0.4.14-dev-390-g34947ad
render.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void __gl_renderMesh (GLUtesselator *tess, GLUmesh *mesh)
 
void __gl_renderBoundary (GLUtesselator *tess, GLUmesh *mesh)
 
GLboolean __gl_renderCache (GLUtesselator *tess)
 

Function Documentation

◆ __gl_renderBoundary()

void __gl_renderBoundary ( GLUtesselator tess,
GLUmesh mesh 
)

Definition at line 339 of file render.c.

340 {
341  GLUface *f;
342  GLUhalfEdge *e;
343 
344  for( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) {
345  if( f->inside ) {
347  e = f->anEdge;
348  do {
349  CALL_VERTEX_OR_VERTEX_DATA( e->Org->data );
350  e = e->Lnext;
351  } while( e != f->anEdge );
353  }
354  }
355 }
#define CALL_VERTEX_OR_VERTEX_DATA(a)
Definition: tess.h:140
GLUface * next
Definition: mesh.h:127
#define GL_LINE_LOOP
Definition: gl.h:192
Definition: mesh.h:126
#define e
Definition: ke_i.h:82
GLUface fHead
Definition: mesh.h:165
GLfloat f
Definition: glext.h:7540
#define CALL_END_OR_END_DATA()
Definition: tess.h:150
#define CALL_BEGIN_OR_BEGIN_DATA(a)
Definition: tess.h:135
#define f
Definition: ke_i.h:83

Referenced by gluTessEndPolygon().

◆ __gl_renderCache()

GLboolean __gl_renderCache ( GLUtesselator tess)

Definition at line 441 of file render.c.

442 {
443  CachedVertex *v0 = tess->cache;
444  CachedVertex *vn = v0 + tess->cacheCount;
445  CachedVertex *vc;
446  GLdouble norm[3];
447  int sign;
448 
449  if( tess->cacheCount < 3 ) {
450  /* Degenerate contour -- no output */
451  return TRUE;
452  }
453 
454  norm[0] = tess->normal[0];
455  norm[1] = tess->normal[1];
456  norm[2] = tess->normal[2];
457  if( norm[0] == 0 && norm[1] == 0 && norm[2] == 0 ) {
458  ComputeNormal( tess, norm, FALSE );
459  }
460 
461  sign = ComputeNormal( tess, norm, TRUE );
462  if( sign == SIGN_INCONSISTENT ) {
463  /* Fan triangles did not have a consistent orientation */
464  return FALSE;
465  }
466  if( sign == 0 ) {
467  /* All triangles were degenerate */
468  return TRUE;
469  }
470 
471  /* Make sure we do the right thing for each winding rule */
472  switch( tess->windingRule ) {
475  break;
477  if( sign < 0 ) return TRUE;
478  break;
480  if( sign > 0 ) return TRUE;
481  break;
483  return TRUE;
484  }
485 
487  : (tess->cacheCount > 3) ? GL_TRIANGLE_FAN
488  : GL_TRIANGLES );
489 
490  CALL_VERTEX_OR_VERTEX_DATA( v0->data );
491  if( sign > 0 ) {
492  for( vc = v0+1; vc < vn; ++vc ) {
494  }
495  } else {
496  for( vc = vn-1; vc > v0; --vc ) {
498  }
499  }
501  return TRUE;
502 }
double GLdouble
Definition: gl.h:163
static size_t double int int int * sign
Definition: printf.c:69
#define GL_TRIANGLES
Definition: gl.h:194
#define CALL_VERTEX_OR_VERTEX_DATA(a)
Definition: tess.h:140
_Tp _STLP_CALL norm(const complex< _Tp > &__z)
Definition: _complex.h:741
void * data
Definition: tess.h:56
GLfloat v0
Definition: glext.h:6061
CachedVertex cache[TESS_MAX_CACHE]
Definition: tess.h:108
#define GL_LINE_LOOP
Definition: gl.h:192
GLdouble normal[3]
Definition: tess.h:73
GLboolean boundaryOnly
Definition: tess.h:93
#define GL_TRIANGLE_FAN
Definition: gl.h:196
#define GLU_TESS_WINDING_POSITIVE
Definition: glu.h:262
#define CALL_END_OR_END_DATA()
Definition: tess.h:150
#define TRUE
Definition: render.c:43
static int ComputeNormal(GLUtesselator *tess, GLdouble norm[3], int check)
Definition: render.c:362
#define SIGN_INCONSISTENT
Definition: render.c:360
#define FALSE
Definition: render.c:46
GLenum windingRule
Definition: tess.h:80
#define CALL_BEGIN_OR_BEGIN_DATA(a)
Definition: tess.h:135
#define GLU_TESS_WINDING_ODD
Definition: glu.h:260
#define GLU_TESS_WINDING_NEGATIVE
Definition: glu.h:263
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 vn
Definition: glfuncs.h:238
#define GLU_TESS_WINDING_ABS_GEQ_TWO
Definition: glu.h:264
#define GLU_TESS_WINDING_NONZERO
Definition: glu.h:261
int cacheCount
Definition: tess.h:107

Referenced by gluTessEndPolygon().

◆ __gl_renderMesh()

void __gl_renderMesh ( GLUtesselator tess,
GLUmesh mesh 
)

Definition at line 82 of file render.c.

83 {
84  GLUface *f;
85 
86  /* Make a list of separate triangles so we can render them all at once */
87  tess->lonelyTriList = NULL;
88 
89  for( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) {
90  f->marked = FALSE;
91  }
92  for( f = mesh->fHead.next; f != &mesh->fHead; f = f->next ) {
93 
94  /* We examine all faces in an arbitrary order. Whenever we find
95  * an unprocessed face F, we output a group of faces including F
96  * whose size is maximum.
97  */
98  if( f->inside && ! f->marked ) {
99  RenderMaximumFaceGroup( tess, f );
100  assert( f->marked );
101  }
102  }
103  if( tess->lonelyTriList != NULL ) {
104  RenderLonelyTriangles( tess, tess->lonelyTriList );
105  tess->lonelyTriList = NULL;
106  }
107 }
#define assert(x)
Definition: debug.h:53
GLUface * next
Definition: mesh.h:127
Definition: mesh.h:126
static void RenderMaximumFaceGroup(GLUtesselator *tess, GLUface *fOrig)
Definition: render.c:110
GLUface fHead
Definition: mesh.h:165
smooth NULL
Definition: ftsmooth.c:416
GLfloat f
Definition: glext.h:7540
GLUface * lonelyTriList
Definition: tess.h:94
#define FALSE
Definition: render.c:46
#define f
Definition: ke_i.h:83
static void RenderLonelyTriangles(GLUtesselator *tess, GLUface *head)
Definition: render.c:248

Referenced by gluTessEndPolygon().