rendering: Added scaled rendering from frame buffer -> window
authorLukas Krickl <lukas@krickl.dev>
Tue, 24 Feb 2026 07:50:49 +0000 (08:50 +0100)
committerLukas Krickl <lukas@krickl.dev>
Tue, 24 Feb 2026 07:50:49 +0000 (08:50 +0100)
src/lrts.c
src/p_r_sdl/p_draw.c
src/p_r_sdl/p_init.c
src/u_defs.h

index 01149c092c49ccc57bba082bbe5ca30072738405..193c2e079cec2ee8ec9dc2c29dc262c112ed2b6b 100644 (file)
@@ -44,6 +44,22 @@ struct u_vec2 lrts_get_render_res(void) {
        return render_res;
 }
 
+#define U_SCREEN_W 1280
+#define U_SCREEN_H 720
+
+struct u_vec2 lrts_get_screen_res(void) {
+       struct lrts_config *cfg = lrts_cfg();
+
+       struct u_vec2 screen_res = cfg->screen_res;
+       if (screen_res.x == 0) {
+               screen_res.x = U_SCREEN_W;
+       }
+       if (screen_res.y == 0) {
+               screen_res.y = U_SCREEN_H;
+       }
+       return screen_res;
+}
+
 int lrts_main(int argc, char **argv) {
        p_io_init();
   lrts_getopt(argc, argv, lrts_cfg());
index c465e42a726a22ad5412b830f7f7ba15cfc1991e..cf5416e22dbf4c57fd1d25d63afe04ede7f7c6b1 100644 (file)
@@ -12,6 +12,13 @@ void p_draw_end(void) {
 
 void p_draw_present(void) {
        SDL_Surface* screen = SDL_GetWindowSurface(p_main_window);
-       SDL_BlitSurface(r_target, NULL, screen, NULL);
+       SDL_Rect dst;
+
+       dst.x = 0;
+       dst.y = 0;
+       dst.w = screen->w;
+       dst.h = screen->h;
+
+       SDL_BlitSurfaceScaled(r_target, NULL, screen, &dst, SDL_SCALEMODE_PIXELART);
        SDL_UpdateWindowSurface(p_main_window);
 }
index 51de98d7ebdb4490f1ca678ee1aa8811eba80488..41f2b13ea33fb1cda87b6c870157a364f406b41a 100644 (file)
@@ -7,9 +7,11 @@
 
 #include "p_window.c"
 
+#define DEFAULT_COLOR 0x222222FF
+
 int p_render_init(void) {
        struct lrts_config *cfg = lrts_cfg();
-       struct u_vec2 target_res = lrts_get_render_res();
+       struct u_vec2 target_res = lrts_get_screen_res();
 
        if (!SDL_Init(SDL_INIT_VIDEO)) {
                u_log(U_LOG_ERR, "Failed to init video: %s\n", 
@@ -24,7 +26,7 @@ int p_render_init(void) {
                exit(-1);
        }
 
-
+       SDL_FillSurfaceRect(SDL_GetWindowSurface(p_main_window), NULL, DEFAULT_COLOR);
        u_log(U_LOG_DEBUG, "Init successful\n");
 
        return 0;
@@ -37,6 +39,8 @@ int p_render_init_framebuffer(void) {
                u_log(U_LOG_ERR, "Failed to create surface: %s\n", SDL_GetError());
                exit(-1);
        }
+       
+       SDL_FillSurfaceRect(r_target, NULL, DEFAULT_COLOR);
 
        r_framebuffer.pixels = r_target->pixels;
        r_framebuffer.width = r_target->w;
index f6f30fc877b45ac75622dfd458097860d370e923..5207fb40ca386a17d9f558b6b761235b60d240e3 100644 (file)
@@ -41,6 +41,7 @@ struct lrts_config {
        const char *name;
        
        struct u_vec2 render_res;
+       struct u_vec2 screen_res;
 
        char **argv;
        int argc;
@@ -58,6 +59,11 @@ int lrts_main(int argc, char **argv);
  */
 struct u_vec2 lrts_get_render_res(void);
 
+/**
+ * Returns the screen resolution
+ */
+struct u_vec2 lrts_get_screen_res(void);
+
 
 #define LRTS_UNUSED(x) (void)(x)