From d130c2c7314cf4884f444db16d7717b7356b54ff Mon Sep 17 00:00:00 2001 From: 3gg <3gg@shellblade.net> Date: Thu, 8 Feb 2024 07:58:22 -0800 Subject: Add window width and height to game. --- game/src/game.c | 10 ++++++++++ game/src/game.h | 2 ++ game/src/plugins/gltf_view.c | 16 +++++++++++++++- game/src/plugins/plugin.h | 2 +- game/src/plugins/texture_view.c | 3 --- 5 files changed, 28 insertions(+), 5 deletions(-) (limited to 'game') diff --git a/game/src/game.c b/game/src/game.c index 64be4f3..c720656 100644 --- a/game/src/game.c +++ b/game/src/game.c @@ -197,6 +197,10 @@ void app_update(Game* game, double t, double dt) { shutdown_plugin(game); const bool result = init_plugin(game); assert(result); // TODO: handle error better. + + // Trigger a resize just like the initial resize that occurs when the gfx + // application starts. + resize_plugin(game, game->width, game->height); } update_plugin(game, t, dt); @@ -210,6 +214,12 @@ void app_render(const Game* game) { } void app_resize(Game* game, int width, int height) { + game->width = width; + game->height = height; + + RenderBackend* render_backend = gfx_get_render_backend(game->gfx); + gfx_set_viewport(render_backend, width, height); + resize_plugin(game, width, height); } diff --git a/game/src/game.h b/game/src/game.h index 93a5e39..579ba3c 100644 --- a/game/src/game.h +++ b/game/src/game.h @@ -16,4 +16,6 @@ typedef struct { PluginEngine* plugin_engine; Plugin* plugin; Gfx* gfx; + int width; + int height; } Game; diff --git a/game/src/plugins/gltf_view.c b/game/src/plugins/gltf_view.c index c19d1b8..4ffdd1e 100644 --- a/game/src/plugins/gltf_view.c +++ b/game/src/plugins/gltf_view.c @@ -169,7 +169,7 @@ static void render_bounding_boxes(ImmRenderer* imm, const SceneNode* node) { const SceneObject* obj = gfx_get_node_object(node); const aabb3 box = gfx_calc_object_aabb(obj); gfx_imm_set_model_matrix(imm, &model); - gfx_imm_draw_aabb(imm, box); + gfx_imm_draw_aabb3(imm, box); } // Render children's boxes. @@ -194,3 +194,17 @@ void render(const Game* game, const State* state) { render_bounding_boxes(imm, gfx_get_scene_root(state->scene)); gfx_imm_end(imm); } + +void resize(Game* game, State* state, int width, int height) { + assert(game); + assert(state); + + const R fovy = 90 * TO_RAD; + const R aspect = (R)width / (R)height; + const R near = 0.1; + const R far = 1000; + const mat4 projection = mat4_perspective(fovy, aspect, near, far); + + Camera* camera = gfx_get_camera_camera(state->camera); + camera->projection = projection; +} diff --git a/game/src/plugins/plugin.h b/game/src/plugins/plugin.h index a2632cd..f7219c6 100644 --- a/game/src/plugins/plugin.h +++ b/game/src/plugins/plugin.h @@ -41,7 +41,7 @@ void update(Game*, State*, double t, double dt); void render(const Game*, const State*); /// Called when the game's window is resized. -void resize(Game* game, State* state, int width, int height); +void resize(Game*, State*, int width, int height); // Signatures for the plugin's exposed functions. typedef bool (*plugin_init)(Game*, State**); diff --git a/game/src/plugins/texture_view.c b/game/src/plugins/texture_view.c index b424158..31bf23e 100644 --- a/game/src/plugins/texture_view.c +++ b/game/src/plugins/texture_view.c @@ -133,9 +133,6 @@ void resize(Game* game, State* state, int width, int height) { assert(game); assert(state); - RenderBackend* render_backend = gfx_get_render_backend(game->gfx); - gfx_set_viewport(render_backend, width, height); - const R fovy = 90 * TO_RAD; const R aspect = (R)width / (R)height; const R near = 0.1; -- cgit v1.2.3