Add basic window resizing
parent
f5fa46aeeb
commit
44911658d0
|
@ -15,6 +15,7 @@ void init_engine(GameEngine_t* engine, Vector2 starting_win_size)
|
||||||
init_assets(&engine->assets);
|
init_assets(&engine->assets);
|
||||||
engine->intended_window_size = starting_win_size;
|
engine->intended_window_size = starting_win_size;
|
||||||
InitWindow(starting_win_size.x, starting_win_size.y, "raylib");
|
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)
|
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->key_buffer);
|
||||||
sc_queue_term(&engine->scene_stack);
|
sc_queue_term(&engine->scene_stack);
|
||||||
sc_heap_term(&engine->scenes_render_order);
|
sc_heap_term(&engine->scenes_render_order);
|
||||||
|
UnloadRenderTexture(engine->base_canvas);
|
||||||
CloseAudioDevice();
|
CloseAudioDevice();
|
||||||
CloseWindow();
|
CloseWindow();
|
||||||
}
|
}
|
||||||
|
@ -239,7 +241,6 @@ static void _internal_render_scene(Scene_t* scene)
|
||||||
Vector2 draw_pos = {draw_rec.x, draw_rec.y};
|
Vector2 draw_pos = {draw_rec.x, draw_rec.y};
|
||||||
draw_rec.x = 0;
|
draw_rec.x = 0;
|
||||||
draw_rec.y = 0;
|
draw_rec.y = 0;
|
||||||
draw_rec.height *= -1;
|
|
||||||
DrawTextureRec(
|
DrawTextureRec(
|
||||||
layer->layer_tex.texture,
|
layer->layer_tex.texture,
|
||||||
draw_rec,
|
draw_rec,
|
||||||
|
@ -251,8 +252,38 @@ static void _internal_render_scene(Scene_t* scene)
|
||||||
|
|
||||||
inline void render_scene(Scene_t* scene)
|
inline void render_scene(Scene_t* scene)
|
||||||
{
|
{
|
||||||
BeginDrawing();
|
BeginTextureMode(scene->engine->base_canvas);
|
||||||
_internal_render_scene(scene);
|
_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();
|
EndDrawing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,6 +37,7 @@ typedef struct GameEngine {
|
||||||
// This is in case of window scaling, where there needs to be
|
// This is in case of window scaling, where there needs to be
|
||||||
// an absolute reference
|
// an absolute reference
|
||||||
Vector2 intended_window_size;
|
Vector2 intended_window_size;
|
||||||
|
RenderTexture2D base_canvas;
|
||||||
} GameEngine_t;
|
} GameEngine_t;
|
||||||
|
|
||||||
#define SCENE_ACTIVE_BIT (1 << 0) // Systems Active
|
#define SCENE_ACTIVE_BIT (1 << 0) // Systems Active
|
||||||
|
|
1
main.c
1
main.c
|
@ -26,6 +26,7 @@ int main(void)
|
||||||
{
|
{
|
||||||
// Initialization
|
// Initialization
|
||||||
//--------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------
|
||||||
|
SetConfigFlags(FLAG_WINDOW_RESIZABLE);
|
||||||
init_engine(&engine, (Vector2){screenWidth, screenHeight});
|
init_engine(&engine, (Vector2){screenWidth, screenHeight});
|
||||||
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
|
|
Loading…
Reference in New Issue