diff options
| author | day <day@national.shitposting.agency> | 2026-03-27 16:43:39 +0100 |
|---|---|---|
| committer | day <day@national.shitposting.agency> | 2026-03-27 16:43:39 +0100 |
| commit | 45a590c8419d9720a8acdfa6f81e5a8c571b095c (patch) | |
| tree | a318b332026e668966733d4a47700620ce9749c9 /src | |
| parent | c9ded365fd8eac90fbdc2e11f9221fef736c2223 (diff) | |
make parser more legibleobj
Diffstat (limited to 'src')
| -rw-r--r-- | src/render/model.h | 121 |
1 files changed, 62 insertions, 59 deletions
diff --git a/src/render/model.h b/src/render/model.h index da3213a..3683efa 100644 --- a/src/render/model.h +++ b/src/render/model.h @@ -17,25 +17,26 @@ struct MODEL { }; enum LINE_TYPES : I32 { - comment = ( '#' | ( ' ' << 8 ) ), - d = ( 'd' | ( ' ' << 8 ) ), - f = ( 'f' | ( ' ' << 8 ) ), - illum = ( 'i' | ( 'l' << 8 ) ), - Ka = ( 'K' | ( 'a' << 8 ) ), - Kd = ( 'K' | ( 'd' << 8 ) ), - Ke = ( 'K' | ( 'e' << 8 ) ), - Ks = ( 'K' | ( 's' << 8 ) ), - map_Kd = ( 'm' | ( 'a' << 8 ) ), - mtllib = ( 'm' | ( 't' << 8 ) ), - newmtl = ( 'n' | ( 'e' << 8 ) ), - Ni = ( 'N' | ( 'i' << 8 ) ), - Ns = ( 'N' | ( 's' << 8 ) ), - o = ( 'o' | ( ' ' << 8 ) ), - s = ( 's' | ( ' ' << 8 ) ), - v = ( 'v' | ( ' ' << 8 ) ), - vn = ( 'v' | ( 'n' << 8 ) ), - vt = ( 'v' | ( 't' << 8 ) ), - usemtl = ( 'u' | ( 's' << 8 ) ) + comment = ( '#' | ( ' ' << 8 ) ), + transparency = ( 'd' | ( ' ' << 8 ) ), + face = ( 'f' | ( ' ' << 8 ) ), + group = ( 'g' | ( ' ' << 8 ) ), + illum = ( 'i' | ( 'l' << 8 ) ), + ambient_clr = ( 'K' | ( 'a' << 8 ) ), + diffuse_clr = ( 'K' | ( 'd' << 8 ) ), + emissive_clr = ( 'K' | ( 'e' << 8 ) ), + specular_clr = ( 'K' | ( 's' << 8 ) ), + texname = ( 'm' | ( 'a' << 8 ) ), + mtlname = ( 'm' | ( 't' << 8 ) ), + newmtl = ( 'n' | ( 'e' << 8 ) ), + opticdensity = ( 'N' | ( 'i' << 8 ) ), + specular_exp = ( 'N' | ( 's' << 8 ) ), + object = ( 'o' | ( ' ' << 8 ) ), + shading = ( 's' | ( ' ' << 8 ) ), + vert = ( 'v' | ( ' ' << 8 ) ), + vertnorm = ( 'v' | ( 'n' << 8 ) ), + vertuv = ( 'v' | ( 't' << 8 ) ), + usemtl = ( 'u' | ( 's' << 8 ) ) }; static inline char* skip_space( char* s ) { @@ -62,13 +63,13 @@ static inline LINE_TYPES get_first_two( char* s ) { struct MTLDATA { STR name; - F32 Ns; - VEC3 Ka; - VEC3 Kd; - VEC3 Ks; - VEC3 Ke; - F32 Ni; - F32 d; + F32 specular_exp; + VEC3 ambient_clr; + VEC3 diffuse_clr; + VEC3 specular_clr; + VEC3 emissive_clr; + F32 opticdensity; + F32 transparency; I32 illum; STR map_Kd; }; @@ -80,24 +81,25 @@ struct MTLLIB { inline I32 line_type_offset( LINE_TYPES first_two ) { switch( first_two ) { - case d: - case f: - case o: - case s: - case v: return 2; - case Ka: - case Kd: - case Ke: - case Ks: - case Ni: - case Ns: - case vn: - case vt: return 3; + case face: + case vert: + case group: + case object: + case shading: + case transparency: return 2; + case ambient_clr: + case diffuse_clr: + case emissive_clr: + case specular_clr: + case opticdensity: + case specular_exp: + case vertuv: + case vertnorm: return 3; case illum: return 6; - case map_Kd: - case mtllib: + case mtlname: case newmtl: - case usemtl: return 7; + case usemtl: + case texname: return 7; case comment: return 2; } } @@ -119,15 +121,15 @@ inline void mtl_parse_line( char* file, U64 idx, MTLLIB* mtl ) { mtl->data.resize( mtl->data.size + 1 ); mtl->data[mtl->data.size - 1].name = temp.data; } break; - case d: mtl->data[mtl_idx].d = strtof( p, &p ); break; - case Ni: mtl->data[mtl_idx].Ni = strtof( p, &p ); break; - case Ns: mtl->data[mtl_idx].Ns = strtof( p, &p ); break; + case transparency: mtl->data[mtl_idx].transparency = strtof( p, &p ); break; + case opticdensity: mtl->data[mtl_idx].opticdensity = strtof( p, &p ); break; + case specular_exp: mtl->data[mtl_idx].specular_exp = strtof( p, &p ); break; case illum: mtl->data[mtl_idx].illum = (I32)strtol( p, &p, 10 ); break; - case Ka: mtl->data[mtl_idx].Ka = read_vec3( p ); break; - case Kd: mtl->data[mtl_idx].Kd = read_vec3( p ); break; - case Ke: mtl->data[mtl_idx].Ke = read_vec3( p ); break; - case Ks: mtl->data[mtl_idx].Ks = read_vec3( p ); break; - case map_Kd: { + case ambient_clr: mtl->data[mtl_idx].ambient_clr = read_vec3( p ); break; + case diffuse_clr: mtl->data[mtl_idx].diffuse_clr = read_vec3( p ); break; + case emissive_clr: mtl->data[mtl_idx].emissive_clr = read_vec3( p ); break; + case specular_clr: mtl->data[mtl_idx].specular_clr = read_vec3( p ); break; + case texname: { char* end = p; while( *end && *end != '\n' ) ++end; U32 len = end - p; @@ -267,13 +269,13 @@ inline void obj_parse_line( const char* path, char* file, U64 idx, OBJDATA* obj char* p = file + idx + line_type_offset( first_two ); switch( first_two ) { - case f: obj_parse_f_line( obj, p ); break; - case v: - case vn: { - if( first_two == v ) obj->vertices.push( read_vec3( p ) ); + case face: obj_parse_f_line( obj, p ); break; + case vert: + case vertnorm: { + if( first_two == vert ) obj->vertices.push( read_vec3( p ) ); else obj->normals.push( read_vec3( p ) ); } break; - case vt: { + case vertuv: { VEC2 temp{}; p = skip_space( p ); temp.x = strtof( p, &p ); @@ -281,9 +283,9 @@ inline void obj_parse_line( const char* path, char* file, U64 idx, OBJDATA* obj temp.y = strtof( p, &p ); obj->uvs.push( temp ); } break; - case mtllib: + case mtlname: case usemtl: { - bool is_mtllib = first_two == mtllib; + bool is_mtllib = first_two == mtlname; char* end = p; while( *end && *end != '\n' ) ++end; U32 len = end - p; @@ -299,8 +301,9 @@ inline void obj_parse_line( const char* path, char* file, U64 idx, OBJDATA* obj obj->mtllib.push( mtl_from_file( path, temp.data ) ); } break; case comment: - case o: - case s: break; + case group: + case object: + case shading: break; default: { dlog( "obj_from_file() : unhandled char combo %c%c\n", |
