02450e7ae0b7d377797f86163f76c964a9d83487
[fishladder.git] / mdlcomp.c
1 // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
2
3 #define VG_TOOLS
4 #include "vg/vg.h"
5
6 // Super basic model compiler
7 int main( int argc, char *argv[] )
8 {
9 if( argc < 3 )
10 {
11 vg_error( "Need input/output files\n" );
12 return 0;
13 }
14
15 float *vertex_buffer = NULL;
16
17 int c;
18 FILE *file, *output;
19 file = fopen( argv[1], "r" );
20
21 if( file )
22 {
23 output = fopen( argv[2], "w" );
24 if( !output )
25 {
26 vg_error( "couldn't open output for writing\n" );
27 fclose(file);
28 return 0;
29 }
30
31 fprintf( output, "/*triangle buffer generated from source file: '%s'*/\n", argv[1] );
32
33 char line[512];
34 int i = 0, j = 0;
35
36 while(( c = getc(file)) != EOF )
37 {
38 if( i >= vg_list_size( line ) )
39 {
40 vg_error( "Line was way too long.. (line %d)\n", j+1 );
41 arrfree( vertex_buffer );
42 fclose(file);
43 fclose(output);
44 return 0;
45 }
46
47 if( c == '\n' )
48 {
49 line[i] = 0x00;
50
51 // Parse vert
52 if( line[0] == 'v' )
53 {
54 v3f vert;
55 sscanf( line+2, "%f %f %f", vert, vert+1, vert+2 );
56 arrpush( vertex_buffer, vert[0] );
57 arrpush( vertex_buffer, -vert[2] );
58 }
59
60 // Write face
61 else if( line[0] == 'f' )
62 {
63 int tri[3];
64 sscanf( line+2, "%d %d %d", tri, tri+1, tri+2 );
65
66 for( int k = 0; k < 3; k ++ )
67 fprintf( output, "%.6ff,%.6ff,", vertex_buffer[(tri[k]-1)*2], vertex_buffer[(tri[k]-1)*2+1] );
68 fprintf( output, "\n" );
69 }
70
71 i = 0;
72 j ++;
73 }
74 else
75 {
76 line[i ++] = c;
77 }
78 }
79
80 arrfree( vertex_buffer );
81 fclose(file);
82 fclose(output);
83 }
84 else
85 {
86 vg_error( "Couldn't open source file\n" );
87 return 0;
88 }
89 }