4 #include <dragonstd/array.h>
5 #include <dragonstd/list.h>
8 #include <linmath.h/linmath.h>
11 #include "client/mesh.h"
12 #include "client/texture.h"
27 typedef struct ModelNode {
29 v3f32 pos, rot, scale;
32 struct ModelNode *parent;
34 unsigned int visible: 1;
35 unsigned int clockwise: 1;
50 typedef struct Model {
55 struct Model *replace;
57 void (*step)(struct Model *model, f64 dtime);
58 void (*delete)(struct Model *model);
61 unsigned int delete: 1;
62 unsigned int wireframe: 1;
63 unsigned int frustum_culling: 1;
64 unsigned int transparent: 1;
74 Model *model_create();
75 // load model from file
76 Model *model_load(const char *path, const char *textures_path, Mesh *cube, ModelShader *shader);
77 // clone existing model
78 Model *model_clone(Model *model);
80 void model_delete(Model *model);
81 // use this as delete callback to free all meshes associated with the model on delete
82 void model_free_meshes(Model *model);
84 void model_get_bones(Model *model, ModelBoneMapping *mappings, size_t num_mappings);
87 ModelNode *model_node_create(ModelNode *parent);
88 // recalculate transform matrices
89 void model_node_transform(ModelNode *node);
90 // add a mesh to model node (will be copied)
91 void model_node_add_mesh(ModelNode *node, const ModelMesh *mesh);
92 // add and delete batch (may add multiple meshes depending on available texture units)
93 void model_node_add_batch(ModelNode *node, ModelBatch *batch);
96 ModelBatch *model_batch_create(ModelShader *shader, VertexLayout *layout, size_t off_tex_idx);
98 void model_batch_free(ModelBatch *batch);
99 // add a vertex to batch
100 void model_batch_add_vertex(ModelBatch *batch, GLuint texture, const void *vertex);
102 // add model to scene
103 void model_scene_add(Model *model);
105 void model_scene_render(f64 dtime);