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
--
⑨