/*
- CONVEXER v0.9
+ CONVEXER v0.91
A GNU/Linux-first Source1 Hammer replacement
built with Blender, for mapmakers
- Compile models and model groups easily
- It runs at an ok speed!
- Light patch BSP files; remove unwanted realtime effects
- - Fastest VTF compressor (thanks to Richgel999 and stb)
+ - Bestest VTF compressor (thanks to Richgel999 and stb)
+ - Pack content automatically
Program structure:
k_soliderr_degenerate_implicit,
k_soliderr_non_coplanar_vertices,
k_soliderr_non_convex_poly,
- k_soliderr_bad_result
+ k_soliderr_bad_result,
+ k_soliderr_invalid_input
};
/*
int init_reverse = 0;
int unique_edge_count = 0;
- int discard_splits = 1;
/* Try remove splitting faces first */
{
+ int split_total = 0;
for( int j=0; j<solid->count; j++ )
{
cxr_polygon *poly = &mesh->polys[ solid_buffer[solid->start+j] ];
}
if( interior_count < poly->loop_total-1 )
+ {
+ split_total ++;
continue;
+ }
temp_solid[ temp_solid_len ++ ] = solid_buffer[solid->start+j];
}
- if( temp_solid_len < 3 )
+ if( temp_solid_len < 3 || (split_total & 0x2) /* unkown reasons */ )
{
- /* Revert back to normal */
- free( temp_solid );
-
- temp_solid = &solid_buffer[ solid->start ];
- temp_solid_len = solid->count;
- discard_splits = 0;
}
else
{
solid->count = temp_solid_len;
}
- if( discard_splits )
- free( temp_solid );
+ free( temp_solid );
}
for( int j=0; j<solid->count; j++ )
CXR_API cxr_world *cxr_decompose( cxr_static_mesh *src, i32 *perrcode )
{
+ /* Make sure data is in the mesh and isn't empty */
+ if( !src->edge_count || !src->loop_count || !src->poly_count )
+ {
+ cxr_log( "Error %d\n", k_soliderr_invalid_input );
+ if( perrcode )
+ *perrcode = k_soliderr_invalid_input;
+
+ return NULL;
+ }
+
u32 error = 0x00;
cxr_world *world = malloc( sizeof(*world) );