prosperon/source/engine/3d/model.h

65 lines
1.2 KiB
C
Raw Permalink Normal View History

2021-11-30 21:29:18 -06:00
#ifndef MODEL_H
#define MODEL_H
2023-05-12 13:22:05 -05:00
#include "HandmadeMath.h"
2023-11-30 10:47:59 -06:00
#include "transform.h"
#include "sokol/sokol_gfx.h"
2023-12-11 08:36:45 -06:00
#include "gameobject.h"
2023-05-12 13:22:05 -05:00
extern HMM_Vec3 eye;
2021-11-30 21:29:18 -06:00
2023-12-04 13:38:37 -06:00
typedef struct material {
2024-01-14 10:24:31 -06:00
2023-12-04 13:38:37 -06:00
} material;
struct model;
2023-11-03 08:31:06 -05:00
/* A single mesh */
2023-12-04 13:38:37 -06:00
typedef struct mesh {
sg_bindings bind; /* Encapsulates material, norms, etc */
2023-12-19 15:34:36 -06:00
uint32_t idx_count;
2023-12-04 13:38:37 -06:00
} mesh;
2023-11-03 08:31:06 -05:00
/* A collection of meshes which create a full figure */
2023-12-04 13:38:37 -06:00
typedef struct model {
2023-05-12 13:22:05 -05:00
struct mesh *meshes;
2023-12-04 13:38:37 -06:00
const char *path;
HMM_Mat4 matrix;
} model;
2021-11-30 21:29:18 -06:00
2023-11-03 08:31:06 -05:00
/* A model with draw information */
2024-03-19 14:39:19 -05:00
typedef struct drawmodel {
2023-11-03 08:31:06 -05:00
struct model *model;
HMM_Mat4 amodel;
2023-12-11 08:36:45 -06:00
gameobject *go;
2024-03-19 14:39:19 -05:00
} drawmodel;
2023-11-03 08:31:06 -05:00
2023-11-30 10:47:59 -06:00
typedef struct bone {
transform3d t;
struct bone *children;
} bone;
2021-11-30 21:29:18 -06:00
/* Get the model at a path, or create and return if it doesn't exist */
2022-11-19 17:13:57 -06:00
struct model *GetExistingModel(const char *path);
2021-11-30 21:29:18 -06:00
/* Make a Model struct */
2022-11-19 17:13:57 -06:00
struct model *MakeModel(const char *path);
2021-11-30 21:29:18 -06:00
/* Load a model from memory into the GPU */
2022-11-19 17:13:57 -06:00
void loadmodel(struct model *model);
2021-11-30 21:29:18 -06:00
2023-05-12 13:22:05 -05:00
void model_init();
2023-12-11 16:59:59 -06:00
struct drawmodel *make_drawmodel(gameobject *go);
2023-11-03 08:31:06 -05:00
void draw_drawmodel(struct drawmodel *dm);
2023-12-20 17:20:29 -06:00
void model_draw_all();
2024-03-19 14:39:19 -05:00
void drawmodel_free(struct drawmodel *dm);
2023-11-03 08:31:06 -05:00
2024-01-14 10:24:31 -06:00
material *material_make();
void material_free(material *mat);
mesh *mesh_make();
void mesh_free(mesh *m);
2021-11-30 21:29:18 -06:00
#endif