]> git.jsancho.org Git - gacela.git/blobdiff - gacela/game.scm
Keep SDL context open
[gacela.git] / gacela / game.scm
index e8e635a51b0ad632dc3662a124702e14f0b979ce..fc0e135de1219f3326fc8b78bcc776d5ec919671 100644 (file)
@@ -56,8 +56,7 @@ instead of becoming completely unresponsive and possibly crashing."
     (define (draw dt alpha)
       "Render a frame."
       (let ((size (sdl2:window-size %sdl-window)))
-       (gl-viewport 0 0 (car size) (cadr size)))
-      (gl-clear (clear-buffer-mask color-buffer depth-buffer))
+        (resize-window (car size) (cadr size)))
       (if %root-scene
          (%root-scene))
       ;;(run-hook draw-hook dt alpha)
@@ -82,6 +81,7 @@ unused accumulator time."
               (iter (- lag tick-interval) (1+ ticks)))
              (else
               lag)))
+      (clear-events)
       (iter lag 0))
 
     (define (alpha lag)
@@ -137,15 +137,24 @@ milliseconds of the last iteration of the game loop."
 (define %gl-context #f)
 
 (define (init-window)
-  (sdl2:sdl-init)
-  (set! %sdl-window (sdl2:make-window #:opengl? #t #:show? #t))
-  (set! %sdl-renderer (sdl2:make-renderer %sdl-window))
-  (sdl2:set-gl-attribute! 'context-major-version 3)
-  (sdl2:set-gl-attribute! 'context-minor-version 2)
-  (sdl2:set-gl-attribute! 'double-buffer 1)
-  (sdl2:set-gl-attribute! 'depth-size 24)
-  (set! %gl-context (sdl2:make-gl-context %sdl-window))
-  (sdl2:set-gl-swap-interval! 'vsync))
+  (when (not %sdl-window)
+    (sdl2:sdl-init)
+    (sdl2:set-gl-attribute! 'context-major-version 3)
+    (sdl2:set-gl-attribute! 'context-minor-version 2)
+    (sdl2:set-gl-attribute! 'double-buffer 1)
+    (sdl2:set-gl-attribute! 'depth-size 24)
+    (set! %sdl-window (sdl2:make-window #:opengl? #t #:show? #t))
+    (set! %sdl-renderer (sdl2:make-renderer %sdl-window))
+    (set! %gl-context (sdl2:make-gl-context %sdl-window))
+    (sdl2:set-gl-swap-interval! 'vsync))
+  (init-gl))
+
+(define (init-gl)
+  (set-gl-matrix-mode (matrix-mode projection))
+  (gl-load-identity)
+  (set-gl-matrix-mode (matrix-mode modelview))
+  (gl-load-identity)
+  (set-gl-clear-color 0 0 0 1))
 
 (define (open-window title resolution fullscreen?)
   (sdl2:set-window-title! %sdl-window title)
@@ -154,8 +163,18 @@ milliseconds of the last iteration of the game loop."
   (sdl2:show-window! %sdl-window))
 
 (define (close-window)
-  (sdl2:hide-window! %sdl-window)
-  (sdl2:sdl-quit))
+  (sdl2:hide-window! %sdl-window))
+
+(define (resize-window width height)
+  (gl-viewport 0 0 width height)
+  (set-gl-matrix-mode (matrix-mode projection))
+  (gl-load-identity)
+  (let ((w (/ width 2))
+        (h (/ height 2)))
+    (gl-ortho (- w) w (- h) h 0 1))
+  (set-gl-matrix-mode (matrix-mode modelview))
+  (gl-clear (clear-buffer-mask color-buffer depth-buffer))
+  (gl-load-identity))
 
 (define* (start-game scene #:key
                    (title "Untitled")