typedef struct glmesh glmesh;
typedef struct submodel submodel;
typedef struct model_vert model_vert;
-typedef struct scene scene;
+typedef struct model_marker model_marker;
typedef struct sdf_primative sdf_primative;
typedef enum esdf_type esdf_type;
u32 vertex_count,
indice_count,
- layer_count;
+ layer_count,
+ marker_count;
};
struct sdf_primative
char name[32];
};
+struct model_marker
+{
+ v3f co;
+ v4f q;
+ v3f s;
+ char name[32];
+};
+
struct model_vert
{
v3f co,
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 )
/*
* 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 )
return NULL;
}
+static model_marker *model_marker_get( model *mdl, const char *name )
+{
+ for( int i=0; i<mdl->marker_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;
model_indice_base( model ), model->indice_count );
}
+static void mesh_free( glmesh *mesh )
+{
+ glDeleteVertexArrays( 1, &mesh->vao );
+ glDeleteBuffers( 1, &mesh->ebo );
+ glDeleteBuffers( 1, &mesh->vbo );
+}
+
#endif