summaryrefslogtreecommitdiff
path: root/src/model.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/model.cpp')
-rw-r--r--src/model.cpp25
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));
}