Add movement relative to time

Previously movement was based on frames rather than
time. I added time_get_dt() function for getting time
since last frame and changed rotation speed to use this
function.

Signed-off-by: Piotr Krygier <piotrkrygier@everyonecancode@xyz>
This commit is contained in:
Piotr Krygier
2026-02-24 13:38:04 +01:00
parent 415d4394c2
commit 7d6156be01
6 changed files with 42 additions and 3 deletions
+4 -2
View File
@@ -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)
+1
View File
@@ -70,6 +70,7 @@ rse_err_t window_loop(struct graphics_context_t* context)
}
}
time_update();
draw_frame(context);
fps_print(&start_time);
}
+4 -1
View File
@@ -14,5 +14,8 @@ executable(
dependencies : [
sdl3_dep,
],
link_with: rse_graphics_lib,
link_with: [
rse_graphics_lib,
rse_utilities_lib,
],
)
+2
View File
@@ -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));
+24
View File
@@ -1,9 +1,33 @@
#include "time_utils.h"
#include <stdint.h>
#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;
}
+7
View File
@@ -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_