diff --git a/include/asset.h b/include/asset.h index a76bbdc..d5e180f 100644 --- a/include/asset.h +++ b/include/asset.h @@ -58,6 +58,17 @@ struct Assets }; +Mesh* meshInit(MemoryArena* arena, + u32 num_vertices, + u32 num_indices, + bool use_normals = false, + bool use_colors = false, + bool use_uvs = false); + +Model* modelInitManual(MemoryArena* arena, + u32 num_meshes, + Mesh* meshes = nullptr); + Model* getModelByPath(Assets* assets, const char* filepath); Texture* getTextureByPath(Assets* assets, const char* filepath); diff --git a/src/asset.cpp b/src/asset.cpp index 8f84e75..bf3e245 100644 --- a/src/asset.cpp +++ b/src/asset.cpp @@ -25,6 +25,44 @@ Texture* getCachedTexture(Assets* assets, u64 path_hash); // 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* getModelByPath(Assets* assets, const char* filepath) {