X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=gacela%2Fimage.scm;h=e6c8f4ef74a38fbf24a59213656ec51d8645facf;hb=a586780bf88efb2a54df1e2af26600a549f7113d;hp=6a9710101009f7014360f0ca2ab21c69f2fa3655;hpb=e07174ebbc0c612e7b88ae75e261e14a52b686fd;p=gacela.git diff --git a/gacela/image.scm b/gacela/image.scm index 6a97101..e6c8f4e 100644 --- a/gacela/image.scm +++ b/gacela/image.scm @@ -17,21 +17,58 @@ (define-module (gacela image) #:use-module (gacela scene) + #:use-module (gacela game) + #:use-module ((sdl2) #:prefix sdl2:) + #:use-module ((sdl2 image) #:prefix sdl2:) + #:use-module ((sdl2 render) #:prefix sdl2:) #:use-module ((sdl2 surface) #:prefix sdl2:) - #:export (import-bitmap - move-xy)) + #:use-module (gl) + #:export (image + move + scale)) -(define-syntax-rule (import-bitmap filename) +(define (calculate proc-or-value) + (if (procedure? proc-or-value) + (proc-or-value) + proc-or-value)) + +(define (image filename) + (make-scene + "image" + (let ((image (sdl2:load-image filename)) + (texture #f) + (w/2 0) + (h/2 0)) + (lambda () + (when (not texture) + (set! texture (sdl2:surface->texture %sdl-renderer image)) + (set! w/2 (/ (sdl2:surface-width image) 2)) + (set! h/2 (/ (sdl2:surface-height image) 2))) + (gl-enable (oes-framebuffer-object texture-2d)) + (sdl2:bind-texture texture) + (gl-begin (begin-mode quads) + (gl-texture-coordinates 0 0) + (gl-vertex (- w/2) h/2 0) + (gl-texture-coordinates 1 0) + (gl-vertex w/2 h/2 0) + (gl-texture-coordinates 1 1) + (gl-vertex w/2 (- h/2) 0) + (gl-texture-coordinates 0 1) + (gl-vertex (- w/2) (- h/2) 0)) + (gl-disable (oes-framebuffer-object texture-2d)))))) + +(define* (move scene x y #:optional (z 0)) (make-scene - "bitmap" - (let ((surface (sdl2:load-bmp filename))) - (let ((a 0)) - (lambda () - (set! a (+ a 1)) - (format #t "Steps: ~a~%" a)))))) + "move" + (lambda () + (gl-translate (calculate x) + (calculate y) + (calculate z)) + (display-scene scene)))) -(define-syntax-rule (move-xy x y scene) +(define* (scale scene x #:optional (y x) (z y)) (make-scene - "move-xy" + "scale" (lambda () + (gl-scale x y z) (display-scene scene))))