X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela%2Fgame.scm;h=fc0e135de1219f3326fc8b78bcc776d5ec919671;hb=db983f855772fcc138c84b5772a41b1a737f4e47;hp=fe5f0b3a1cfdc993d413ee9371f29c02b04a7fc0;hpb=b463d97fdd8afd06f987f5f13ab73b9502e2421b;p=gacela.git diff --git a/gacela/game.scm b/gacela/game.scm index fe5f0b3..fc0e135 100644 --- a/gacela/game.scm +++ b/gacela/game.scm @@ -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) @@ -138,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) @@ -155,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")