get-screen-height
get-screen-width
get-screen-bpp
+ set-screen-bpp!
resize-screen
quit-video
clear-screen
flip-screen
+ set-screen-title!
+ get-screen-title
set-2d-mode
set-3d-mode
3d-mode?
- set-frames-per-second
+ get-frames-per-second
+ set-frames-per-second!
init-frame-time
get-frame-time
delay-frame
set-camera
camera-look
load-font
- render-text))
+ render-text)
+ #:export-syntax (glmatrix-block)
+ #:re-export (glPushMatrix
+ glPopMatrix))
+
;;; Screen
(define screen #f)
(define flags 0)
-(define* (init-video width height bpp #:key (mode '2d) (title ""))
+(define* (init-video width height bpp #:key (mode '2d) (title "") (fps 20))
(cond ((not screen)
(SDL_Init SDL_INIT_VIDEO)
(let ((info (SDL_GetVideoInfo)))
(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 "")
+ (set-screen-title! title)
+ (set-frames-per-second! fps)
(init-gl)
(if (eq? mode '3d) (set-3d-mode) (set-2d-mode))))))
(surface-w screen))
(define (get-screen-bpp)
- (surface-format-BytesPerPixel screen))
+ (* (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
(SDL_GL_SwapBuffers))
+(define screen-title "")
+
+(define (set-screen-title! title)
+ (set! screen-title title)
+ (SDL_WM_SetCaption title ""))
+
+(define (get-screen-title)
+ screen-title)
+
+
(define mode '2d)
(define (set-2d-mode)
;;; Frames per second
-(define set-frames-per-second #f)
-(define init-frame-time #f)
-(define get-frame-time #f)
-(define delay-frame #f)
+(define time 0)
+(define frames-per-second 20)
+(define time-per-frame 50) ;in ms
+
+(define (get-frames-per-second)
+ frames-per-second)
-;; (let ((time 0) (time-per-frame (/ 1000.0 *frames-per-second*)))
-;; (set! set-frames-per-second
-;; (lambda (fps)
-;; (set! time-per-frame (/ 1000.0 fps))))
+(define (set-frames-per-second! fps)
+ (set! frames-per-second fps)
+ (set! time-per-frame (/ 1000.0 fps)))
-;; (set! init-frame-time
-;; (lambda ()
-;; (set! time (SDL_GetTicks))))
+(define (init-frame-time)
+ (set! time (SDL_GetTicks)))
-;; (set! get-frame-time
-;; (lambda ()
-;; time))
+(define (get-frame-time)
+ time)
-;; (set! delay-frame
-;; (lambda ()
-;; (let ((frame-time (- (SDL_GetTicks) time)))
-;; (cond ((< frame-time time-per-frame)
-;; (SDL_Delay (- time-per-frame frame-time))))))))
+(define (delay-frame)
+ (let ((frame-time (- (SDL_GetTicks) time)))
+ (cond ((< frame-time time-per-frame)
+ (SDL_Delay (- time-per-frame frame-time))))))
;;; Drawing
(glLoadIdentity)
(cond ((3d-mode?) (camera-look))))
+(define-macro (glmatrix-block . code)
+ `(let ((result #f))
+ (glPushMatrix)
+ (set! result (begin ,@code))
+ (glPopMatrix)
+ result))
+
;;; Lights