Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include <glos.h>
#include <GL/gl.h>
#include <GL/glu.h>
#ifndef NT
#include <stdlib.h>
#include <assert.h>
#else
#include "winmem.h"
#endif
#include "monotone.h"
#include "msort.h"
static int comp_priorityq( Vert **x, Vert **y ); static void grow_priorityq( GLUtriangulatorObj *tobj );
void __gl_init_priorityq( GLUtriangulatorObj *tobj, long s ) { assert( ! tobj->parray ) ; tobj->phead = 0; tobj->ptail = 0; tobj->psize = s > 0 ? s : 1; tobj->parray = (Vert **) malloc( (unsigned int) (sizeof( Vert *) * tobj->psize) ); }
void __gl_add_priorityq( GLUtriangulatorObj *tobj, Vert *v ) { assert( tobj->parray ); if( tobj->ptail == tobj->psize ) grow_priorityq( tobj ); tobj->parray[tobj->ptail++] = v; }
int __gl_more_priorityq( GLUtriangulatorObj *tobj ) { return tobj->phead != tobj->ptail; }
void __gl_sort_priorityq( GLUtriangulatorObj *tobj ) { assert( tobj->phead <= tobj->ptail ); __gl_msort( tobj, (void **)tobj->parray+tobj->phead, tobj->ptail-tobj->phead, sizeof(Vert *), (SortFunc) comp_priorityq ); }
Vert * __gl_remove_priorityq( GLUtriangulatorObj *tobj ) { return tobj->parray[tobj->phead++]; }
void __gl_free_priorityq( GLUtriangulatorObj *tobj ) { if (tobj->parray) { free( tobj->parray ); tobj->parray = 0; } }
static void grow_priorityq( GLUtriangulatorObj *tobj ) { tobj->psize *= 2; tobj->parray = (Vert **) realloc( tobj->parray, (unsigned int)(sizeof(Vert*)*tobj->psize) ); }
static int comp_priorityq( Vert **vp1, Vert **vp2 ) { float diff = (*vp1)->s - (*vp2)->s; if (diff < (float)0.0) return -1; if (diff > (float)0.0) return 1; if (diff == (float)0.0) diff = (*vp1)->t - (*vp2)->t; if (diff < (float)0.0) return -1; if (diff > (float)0.0) return 1;
return 0; }
void __gl_setpriority_priorityq( GLUtriangulatorObj *tobj, int s, int t ) { int i; for( i=tobj->phead; i<tobj->ptail; i++ ) { tobj->parray[i]->s = tobj->parray[i]->v[s]; tobj->parray[i]->t = tobj->parray[i]->v[t]; } }
|