summaryrefslogtreecommitdiff
path: root/src/model.cpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2022-08-22 17:26:43 -0300
committerFrederico Linhares <fred@linhares.blue>2022-08-22 17:50:58 -0300
commit42e03ddc3b28c41b81fb5410feb72750530ffa13 (patch)
tree3d13318c57d45eb93348edb63122258a61531eef /src/model.cpp
parent67b78f24a9ec8c823bbb8ff091ccd6bb4144a435 (diff)
feat Make camera and model instance more abstract
* src/camera.cpp src/camera.hpp: Remove the camera as Vector3D and Rotation3D are going to replace it. * src/model.cpp: Add draw command as instances do not exist anymore. * src/model/instance.cpp src/model/instance.hpp: Remove the instance as Vector3D and Rotation3D are going to replace it.
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));
}