X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=model.h;h=430ed26d7425d684670bddeb0931a9b9b45039de;hb=3bb0287d544a4cb75de9afe2927ac8e946f3a18e;hp=467ad989bffab99637ea0e1e00db7a4ed7aa7bce;hpb=82dae85738b0ce35de8965398b775c9f57ab20e5;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/model.h b/model.h index 467ad98..430ed26 100644 --- a/model.h +++ b/model.h @@ -7,6 +7,7 @@ typedef struct model model; typedef struct glmesh glmesh; typedef struct submodel submodel; typedef struct model_vert model_vert; +typedef struct model_marker model_marker; typedef struct sdf_primative sdf_primative; typedef enum esdf_type esdf_type; @@ -17,17 +18,8 @@ struct model u32 vertex_count, indice_count, - layer_count; -}; - -struct sdf_primative -{ - v4f origin; /* xyz, yaw */ - /* Cone: - x base scale - y height - */ - v4f info; + layer_count, + marker_count; }; struct submodel @@ -38,18 +30,24 @@ struct submodel vertex_count; boxf bbx; - v3f pivot; - sdf_primative sdf; + v3f pivot; /* same as co? */ + v4f q; + char name[32]; + char material[32]; +}; - enum esdf_type - { - k_sdf_none = 0, - k_sdf_cone, - k_sdf_sphere, - k_sdf_box - } - sdf_type; +struct classtype_gate +{ + u32 target; +}; +struct model_marker +{ + v3f co; + v4f q; + v3f s; + u32 classtype; + u32 offset; char name[32]; }; @@ -68,12 +66,6 @@ struct glmesh u32 indice_count; }; -#define VERTEX_STANDARD_ATTRIBUTES \ - "layout (location=0) in vec3 a_co;" \ - "layout (location=1) in vec3 a_norm;" \ - "layout (location=2) in vec4 a_colour;" \ - "layout (location=3) in vec2 a_uv;" - static void mesh_upload( glmesh *mesh, model_vert *verts, u32 vert_count, u32 *indices, u32 indice_count ) @@ -130,15 +122,21 @@ static void mesh_draw( glmesh *mesh ) /* * Helper functions for file offsets + * TODO: Revise this */ static submodel *model_get_submodel( model *mdl, int id ) { return ((submodel*)(mdl+1)) + id; } +static model_marker *model_get_marker( model *mdl, int id ) +{ + return ((model_marker*)model_get_submodel(mdl,mdl->layer_count)) + id; +} + static model_vert *model_vertex_base( model *mdl ) { - return (model_vert *)model_get_submodel( mdl, mdl->layer_count ); + return (model_vert *)model_get_marker( mdl, mdl->marker_count ); } static u32 *model_indice_base( model *mdl ) @@ -156,6 +154,12 @@ static u32 *submodel_indice_data( model *mdl, submodel *sub ) return model_indice_base(mdl) + sub->indice_start; } +static void *get_entdata_raw( model *mdl, model_marker *marker ) +{ + return ((void *)(model_indice_base(mdl) + mdl->indice_count)) + + marker->offset; +} + static submodel *submodel_get( model *mdl, const char *name ) { for( int i=0; ilayer_count; i++ ) @@ -169,11 +173,31 @@ static submodel *submodel_get( model *mdl, const char *name ) return NULL; } +static model_marker *model_marker_get( model *mdl, const char *name ) +{ + for( int i=0; imarker_count; i++ ) + { + model_marker *mk = model_get_marker( mdl,i ); + + if( !strcmp( mk->name, name ) ) + return mk; + } + + return NULL; +} + static void submodel_draw( submodel *sm ) { mesh_drawn( sm->indice_start, sm->indice_count ); } +static void model_unpack_submodel( model *model, glmesh *mesh, submodel *sm ) +{ + mesh_upload( mesh, + model_vertex_base( model ) + sm->vertex_start, sm->vertex_count, + model_indice_base( model ) + sm->indice_start, sm->indice_count ); +} + static void model_unpack( model *model, glmesh *mesh ) { u32 offset = model_get_submodel( model, 0 )->vertex_count;