shithub: m8c

Download patch

ref: 1c32be8a815f4fd4c096ff06706cbdf7db7ff664
parent: 230b71073d7fe3fee4e01f2013db91f37bfe5f3d
author: Jonne Kokkonen <jonne.kokkonen@gmail.com>
date: Wed Apr 2 06:49:09 EDT 2025

fix integer scaling on macos and windows

--- a/src/input.c
+++ b/src/input.c
@@ -198,11 +198,7 @@
       break;
 
     case SDL_EVENT_WINDOW_RESIZED:
-      if (SDL_GetTicks() - ticks_window_resized > 500) {
-        SDL_Log("Resizing window...");
-        key = (input_msg_s){special, msg_reset_display, 0, 0};
-        ticks_window_resized = SDL_GetTicks();
-      }
+      fix_texture_scaling_after_window_resize();
       break;
 
     case SDL_EVENT_KEY_DOWN:
--- a/src/render.c
+++ b/src/render.c
@@ -45,25 +45,37 @@
 // Initializes SDL and creates a renderer and required surfaces
 int renderer_initialize(const unsigned int init_fullscreen) {
 
+  // SDL documentation recommends this
+  atexit(SDL_Quit);
+
   if (SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | SDL_INIT_GAMEPAD) == false) {
-    SDL_LogCritical(SDL_LOG_CATEGORY_ERROR, "SDL_Init: %s\n", SDL_GetError());
+    SDL_LogCritical(SDL_LOG_CATEGORY_ERROR, "SDL_Init: %s", SDL_GetError());
     return false;
   }
 
-  // SDL documentation recommends this
-  atexit(SDL_Quit);
+  if (!SDL_CreateWindowAndRenderer(
+          "m8c", texture_width * 2, texture_height * 2,
+          SDL_WINDOW_RESIZABLE | SDL_WINDOW_HIGH_PIXEL_DENSITY | init_fullscreen, &win, &rend)) {
+    SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create window and renderer: %s",
+                 SDL_GetError());
+    return false;
+  }
 
-  win = SDL_CreateWindow("m8c", texture_width * 2, texture_height * 2,
-                         SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | init_fullscreen);
+  if (!SDL_SetRenderLogicalPresentation(rend, texture_width, texture_height, scaling_mode)) {
+    SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't set renderer logical presentation: %s",
+                 SDL_GetError());
+    return false;
+  }
 
-  rend = SDL_CreateRenderer(win, NULL);
-
-  SDL_SetRenderLogicalPresentation(rend, texture_width, texture_height, scaling_mode);
-
   main_texture = NULL;
   main_texture = SDL_CreateTexture(rend, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET,
                                    texture_width, texture_height);
 
+  if (main_texture == NULL) {
+    SDL_LogCritical(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create texture: %s", SDL_GetError());
+    return false;
+  }
+
   SDL_SetTextureScaleMode(main_texture, SDL_SCALEMODE_NEAREST);
 
   SDL_SetRenderTarget(rend, main_texture);
@@ -334,3 +346,8 @@
   renderer_set_font_mode(0);
   SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "Screensaver destroyed");
 }
+
+void fix_texture_scaling_after_window_resize(void) {
+  SDL_SetRenderTarget(rend, NULL);
+  SDL_SetRenderLogicalPresentation(rend, texture_width, texture_height, scaling_mode);
+}
\ No newline at end of file
--- a/src/render.h
+++ b/src/render.h
@@ -24,4 +24,5 @@
 void screensaver_draw();
 void screensaver_destroy();
 
+void fix_texture_scaling_after_window_resize(void);
 #endif
--