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 {
30 v3f32 pos, rot, scale;
33 struct ModelNode *parent;
49 typedef struct Model {
54 struct Model *replace;
56 void (*step)(struct Model *model, f64 dtime);
57 void (*delete)(struct Model *model);
60 unsigned int delete: 1;
61 unsigned int wireframe: 1;
62 unsigned int frustum_culling: 1;
63 unsigned int transparent: 1;
73 Model *model_create();
74 // load model from file
75 Model *model_load(const char *path, const char *textures_path, Mesh *cube, ModelShader *shader);
76 // clone existing model
77 Model *model_clone(Model *model);
79 void model_delete(Model *model);
80 // use this as delete callback to free all meshes associated with the model on delete
81 void model_free_meshes(Model *model);
83 void model_get_bones(Model *model, ModelBoneMapping *mappings, size_t num_mappings);
86 ModelNode *model_node_create(ModelNode *parent);
87 // recalculate transform matrices
88 void model_node_transform(ModelNode *node);
89 // add a mesh to model node (will be copied)
90 void model_node_add_mesh(ModelNode *node, const ModelMesh *mesh);
91 // add and delete batch (may add multiple meshes depending on available texture units)
92 void model_node_add_batch(ModelNode *node, ModelBatch *batch);
95 ModelBatch *model_batch_create(ModelShader *shader, VertexLayout *layout, size_t off_tex_idx);
97 void model_batch_free(ModelBatch *batch);
98 // add a vertex to batch
99 void model_batch_add_vertex(ModelBatch *batch, GLuint texture, const void *vertex);
101 // add model to scene
102 void model_scene_add(Model *model);
104 void model_scene_render(f64 dtime);