From 0c3a700aa94a0256c5e5b1a14819f10b3d3e869b Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Wed, 8 Apr 2026 00:38:55 +0100 Subject: Support scling --- engine.scm | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'engine.scm') diff --git a/engine.scm b/engine.scm index 38ebfed..d88a94b 100644 --- a/engine.scm +++ b/engine.scm @@ -18,6 +18,7 @@ (defstruct game title width height + scale ;; positive integer: whole-game pixel scaling factor window renderer input ;; input-state record input-config ;; input-config record @@ -41,14 +42,18 @@ (define (make-game #!key (title "Downstroke Game") (width 640) (height 480) + (scale 1) (frame-delay 16) (input-config *default-input-config*) (preload #f) (create #f) (update #f) (render #f) (debug? #f)) + (unless (and (integer? scale) (positive? scale)) + (error "make-game: scale must be a positive integer" scale)) (make-game* title: title width: width height: height + scale: scale window: #f renderer: #f scene: #f @@ -128,12 +133,18 @@ (sdl2:game-controller-open! i)) (init-controllers (+ i 1)))) - ;; 2. Create window + renderer - (game-window-set! game - (sdl2:create-window! (game-title game) 'centered 'centered - (game-width game) (game-height game) '())) - (game-renderer-set! game - (sdl2:create-renderer! (game-window game) -1 '(accelerated))) + ;; 2. Create window + renderer (window size = logical size × scale) + (let ((scale (game-scale game))) + (game-window-set! game + (sdl2:create-window! (game-title game) 'centered 'centered + (* (game-width game) scale) + (* (game-height game) scale) '())) + (game-renderer-set! game + (sdl2:create-renderer! (game-window game) -1 '(accelerated))) + (when (> scale 1) + (sdl2:render-logical-size-set! + (game-renderer game) + (list (game-width game) (game-height game))))) ;; 3. preload: hook — user loads assets here (when (game-preload-hook game) -- cgit v1.2.3