aboutsummaryrefslogtreecommitdiff
path: root/engine.scm
diff options
context:
space:
mode:
Diffstat (limited to 'engine.scm')
-rw-r--r--engine.scm23
1 files changed, 17 insertions, 6 deletions
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)