diff --git a/graphics/src/rse_graphics.c b/graphics/src/rse_graphics.c index 18e3173b..5a044d71 100644 --- a/graphics/src/rse_graphics.c +++ b/graphics/src/rse_graphics.c @@ -28,7 +28,6 @@ struct rse_graphics_context_t struct graphics_context_t* context; }; -#define NS_TO_S(time) (time/1000000000) static void model_view_projection_update(struct graphics_context_t* context) { vec3 eye = {0}; @@ -38,6 +37,7 @@ static void model_view_projection_update(struct graphics_context_t* context) float fovy; float z_near; float z_far; + static float rotation = 0.0; eye[2] = -5.0f; @@ -49,7 +49,7 @@ static void model_view_projection_update(struct graphics_context_t* context) glm_mat4_identity(context->mvp_data.model); - glm_rotate(context->mvp_data.model, time_get_sec_from_start() * glm_rad(90.0f), rotation_vec); + glm_rotate(context->mvp_data.model, rotation, rotation_vec); glm_lookat(eye, center, up, context->mvp_data.view); glm_perspective( fovy, @@ -57,6 +57,8 @@ static void model_view_projection_update(struct graphics_context_t* context) z_near, z_far, context->mvp_data.proj); + + rotation += time_get_dt() * glm_rad(90.0); } static rse_err_t render_static_mesh(struct graphics_context_t* context, uint32_t renderer_id) diff --git a/graphics/src/window.c b/graphics/src/window.c index c82c10b1..b9d6983c 100644 --- a/graphics/src/window.c +++ b/graphics/src/window.c @@ -70,6 +70,7 @@ rse_err_t window_loop(struct graphics_context_t* context) } } + time_update(); draw_frame(context); fps_print(&start_time); } diff --git a/red_scarf_engine/meson.build b/red_scarf_engine/meson.build index 043f31fd..c400b614 100644 --- a/red_scarf_engine/meson.build +++ b/red_scarf_engine/meson.build @@ -14,5 +14,8 @@ executable( dependencies : [ sdl3_dep, ], - link_with: rse_graphics_lib, + link_with: [ + rse_graphics_lib, + rse_utilities_lib, + ], ) diff --git a/red_scarf_engine/src/main.c b/red_scarf_engine/src/main.c index a9cb6a6c..83d751b0 100644 --- a/red_scarf_engine/src/main.c +++ b/red_scarf_engine/src/main.c @@ -3,6 +3,7 @@ #include "graphics/rse_graphics.h" #include "utilities/errors_common.h" #include "SDL3/SDL_thread.h" +#include "utilities/time_utils.h" int main(int argc, char** argv) @@ -15,6 +16,7 @@ int main(int argc, char** argv) SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE); + STATUS_CHECK(time_init()); STATUS_CHECK(rse_graphics_init(&context)); STATUS_CHECK(rse_graphics_test_function(context)); diff --git a/utilities/src/time_utils.c b/utilities/src/time_utils.c index 4535bff0..b6529820 100644 --- a/utilities/src/time_utils.c +++ b/utilities/src/time_utils.c @@ -1,9 +1,33 @@ #include "time_utils.h" #include #include "SDL3/SDL_timer.h" +#include "commons.h" +#include "errors_common.h" #define NS_TO_S(time) (time/1000000000) +double g_last_time = 0.0; + +rse_err_t time_init(void) +{ + g_last_time = NS_TO_S((double)SDL_GetTicksNS()); + + return RSE_ERROR_NO_ERROR; +} + double time_get_sec_from_start(void) { return NS_TO_S((double)SDL_GetTicksNS()); } + +void time_update(void) +{ + g_last_time = NS_TO_S((double)SDL_GetTicksNS()); +} + +double time_get_dt(void) +{ + float time = NS_TO_S((double)SDL_GetTicksNS()); + float dt = time - g_last_time; + + return dt; +} diff --git a/utilities/time_utils.h b/utilities/time_utils.h index 0c728d0d..ad83e3d3 100644 --- a/utilities/time_utils.h +++ b/utilities/time_utils.h @@ -12,6 +12,13 @@ #ifndef TIME_UTILS_H_ #define TIME_UTILS_H_ +#include "commons.h" + +rse_err_t time_init(void); +void time_update(void); + double time_get_sec_from_start(void); +double time_get_dt(void); + #endif // !TIME_UTILS_H_