diff options
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) |
