+static int cxr_poly_convex( cxr_mesh *mesh, cxr_polygon *poly )
+{
+ v3f *verts = cxr_ab_ptr( mesh->p_abverts, 0 );
+
+ for( int i=0; i<poly->loop_total; i++ )
+ {
+ int li0 = poly->loop_start + i,
+ li1 = poly->loop_start + cxr_range( i+1, poly->loop_total ),
+ li2 = poly->loop_start + cxr_range( i+2, poly->loop_total );
+ int i0 = mesh->loops[li0].index,
+ i1 = mesh->loops[li1].index,
+ i2 = mesh->loops[li2].index;
+
+ v3f v0, v1, c;
+
+ v3_sub( verts[i1], verts[i0], v0 );
+ v3_sub( verts[i2], verts[i1], v1 );
+
+ v3_cross( v0, v1, c );
+ if( v3_dot( c, poly->normal ) <= 0.0 )
+ {
+#if CXR_DEBUG
+ cxr_debug_line( verts[i0], verts[i1], colour_error );
+ cxr_debug_box( verts[i1], 0.1, colour_error );
+ cxr_debug_line( verts[i1], verts[i2], colour_error );
+ cxr_debug_line( verts[i1], poly->center, colour_error );
+#endif
+ return 0;
+ }
+ }
+
+ return 1;
+}
+