-(define init-video #f)
-(define get-screen-height #f)
-(define get-screen-width #f)
-(define get-screen-bpp #f)
-(define resize-screen #f)
-(define quit-video #f)
-
-(let ((screen #f) (flags 0))
- (set! init-video
- (lambda* (width height bpp #:key (mode '2d) (title ""))
- (cond ((not screen)
- (SDL_Init SDL_INIT_VIDEO)
- (let ((info (SDL_GetVideoInfo)))
- (SDL_GL_SetAttribute SDL_GL_DOUBLEBUFFER 1)
- (set! flags (+ SDL_OPENGL SDL_GL_DOUBLEBUFFER SDL_HWPALETTE SDL_RESIZABLE
- (if (= (assoc-ref info 'hw_available) 0) SDL_SWSURFACE SDL_HWSURFACE)
- (if (= (assoc-ref info 'blit_hw) 0) 0 SDL_HWACCEL)))
- (set! screen (SDL_SetVideoMode width height bpp flags))
- (SDL_WM_SetCaption title "")
- (init-gl)
- (if (eq? mode '3d) (set-3d-mode) (set-2d-mode)))))))
-
- (set! get-screen-height
- (lambda ()
- (surface-h screen)))
-
- (set! get-screen-width
- (lambda ()
- (surface-w screen)))
-
- (set! get-screen-bpp
- (lambda ()
- (surface-format-BytesPerPixel screen)))
-
- (set! resize-screen
- (lambda (width height)
- (cond (screen
- (set! screen (SDL_SetVideoMode width height (get-screen-bpp) flags))
- (resize-screen-GL width height)))))
-
- (set! quit-video
- (lambda ()
- (cond (screen
- (SDL_FreeSurface screen)
- (set! screen #f)
- (SDL_Quit))))))
+(define screen #f)
+(define flags 0)
+
+(define* (init-video width height bpp #:key (mode '2d) (title "") (fps 20))
+ (SDL_Init SDL_INIT_VIDEO)
+ (let ((info (SDL_GetVideoInfo)))
+ (SDL_GL_SetAttribute SDL_GL_DOUBLEBUFFER 1)
+ (set! flags (+ SDL_OPENGL SDL_GL_DOUBLEBUFFER SDL_HWPALETTE SDL_RESIZABLE
+ (if (= (assoc-ref info 'hw_available) 0) SDL_SWSURFACE SDL_HWSURFACE)
+ (if (= (assoc-ref info 'blit_hw) 0) 0 SDL_HWACCEL)))
+ (set! screen (SDL_SetVideoMode width height bpp flags))
+ (set-screen-title! title)
+ (set-frames-per-second! fps)
+ (init-gl)
+ (if (eq? mode '3d) (set-3d-mode) (set-2d-mode))))
+
+(define (get-screen-height)
+ (surface-h screen))
+
+(define (get-screen-width)
+ (surface-w screen))
+
+(define (get-screen-bpp)
+ (* (surface-format-BytesPerPixel screen) 8))
+
+(define (set-screen-bpp! bpp)
+ (cond (screen
+ (set! screen (SDL_SetVideoMode (get-screen-width) (get-screen-height) bpp flags)))))
+
+(define (resize-screen width height)
+ (cond (screen
+ (set! screen (SDL_SetVideoMode width height (get-screen-bpp) flags))
+ (resize-screen-GL width height))))
+
+(define (quit-video)
+ (cond (screen
+ (SDL_FreeSurface screen)
+ (set! screen #f)
+ (SDL_Quit))))