Add basic window resizing

main
En Yi 2024-10-12 15:02:08 +08:00
parent f5fa46aeeb
commit 44911658d0
3 changed files with 35 additions and 2 deletions

View File

@ -15,6 +15,7 @@ void init_engine(GameEngine_t* engine, Vector2 starting_win_size)
init_assets(&engine->assets);
engine->intended_window_size = starting_win_size;
InitWindow(starting_win_size.x, starting_win_size.y, "raylib");
engine->base_canvas = LoadRenderTexture(starting_win_size.x, starting_win_size.y);
}
void deinit_engine(GameEngine_t* engine)
@ -24,6 +25,7 @@ void deinit_engine(GameEngine_t* engine)
sc_queue_term(&engine->key_buffer);
sc_queue_term(&engine->scene_stack);
sc_heap_term(&engine->scenes_render_order);
UnloadRenderTexture(engine->base_canvas);
CloseAudioDevice();
CloseWindow();
}
@ -239,7 +241,6 @@ static void _internal_render_scene(Scene_t* scene)
Vector2 draw_pos = {draw_rec.x, draw_rec.y};
draw_rec.x = 0;
draw_rec.y = 0;
draw_rec.height *= -1;
DrawTextureRec(
layer->layer_tex.texture,
draw_rec,
@ -251,8 +252,38 @@ static void _internal_render_scene(Scene_t* scene)
inline void render_scene(Scene_t* scene)
{
BeginDrawing();
BeginTextureMode(scene->engine->base_canvas);
_internal_render_scene(scene);
EndTextureMode();
int curr_width = GetRenderWidth();
int curr_height = GetRenderHeight();
Vector2 original_size = scene->engine->intended_window_size;
float wscale = (curr_width / original_size.x);
float hscale = (curr_height / original_size.y);
float min_dim = (wscale > hscale) ? hscale : wscale;
wscale = min_dim;
hscale = min_dim;
Rectangle draw_rec = {
0,0,
scene->engine->intended_window_size.x,
scene->engine->intended_window_size.y
};
Rectangle draw_pos = {
draw_rec.x * wscale, draw_rec.y * hscale,
draw_rec.width * wscale, draw_rec.height * hscale
};
draw_rec.y *= -1;
BeginDrawing();
ClearBackground((Color){0,0,0,255});
DrawTexturePro(
scene->engine->base_canvas.texture,
draw_rec,
draw_pos,
(Vector2){0,0}, 0.0, WHITE
);
EndDrawing();
}

View File

@ -37,6 +37,7 @@ typedef struct GameEngine {
// This is in case of window scaling, where there needs to be
// an absolute reference
Vector2 intended_window_size;
RenderTexture2D base_canvas;
} GameEngine_t;
#define SCENE_ACTIVE_BIT (1 << 0) // Systems Active

1
main.c
View File

@ -26,6 +26,7 @@ int main(void)
{
// Initialization
//--------------------------------------------------------------------------------------
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
init_engine(&engine, (Vector2){screenWidth, screenHeight});
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
#ifndef NDEBUG