summaryrefslogtreecommitdiff
path: root/src/candy_gear.cpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2022-09-16 12:03:04 -0300
committerFrederico Linhares <fred@linhares.blue>2022-09-16 12:03:04 -0300
commit3d6ca447a7104c499e92fc954affdaf4bf011388 (patch)
treed759fbd39d3d66a2457ea92fc4eeb2c31b2cbe4f /src/candy_gear.cpp
parent0d0868611389b8dded0c1dfef7a530a4b6e1f148 (diff)
feat Create View
Diffstat (limited to 'src/candy_gear.cpp')
-rw-r--r--src/candy_gear.cpp58
1 files changed, 32 insertions, 26 deletions
diff --git a/src/candy_gear.cpp b/src/candy_gear.cpp
index 9460b51..8ba87cc 100644
--- a/src/candy_gear.cpp
+++ b/src/candy_gear.cpp
@@ -24,6 +24,7 @@
#include "rotation_3d.hpp"
#include "vector_3d.hpp"
+#include "view.hpp"
static mrb_value
parse_node(mrb_state *mrb, const YAML::Node &node)
@@ -60,37 +61,47 @@ parse_node(mrb_state *mrb, const YAML::Node &node)
}
static mrb_value
-cg_mCandyGear_set_camera_position(mrb_state *mrb, mrb_value self)
+cg_mCandyGear_load_yaml(mrb_state *mrb, mrb_value self)
{
- std::shared_ptr<glm::vec3> *camera_position;
+ const char *file_path;
- mrb_get_args(mrb, "d", &camera_position, &cg_vector_3d_type);
- cg_core.vk_graphics_pipeline_3d->camera_position = (*camera_position);
+ mrb_get_args(mrb, "z", &file_path);
- return self;
+ YAML::Node root = YAML::LoadFile(file_path);
+
+ return parse_node(mrb, root);
}
static mrb_value
-cg_mCandyGear_set_camera_rotation(mrb_state *mrb, mrb_value self)
+cg_mCandyGear_set_views(mrb_state *mrb, mrb_value self)
{
- std::shared_ptr<glm::vec3> *camera_rotation;
+ struct RClass *cg_m, *cg_cView;
+ mrb_value *array;
+ mrb_int array_len;
- mrb_get_args(mrb, "d", &camera_rotation, &cg_rotation_3d_type);
- cg_core.vk_graphics_pipeline_3d->camera_rotation = (*camera_rotation);
+ std::vector<std::shared_ptr<VK::View>> views;
- return self;
-}
-
-static mrb_value
-cg_mCandyGear_load_yaml(mrb_state *mrb, mrb_value self)
-{
- const char *file_path;
+ cg_m = mrb_module_get(mrb, "CandyGear");
+ cg_cView = mrb_class_get_under(mrb, cg_m, "View");
- mrb_get_args(mrb, "z", &file_path);
+ mrb_get_args(mrb, "a", &array, &array_len);
+ for(mrb_int i{0}; i < array_len; i++)
+ {
+ if(mrb_obj_is_kind_of(mrb, array[i], cg_cView))
+ {
+ auto v = (std::shared_ptr<VK::View>*)DATA_PTR(array[i]);
+ views.push_back(*v);
+ }
+ }
- YAML::Node root = YAML::LoadFile(file_path);
+ // A Renderer need at least one view to work.
+ if(views.size() > 0)
+ {
+ delete cg_core.vk_renderer;
+ cg_core.vk_renderer = new VK::Renderer({views});
+ }
- return parse_node(mrb, root);
+ return self;
}
static mrb_value
@@ -136,15 +147,10 @@ cg_candy_gear_init(mrb_state *mrb)
cg_m = mrb_module_get(mrb, "CandyGear");
mrb_define_class_method(
- mrb, cg_m, "camera_position=", cg_mCandyGear_set_camera_position,
- MRB_ARGS_REQ(1));
- mrb_define_class_method(
- mrb, cg_m, "camera_rotation=", cg_mCandyGear_set_camera_rotation,
- MRB_ARGS_REQ(1));
-
- mrb_define_class_method(
mrb, cg_m, "load_yaml", cg_mCandyGear_load_yaml, MRB_ARGS_REQ(1));
mrb_define_class_method(
+ mrb, cg_m, "views=", cg_mCandyGear_set_views, MRB_ARGS_REQ(1));
+ mrb_define_class_method(
mrb, cg_m, "log", cg_mCandyGear_log, MRB_ARGS_REQ(2));
mrb_define_class_method(
mrb, cg_m, "quit", cg_mCandyGear_quit, MRB_ARGS_NONE());