diff options
Diffstat (limited to 'src/model.cpp')
-rw-r--r-- | src/model.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/model.cpp b/src/model.cpp index 1a97c9b..06ddf65 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -16,7 +16,10 @@ #include "model.hpp" +#include "rotation3d.hpp" #include "texture.hpp" +#include "vector3d.hpp" +#include "vk/model_instance.hpp" void cg_free_model(mrb_state *mrb, void* obj) @@ -54,6 +57,27 @@ cg_cModel_initialize(mrb_state *mrb, mrb_value self) return self; } +static mrb_value +cg_cModel_draw(mrb_state *mrb, mrb_value self) +{ + auto *ptr = (std::shared_ptr<VK::Model>*)DATA_PTR(self); + VK::ModelInstance instance; + std::shared_ptr<glm::vec3> *position; + std::shared_ptr<glm::vec3> *rotation; + + mrb_get_args( + mrb, "dd", &position, &cg_vector3d_type, &rotation, &cg_rotation3d_type); + instance.position = **position; + instance.rotation = **rotation; + + auto &instances = + cg_core.vk_graphics_pipeline->models_to_draw[ + cg_core.vk_graphics_pipeline->current_frame][*ptr]; + instances.push_back(instance); + + return self; +} + void cg_model_init(mrb_state *mrb) { @@ -64,4 +88,5 @@ cg_model_init(mrb_state *mrb) MRB_SET_INSTANCE_TT(cg_cModel, MRB_TT_DATA); mrb_define_method( mrb, cg_cModel, "initialize", cg_cModel_initialize, MRB_ARGS_REQ(2)); + mrb_define_method(mrb, cg_cModel, "draw", cg_cModel_draw, MRB_ARGS_REQ(2)); } |