X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=src%2Fvideo.scm;h=e183f13330f05713125651b2063ea9ff83fabf39;hb=995c7af364cfdc254e904a3b560e068339613534;hp=e0b7a6da10823354c930a724a25bae533771dcf9;hpb=67e90e6957fd664b8f5f25dfd43aee079b56a03e;p=gacela.git diff --git a/src/video.scm b/src/video.scm index e0b7a6d..e183f13 100644 --- a/src/video.scm +++ b/src/video.scm @@ -26,14 +26,18 @@ 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 @@ -56,7 +60,11 @@ set-camera camera-look load-font - render-text)) + render-text) + #:export-syntax (glmatrix-block) + #:re-export (glPushMatrix + glPopMatrix)) + ;;; Screen @@ -64,7 +72,7 @@ (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))) @@ -73,7 +81,8 @@ (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)))))) @@ -84,7 +93,11 @@ (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 @@ -104,6 +117,16 @@ (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) @@ -145,29 +168,27 @@ ;;; 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 @@ -345,6 +366,13 @@ (glLoadIdentity) (cond ((3d-mode?) (camera-look)))) +(define-macro (glmatrix-block . code) + `(let ((result #f)) + (glPushMatrix) + (set! result (begin ,@code)) + (glPopMatrix) + result)) + ;;; Lights