#ifndef model_hpp #define model_hpp #include "asset.hpp" #include "maths.hpp" #include "video.hpp" struct Model; struct Mesh { int offset, vbo_offset, count; int parent, mesh_binding, mvp_binding; bool world_dirty; m4f local, world; Shader_Id shader; const m4f& get_world(Model& m); }; struct Model : public Asset { Buffer_Id vbo; Buffer_Id ibo; Buffer_Id mvp; int mesh_count; Mesh* get_meshes() { return (Mesh*)&this[1]; } void destroy(Device* dev); void update_transforms(); void render( Device* dev, Arena* a, Render_Pass& pass, const m4f& transform, const m4f& view_projection ); }; struct Model_Loader : public Asset_Loader { Device* dev; Asset_Arena* shaders; void init(Device* device, Asset_Arena* shader_arena); Asset* load( Arena* a, Arena* s, const char* filename, Pack_File* f ) override; void unload(Asset* a); }; #endif