static bool check_view(TCOD_list_t active_views, view_t **it) { view_t *view=*it; line_t *shallow_line=&view->shallow_line; line_t *steep_line=&view->steep_line; if (LINE_COLINEAR(shallow_line,steep_line) && (COLINEAR(shallow_line,offset,limit) || COLINEAR(shallow_line,limit,offset)) ) { //printf ("deleting view %x\n",it); // slow ! TCOD_list_remove_iterator(active_views,(void **)it); return false; } return true; }
/* +-----------------------------------------------------------+ * @desc FIXME +-----------------------------------------------------------+ */ static bool check_view(RLFL_list_t active_views, view_t **it) { view_t *view = *it; line_t *shallow_line = &view->shallow_line; line_t *steep_line = &view->steep_line; if (LINE_COLINEAR(shallow_line, steep_line) && (COLINEAR(shallow_line, 0, 1) || COLINEAR(shallow_line, 1, 0)) ){ // slow ! RLFL_list_remove_iterator(active_views, (void **)it); return false; } return true; }
static void draw_cut_style_cap_callback (int iloop, double cap[][3], float face_color[3], gleDouble cut_vector[3], gleDouble bisect_vector[3], double norms[][3], int frontwards) { #ifdef DELICATE_TESSELATOR int i; int is_colinear; double *previous_vertex = 0x0; double *first_vertex = 0x0; #endif /* DELICATE_TESSELATOR */ #ifdef OPENGL_10 GLUtriangulatorObj *tobj; tobj = gluNewTess (); gluTessCallback (tobj, GLU_BEGIN, glBegin); gluTessCallback (tobj, GLU_VERTEX, glVertex3dv); gluTessCallback (tobj, GLU_END, glEnd); #endif /* OPENGL_10 */ if (face_color != NULL) C3F (face_color); if (frontwards) { /* if lighting is on, specify the endcap normal */ if (cut_vector != NULL) { /* if normal pointing in wrong direction, flip it. */ if (cut_vector[2] < 0.0) { VEC_SCALE (cut_vector, -1.0, cut_vector); } N3F_D (cut_vector); } #ifdef GL_32 BGNPOLYGON(); for (i=0; i<iloop; i++) { V3F_D (cap[i], i, FRONT_CAP); } ENDPOLYGON(); #endif /* GL_32 */ #ifdef OPENGL_10 /* If you have a tesselator that is happy with anything, * including degenerate points, colinear segments, etc. * then define this. Otherwise, pick one of the others. * * I beleive that the stock SGI tesselator is "lenient", * despite explicit disclaimers in the documentation. * (circa 1995). * * The Mesa tesselator is not at all forgiving of * degenerate points. * (circa 1997-1998) */ #ifdef LENIENT_TESSELATOR gluBeginPolygon (tobj); for (i=0; i<iloop; i++) { gluTessVertex (tobj, cap[i], cap[i]); } gluEndPolygon (tobj); #endif /* LENIENT_TESSELATOR */ #ifdef DELICATE_TESSELATOR gluBeginPolygon (tobj); first_vertex = 0x0; previous_vertex = cap[iloop-1]; for (i=0; i<iloop-1; i++) { COLINEAR (is_colinear, previous_vertex, cap[i], cap[i+1]); if (!is_colinear) { gluTessVertex (tobj, cap[i], cap[i]); previous_vertex = cap[i]; if (!first_vertex) first_vertex = previous_vertex; } } if (!first_vertex) first_vertex = cap[0]; COLINEAR (is_colinear, previous_vertex, cap[iloop-1], first_vertex); if (!is_colinear) gluTessVertex (tobj, cap[iloop-1], cap[iloop-1]); gluEndPolygon (tobj); #endif /* DELICATE_TESSELATOR */ #endif /* OPENGL_10 */ } else { /* if lighting is on, specify the endcap normal */ if (cut_vector != NULL) { /* if normal pointing in wrong direction, flip it. */ if (cut_vector[2] > 0.0) { VEC_SCALE (cut_vector, -1.0, cut_vector); } N3F_D (cut_vector); } /* the sense of the loop is reversed for backfacing culling */ #ifdef GL_32 BGNPOLYGON(); for (i=iloop-1; i>-1; i--) { V3F_D (cap[i], i, BACK_CAP); } ENDPOLYGON(); #endif /* GL_32 */ #ifdef OPENGL_10 #ifdef LENIENT_TESSELATOR gluBeginPolygon (tobj); for (i=iloop-1; i>-1; i--) { gluTessVertex (tobj, cap[i], cap[i]); } gluEndPolygon (tobj); #endif /* LENIENT_TESSELATOR */ #ifdef DELICATE_TESSELATOR gluBeginPolygon (tobj); first_vertex = 0x0; previous_vertex = cap[0]; for (i=iloop-1; i>0; i--) { COLINEAR (is_colinear, previous_vertex, cap[i], cap[i-1]); if (!is_colinear) { gluTessVertex (tobj, cap[i], cap[i]); previous_vertex = cap[i]; if (!first_vertex) first_vertex = previous_vertex; } } if (!first_vertex) first_vertex = cap[iloop-1]; COLINEAR (is_colinear, previous_vertex, cap[0], first_vertex); if (!is_colinear) gluTessVertex (tobj, cap[0], cap[0]); gluEndPolygon (tobj); #endif /* DELICATE_TESSELATOR */ #endif /* OPENGL_10 */ } #ifdef OPENGL_10 gluDeleteTess (tobj); #endif /* OPENGL_10 */ }