diff options
author | Frederico Linhares <fred@linhares.blue> | 2022-08-22 17:26:43 -0300 |
---|---|---|
committer | Frederico Linhares <fred@linhares.blue> | 2022-08-22 17:50:58 -0300 |
commit | 42e03ddc3b28c41b81fb5410feb72750530ffa13 (patch) | |
tree | 3d13318c57d45eb93348edb63122258a61531eef /src/model.cpp | |
parent | 67b78f24a9ec8c823bbb8ff091ccd6bb4144a435 (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.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)); } |