diff options
| author | Gene Pasquet <dev@etenil.net> | 2026-04-08 00:38:55 +0100 |
|---|---|---|
| committer | Gene Pasquet <dev@etenil.net> | 2026-04-08 00:38:55 +0100 |
| commit | 0c3a700aa94a0256c5e5b1a14819f10b3d3e869b (patch) | |
| tree | c1b0dc233769bea9f6a545333687539ace5b3804 /engine.scm | |
| parent | f8cc4a748bb8b6431a1023a876745b1bb473eb19 (diff) | |
Support scling
Diffstat (limited to 'engine.scm')
| -rw-r--r-- | engine.scm | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -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) |
