From fcd22d1fd9d99a73eefa984548adf86189a0060b Mon Sep 17 00:00:00 2001 From: onelin Date: Fri, 21 Mar 2025 13:32:59 +0100 Subject: Reset the camera before first iteration --- src/core/src/loop.c | 4 +++- src/rendering/include/engine/rendering/rendering.h | 1 + src/rendering/include/engine/rendering/window.h | 1 + src/rendering/src/rendering.c | 10 ++++++++++ src/rendering/src/window.c | 16 ++++++++-------- 5 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/core/src/loop.c b/src/core/src/loop.c index 0062173..dd39db1 100644 --- a/src/core/src/loop.c +++ b/src/core/src/loop.c @@ -306,6 +306,9 @@ i32 engine_run(Platform* p, StateType initial_state, void* state_arg) { /* The target frametime measured in μs */ const u32 fps_cap = p->fps_target > 0 ? 1000000 / p->fps_target : 0; + //window_resize(p->window, p->window->windowsize[0], p->window->windowsize[1]); + //r_reset_camera(p->cam); + /* Main loop */ do { /* frame_start is μs since engine was initialized */ @@ -323,7 +326,6 @@ i32 engine_run(Platform* p, StateType initial_state, void* state_arg) { /* Update */ StateType next_state; - // TODO: maybe use delta instead? next_state = update_func(dt, (void*)(mem->data)); if (next_state != STATE_null) { diff --git a/src/rendering/include/engine/rendering/rendering.h b/src/rendering/include/engine/rendering/rendering.h index b984176..abfb8d9 100644 --- a/src/rendering/include/engine/rendering/rendering.h +++ b/src/rendering/include/engine/rendering/rendering.h @@ -189,6 +189,7 @@ void r_perspective(f32 fov, Camera *c); void r_perspective_ortho(f32 sz, Camera *c); void r_set_camera(Camera* c); +void r_reset_camera(Camera* c); //void window_size_callback(GLFWwindow* window, i32 width, i32 height); diff --git a/src/rendering/include/engine/rendering/window.h b/src/rendering/include/engine/rendering/window.h index 561afd6..e5d3528 100644 --- a/src/rendering/include/engine/rendering/window.h +++ b/src/rendering/include/engine/rendering/window.h @@ -39,6 +39,7 @@ typedef struct { // Window function Window* init_window_glfw(const char* windowtitle, ivec2 windowsize, const u32 flags); void destroy_window(Window* w); +void window_resize(Window* window, int width, int height); // Renderer intializer(s) void init_render_opengl(Window* w, const u32 flags); diff --git a/src/rendering/src/rendering.c b/src/rendering/src/rendering.c index a938c78..c2f8ab2 100644 --- a/src/rendering/src/rendering.c +++ b/src/rendering/src/rendering.c @@ -352,6 +352,16 @@ void r_set_camera(Camera* c) { GLOBAL_PLATFORM->cam = c; } + +void r_reset_camera(Camera* c) { + if (c->type == Camera_Perspective) { + r_perspective(c->parameters.perspective.fov, c); + } + else if (c->type == Camera_Orthogonal) { + r_perspective_ortho(c->parameters.orthogonal.sz, c); + } +} + void engine_draw_sprite(Sprite* s, v2_i32* pos, f32 scale) { if (drawcall_len + 1 >= drawcall_limit) return; #ifdef _DEBUG diff --git a/src/rendering/src/window.c b/src/rendering/src/window.c index f27640a..b755035 100644 --- a/src/rendering/src/window.c +++ b/src/rendering/src/window.c @@ -40,7 +40,7 @@ void window_resize_callback(GLFWwindow* window, int width, int height) { gl->Finish(); } -void window_size_callback(GLFWwindow* window, int width, int height) { +void framebuffer_resize_callback(GLFWwindow* window, int width, int height) { (void)window; const GladGLContext* gl = GLOBAL_PLATFORM->window->context; Camera* c = GLOBAL_PLATFORM->cam; @@ -48,13 +48,13 @@ void window_size_callback(GLFWwindow* window, int width, int height) { GLOBAL_PLATFORM->window->windowsize[0] = width; GLOBAL_PLATFORM->window->windowsize[1] = height; - if (c->type == Camera_Perspective) { - r_perspective(c->parameters.perspective.fov, c); - } - else if (c->type == Camera_Orthogonal) { - r_perspective_ortho(c->parameters.orthogonal.sz, c); - } + r_reset_camera(c); +} +void window_resize(Window* window, int width, int height) { + /* TODO: Handle different frameworks */ + window_resize_callback(window->window, width, height); + framebuffer_resize_callback(window->window, width, height); } /* This is very glfw specific */ @@ -154,7 +154,7 @@ Window* init_window_glfw( printf("ok\n"); // Setup callbacks - glfwSetFramebufferSizeCallback(window, window_size_callback); + glfwSetFramebufferSizeCallback(window, framebuffer_resize_callback); glfwSetWindowSizeCallback(window, window_resize_callback); glfwSetKeyCallback(window, (GLFWkeyfun)key_callback); -- cgit v1.3