|
|
|
@ -25,6 +25,44 @@ Texture* getCachedTexture(Assets* assets, u64 path_hash); |
|
|
|
|
|
|
|
|
|
|
|
// interface
|
|
|
|
// interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Mesh* |
|
|
|
|
|
|
|
meshInit(MemoryArena* arena, |
|
|
|
|
|
|
|
u32 num_vertices, |
|
|
|
|
|
|
|
u32 num_indices, |
|
|
|
|
|
|
|
bool use_normals, |
|
|
|
|
|
|
|
bool use_colors, |
|
|
|
|
|
|
|
bool use_uvs) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Mesh* m = ARENA_ALLOC(arena, Mesh, 1); |
|
|
|
|
|
|
|
m->num_vertices = num_vertices; |
|
|
|
|
|
|
|
m->num_indices = num_indices; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m->vertices = ARENA_ALLOC(arena, vec3, num_vertices); |
|
|
|
|
|
|
|
m->indices = ARENA_ALLOC(arena, u16, num_indices); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (use_normals) |
|
|
|
|
|
|
|
m->normals = ARENA_ALLOC(arena, vec3, num_vertices); |
|
|
|
|
|
|
|
if (use_colors) |
|
|
|
|
|
|
|
m->colors = ARENA_ALLOC(arena, vec3, num_vertices); |
|
|
|
|
|
|
|
if (use_uvs) |
|
|
|
|
|
|
|
m->uvs = ARENA_ALLOC(arena, vec2, num_vertices); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
m->xform = ARENA_ALLOC(arena, mat4, 1); |
|
|
|
|
|
|
|
*m->xform = mat4(1); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return m; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Model* |
|
|
|
|
|
|
|
modelInitManual(MemoryArena* arena, u32 num_meshes, Mesh* meshes) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Model* mdl = ARENA_ALLOC(arena, Model, 1); |
|
|
|
|
|
|
|
mdl->meshes = meshes; // NOTE: defaults to nullptr
|
|
|
|
|
|
|
|
mdl->num_meshes = num_meshes; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return mdl; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Model* |
|
|
|
Model* |
|
|
|
getModelByPath(Assets* assets, const char* filepath) |
|
|
|
getModelByPath(Assets* assets, const char* filepath) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|