summaryrefslogtreecommitdiff
path: root/src/core.cpp
diff options
context:
space:
mode:
authorFrederico Linhares <fred@linhares.blue>2023-09-07 15:14:14 -0300
committerFrederico Linhares <fred@linhares.blue>2023-09-15 14:12:15 -0300
commit25bf78bfb4785e2cbed683cc56d3cec4271d8b5a (patch)
tree6fa728091bd662ee0c90a7490bc5ee8e6e23cac4 /src/core.cpp
parente1399befee43ab4549c31ce179e900ad71651edc (diff)
feat Create skeletal mesh
Diffstat (limited to 'src/core.cpp')
-rw-r--r--src/core.cpp64
1 files changed, 46 insertions, 18 deletions
diff --git a/src/core.cpp b/src/core.cpp
index 5039ffe..986ecc1 100644
--- a/src/core.cpp
+++ b/src/core.cpp
@@ -20,9 +20,11 @@
#include "font.hpp"
#include "graphic.hpp"
#include "key.hpp"
-#include "mesh.hpp"
-#include "model.hpp"
#include "rotation_3d.hpp"
+#include "skeletal_model.hpp"
+#include "skeletal_mesh.hpp"
+#include "static_model.hpp"
+#include "static_mesh.hpp"
#include "sound.hpp"
#include "sprite.hpp"
#include "texture.hpp"
@@ -51,14 +53,22 @@ vk_debug_callback(
{
// Set level.
Log::Level log_level;
- if(message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)
+ switch(message_severity)
+ {
+ case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT:
log_level = Log::Level::Trace;
- else if(message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT)
+ break;
+ case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT:
log_level = Log::Level::Information;
- else if(message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
+ break;
+ case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT:
log_level = Log::Level::Warning;
- else if(message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
+ break;
+ case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT:
+ default:
log_level = Log::Level::Error;
+ break;
+ }
// Log message.
cg_core.log.message(log_level, callback_data->pMessage);
@@ -144,7 +154,9 @@ load_game(void *obj)
cg_graphic_finish_config(cg_core.mrb);
cg_core.max_frame_duration =
- duration<long long, std::milli>(1000 / cg_core.fps);
+ duration<long long, std::milli>(1000 / cg_core.fps);
+ // FIXME: actually calculates the real delta time.
+ cg_core.delta_time = 1.0f / cg_core.fps;
}
void
@@ -593,6 +605,26 @@ unload_vk_graphics_pipeline_3d(void *obj)
}
void
+load_vk_graphics_pipeline_3d_skeletal(void *obj)
+{
+ try
+ {
+ cg_core.vk_graphics_pipeline_3d_skeletal =
+ std::make_unique<VK::GraphicsPipeline3DSkeletal>();
+ }
+ catch(const CommandError &e)
+ {
+ throw CommandError{"Failed to create 3d skeletal graphics pipeline."};
+ }
+}
+
+void
+unload_vk_graphics_pipeline_3d_skeletal(void *obj)
+{
+ cg_core.vk_graphics_pipeline_3d_skeletal = nullptr;
+}
+
+void
load_vk_graphics_pipeline_2d_solid(void *obj)
{
try
@@ -660,14 +692,14 @@ unload_vk_renderer(void *obj)
void
load_mruby_interface(void *obj)
{
- mrb_value main_obj = mrb_obj_iv_inspect(cg_core.mrb, cg_core.mrb->top_self);
-
cg_candy_gear_init(cg_core.mrb);
cg_font_init(cg_core.mrb);
cg_key_init(cg_core.mrb);
- cg_mesh_init(cg_core.mrb);
- cg_model_init(cg_core.mrb);
cg_rotation_3d_init(cg_core.mrb);
+ cg_skeletal_model_init(cg_core.mrb);
+ cg_skeletal_mesh_init(cg_core.mrb);
+ cg_static_model_init(cg_core.mrb);
+ cg_static_mesh_init(cg_core.mrb);
cg_sound_init(cg_core.mrb);
cg_sprite_init(cg_core.mrb);
cg_texture_init(cg_core.mrb);
@@ -675,13 +707,6 @@ load_mruby_interface(void *obj)
cg_vector_4d_init(cg_core.mrb);
cg_view_2d_init(cg_core.mrb);
cg_view_3d_init(cg_core.mrb);
-
- mrb_funcall_id(cg_core.mrb, main_obj, cg_core.sym_init, 0);
- if (cg_core.mrb->exc)
- {
- mrb_print_error(cg_core.mrb);
- throw CommandError{"Error initializing game."};
- }
}
}
@@ -709,6 +734,9 @@ const CommandChain cg_sCore::loader{
&unload_vk_graphics_pipeline_2d_solid_layout},
{&load_vk_graphics_pipeline_2d_wired_layout,
&unload_vk_graphics_pipeline_2d_wired_layout},
+ // TODO: finish skeletal mesh animation
+ // {&load_vk_graphics_pipeline_3d_skeletal,
+ // &unload_vk_graphics_pipeline_3d_skeletal},
{&load_vk_graphics_pipeline_3d, &unload_vk_graphics_pipeline_3d},
{&load_vk_graphics_pipeline_2d_solid, &unload_vk_graphics_pipeline_2d_solid},
{&load_vk_graphics_pipeline_2d_wired, &unload_vk_graphics_pipeline_2d_wired},